Una domanda per gli esperti di MQL - pagina 14

 

continuazione della domanda:

L'algoritmo per tale condizione è implementato come segue, ecco il filtro stesso:

//================фильтр   - начало схождения ===================
 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-го фильтра ======================

Ed ecco la condizione di entrata stessa:

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

Ma l'Expert Advisor non sembra vedere la condizione del filtro! Continua ad aprire posizioni senza prestare attenzione a

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

Non capisco perché. Ha monitorato ripetutamente l'apertura di posizioni online. Ma il filtro non funziona! L'Expert Advisor non lo vede. Per favore, ditemi dove è sbagliato?

E un'altra domanda. Qual è il modo corretto di impostare le variabili globali (è la prima opzione al momento)

bool Trade_Filter2=0; o semplicemente bool Trade_Filter2;

 
Rita:

la continuazione della domanda:

...

Emettere MA_11, MA_21, DELTA_MA_2 in Coment() e vedere cosa c'è. Commento() inserito dopo il doppio DELTA_MA_2...

Il MACD viene confrontato da due caratteri diversi, possono avere dimensioni molto diverse.

 

C'è un commento. Il commento è impostato su "Filter allows (or denies) entry"), come questo:

Fatto in questo modo:

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, "Фильтр Отключен", "\
Osservo visivamente che le linee divergono ancora e il commento visualizza "Filter prohibits input"! Ma l'entrata è ancora implementata - l'EA non presta attenzione al filtro.

La dimensionalità degli strumenti è la stessa, o (con dimensionalità diversa) - ridotta programmaticamente alla stessa usando i coefficienti (questo non è mostrato nel codice sopra, per non ingombrarlo)). Va bene!

 

Ma i doppi DELTA_MA_2, MA_11, MA_21- sono dichiarati sotto f-i Comment()

Ma Trade_Filter2 è dichiarato in variabili globali! Quindi, penso che tutto sia stato fatto correttamente nel commento!

 
Disattivate il vostro commento per un po' e provate a farlo uscire da posti diversi. Da dove controllate le condizioni del filtro a dove lo usate. In questo modo troverete la linea dove si verifica la distorsione.
 
Ok, grazie Dimitri, cercherò di usare la tua raccomandazione dopo il fine settimana.
 
Stampate i valori di tutti i vostri parametri in Print e mettetelo immediatamente dopo l'operatore di apertura dell'ordine.
 

Buon pomeriggio. Dopo l'aggiornamento odierno di mt4 non riesco a compilare il codice EA. Ci sono 30 strani errori che escono dal compilatore.

Potreste dirmi perché improvvisamente appaiono degli errori sulle seguenti linee
codice:

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' - identificatore non dichiarato Exp_ARBITR_2Line_Spread_002Mod.mq4 125 35

'on_off4' - identificatore non dichiarato Exp_ARBITR_2Line_Spread_002Mod.mq4 140 47

'on_off41' - identificatore non dichiarato Exp_ARBITR_2Line_Spread_002Mod.mq4 142 47

E come correggerli?

 
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");
 }

Si compila così?

Ma è meglio così:

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");       

Se ho telepatizzato correttamente, questo dovrebbe funzionare

Motivazione: