Une question pour les experts MQL - page 14

 

la suite de la question :

L'algorithme pour une telle condition est implémenté comme suit, voici le filtre lui-même :

//================фильтр   - начало схождения ===================
 if (FILTER_ ) { //если выключатель   фильтра включен
//------------------------------------------------ 
//задаем вычисление ценовых линий на втором   баре
double  MA_11= (iMA(Symbol_1,Period(),per2,0,ma_method,Price,2)-
                iMA(Symbol_1,Period(),per1,0,ma_method,Price,2)) ;  
double  MA_21= (iMA(Symbol_2,Period(),per2,0,ma_method,Price,2)-
                iMA(Symbol_2,Period(),per1,0,ma_method,Price,2))  ;    
double ДЕЛЬТА_MA_2 = MathAbs(MA_11 - MA_21);//разность между ценовыми линиями на 2 баре
//
if (ДЕЛЬТА_MA_2 >=  ДЕЛЬТА_MA) // если линии начинают сходится, разрешаем вход
       Trade_Filter2=true;       else Trade_Filter2=false; 
//-------------------------------------------------                 
         }  // выключатель   фильтра включен
//================== конец блока 2-го фильтра ======================

Et voici la condition d'entrée elle-même :

if  ( TradeDOWN==true  && .... ) {            //если условия соответствуют заданным 
if (Trade_Filter2==true || ! FILTER_ ) {       //  фильтр включен/выключен  
 ..... открвываем позиции: продаем первый инструмент и покупаем второй    

Mais le conseiller expert ne semble pas voir la condition du filtre ! Il ouvre les positions comme auparavant sans prêter attention à

if (Trade_Filter2==true || ! FILTER_ ) { .....

Je ne comprends pas pourquoi. Suivi répété de l'ouverture en ligne des postes. Mais le filtre ne fonctionne pas ! Le conseiller expert ne le voit pas. S'il vous plaît, dites-moi où il y a une erreur ?

Et une autre question. Quelle est la manière correcte de définir les variables globales (c'est la première option pour le moment) ?

bool Trade_Filter2=0; ou simplement bool Trade_Filter2;

 
Rita:

la suite de la question :

...

Sortez MA_11, MA_21, DELTA_MA_2 dans Coment() et voyez ce qu'il y a. Commentaire() inséré après le double DELTA_MA_2...

Le MACD est comparé à partir de deux caractères différents, ils peuvent avoir des dimensions très différentes.

 

Il y a un commentaire. Le commentaire est réglé sur "Le filtre permet (ou refuse) l'entrée"), comme ceci :

Fait comme ça :

string on_off=StringConcatenate  (on_off,
"1-й(текущий)инстр.=",Symbol_1," 2-й инстр.=",Symbol_2," ",.....
"ДельтаТекущая/ДельтаЗаданная = ", ДЕЛЬТА_MA," / ",ДЕЛЬТА, "\n", 
 "MA_1 ",Symbol_1, "= ", MA_1 , "\n",
 "MA_2 ",Symbol_2, "= ", MA_2 , "\n",

 //--------------------------------------------------------------------------------

if (Trade_Filter2==true && FILTER_==true )  
        string  on_off4 = StringConcatenate (on_off4, "Фильтр Разрешает вход", "\n");
if (Trade_Filter2==false && FILTER_==true )  
        string  on_off41 = StringConcatenate (on_off41, "фильтр Запрещает вход", "\n");
if (FILTER_==false   )  
        string  on_off42 = StringConcatenate (on_off42, "Фильтр Отключен", "\
Je constate visuellement que les lignes divergent toujours et le commentaire affiche "Filter prohibits input" ! Mais l'entrée est toujours effectuée - l'EA ne fait pas attention au filtre.

La dimensionnalité des outils est la même, ou (avec une dimensionnalité différente) - réduite programmatiquement à la même en utilisant des coefficients (ceci n'est pas montré dans le code ci-dessus, pour ne pas l'encombrer)). C'est bien !

 

Mais les doubles DELTA_MA_2, MA_11, MA_21- sont déclarés ci-dessous f-i Comment()

Mais Trade_Filter2 est déclaré dans des variables globales! Donc, je pense que tout est fait correctement dans le commentaire !

 
Désactivez votre commentaire pendant un moment et essayez de le sortir de différents endroits. De l'endroit où vous vérifiez l'état du filtre à celui où vous l'utilisez. De cette façon, vous trouverez la ligne où la distorsion se produit.
 
OK, merci, Dimitri ! Je vais essayer d'utiliser ta recommandation après le week-end.
 
Imprimez les valeurs de tous vos paramètres dans Print et placez-le immédiatement après l'opérateur d'ouverture de l'ordre.
 

Bon après-midi. Après la mise à jour de mt4 d'aujourd'hui, je ne peux pas compiler le code EA. Il y a 30 erreurs étranges qui sortent du compilateur.

Pourriez-vous me dire pourquoi des erreurs apparaissent soudainement sur les lignes suivantes
code :

if (Trade_Filter2==true && FILTER_==true )  
        string  on_off4 = StringConcatenate ( on_off4, "Фильтр Разрешает вход", "\n");
if (Trade_Filter2==false && FILTER_==true )  
        string  on_off41 = StringConcatenate (on_off41, "фильтр Запрещает вход", "\n");
if (FILTER_==false   )  
        string  on_off42 = StringConcatenate (on_off42, "Фильтр Отключен", "\n");       
on_off' - identifiant non déclaré Exp_ARBITR_2Line_Spread_002Mod.mq4 125 35

on_off4' - identifiant non déclaré Exp_ARBITR_2Line_Spread_002Mod.mq4 140 47

on_off41' - identifiant non déclaré Exp_ARBITR_2Line_Spread_002Mod.mq4 142 47

Et comment les corriger ?

 
if (Trade_Filter2==true && FILTER_==true )  
 {
  string on_off4;
  on_off4 = StringConcatenate ( on_off4, "Фильтр Разрешает вход", "\n");
 }
if (Trade_Filter2==false && FILTER_==true )  
 {
  string on_off41;
  on_off41 = StringConcatenate (on_off41, "фильтр Запрещает вход", "\n");
 }
if (FILTER_== false)  
 {
  string on_off42;
  on_off42 = StringConcatenate (on_off42, "Фильтр Отключен", "\n");
 }

Est-ce que ça se compile comme ça ?

Mais c'est mieux comme ça :

string on_off4;
string on_off41;
string on_off42;
if (Trade_Filter2 == true && FILTER_ == true) on_off4 = "Фильтр Разрешает вход\n";
if (Trade_Filter2 == false && FILTER_ == true) on_off41 = "фильтр Запрещает вход\n";
if (FILTER_ == false) on_off42 = "Фильтр Отключен\n";
 
string on_off4, on_off41, on_off42;
if (Trade_Filter2==true && FILTER_==true )  
        on_off4 = StringConcatenate ( on_off4, "Фильтр Разрешает вход", "\n");
if (Trade_Filter2==false && FILTER_==true )  
        on_off41 = StringConcatenate (on_off41, "фильтр Запрещает вход", "\n");
if (FILTER_==false   )  
        on_off42 = StringConcatenate (on_off42, "Фильтр Отключен", "\n");       

Si j'ai télépaté correctement, ça devrait marcher.