Una pregunta para los expertos en MQL - página 14

 

continuación de la pregunta:

El algoritmo para tal condición se implementa como sigue, aquí está el filtro en sí:

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

Y aquí está la condición de entrada propiamente dicha:

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

Pero el Asesor Experto no parece ver la condición del filtro. Abre posiciones como antes sin prestar atención a

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

No entiendo por qué. Supervisión repetida de la apertura de posiciones en línea. Pero el filtro no funciona. El Asesor Experto no lo ve. Por favor, dígame dónde está el error.

Y otra pregunta. ¿Cuál es la forma correcta de establecer en las variables globales (es la primera opción en este momento)

bool Filtro_comercial2=0; o simplemente bool Filtro_comercial2;

 
Rita:

la continuación de la pregunta:

...

Saque MA_11, MA_21, DELTA_MA_2 en Coment() y vea lo que hay. Comentario() insertado después del doble DELTA_MA_2...

El MACD se está comparando desde dos símbolos diferentes, pueden tener dimensiones muy diferentes.

 

Hay un comentario. El comentario se establece como "El filtro permite (o deniega) la entrada"), así:

Hecho de esta manera:

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, "Фильтр Отключен", "\
Observo visualmente que las líneas siguen siendo divergentes y el comentario muestra "¡El filtro prohíbe la entrada! Pero la entrada se sigue implementando - el EA no presta atención al filtro.

La dimensionalidad de las herramientas es la misma, o (con diferente dimensionalidad) - reducida programáticamente a la misma usando coeficientes (esto no se muestra en el código de arriba, para no saturarlo)). ¡Está bien!

 

Pero los dobles DELTA_MA_2, MA_11, MA_21- se declaran a continuación f-i Comment()

¡Pero Trade_Filter2 está declarado en variables globales! Así que, ¡creo que todo está hecho correctamente en el comentario!

 
Desactiva tu comentario por un tiempo y trata de emitirlo desde diferentes lugares. Desde que comprueba las condiciones del filtro hasta que lo utiliza. De este modo, encontrarás la línea donde se produce la distorsión.
 
Bien, gracias, Dimitri. Intentaré utilizar tu recomendación después del fin de semana.
 
Imprima los valores de todos sus parámetros en Print y colóquelo inmediatamente después del operador de apertura de la orden.
 

Buenas tardes. Después de la actualización de hoy de mt4 no puedo compilar el código de EA. Hay 30 errores extraños que salen del compilador.

¿Podría decirme por qué aparecen repentinamente errores en las siguientes líneas
código:

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' - identificador no declarado Exp_ARBITR_2Line_Spread_002Mod.mq4 125 35

'on_off4' - identificador no declarado Exp_ARBITR_2Line_Spread_002Mod.mq4 140 47

'on_off41' - identificador no declarado Exp_ARBITR_2Line_Spread_002Mod.mq4 142 47

¿Y cómo corregirlos?

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

¿Compila así?

Pero es mejor así:

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 he telepateado correctamente, esto debería funcionar