No para los desarrolladores de MT. ¿Por qué sustituir INIT_PARAMETERS_INCORRECT? - página 10

 
Aleksey Vyazmikin:

Los parámetros incorrectos se desactivan generalmente por 3 razones:

1. el área de estudio no es de interés (por ejemplo, excluyendo una serie de marcos temporales, como la opción más comprensible);

//--- пропустить бесполезные проходы оптимизации
   if(my_timeframe != PERIOD_M15   &&
      my_timeframe != PERIOD_M30   &&
      my_timeframe != PERIOD_H1    &&
      my_timeframe != PERIOD_H3    &&
      my_timeframe != PERIOD_H6      )
   {
      Print("ОШИБКА - Период не запланирован");
      return(INIT_PARAMETERS_INCORRECT);
   }
 
Сергей Таболин:

Absolutamente correcto.

 
Сергей Таболин:

¿Cómo se organiza la optimización de MA del ejemplo sin incluir los parámetros "no válidos"?

Vale, estoy de acuerdo, no me fijé bien. para optimizar otro parámetro con un hueco no válido recortado

 
TheXpert:

OK, estoy de acuerdo, no lo he mirado bien. para optimizar, saca otro parámetro con el hueco no válido recortado

¿Puede darme un ejemplo?

 
Сергей Таболин:

¿Puedo darle un ejemplo?

input int period_MA_warp = 15;

//...

period_MA = (period_MA_warp <= 31) ? period_MA_warp : period_MA_warp + 50;
 
TheXpert:

Estoy de acuerdo. ¿Y en el caso de los plazos?

 
Сергей Таболин:

Estoy de acuerdo. ¿Y qué hacer en caso de plazos?

Por ejemplo, crear un array con todos los valores de TF y optimizar por índice del array

 
TheXpert:

Por ejemplo, para crear un array con todos los valores de TF y optimizarlo por índice del array

Bueno, esto me parece una muleta... Tal vez me equivoque, pero es casi lo mismo que tuve que hacer con mi ejemplo inicial. Excepto que en este caso no es necesario volcar toda la matriz en un archivo de antemano...

 

Surgió una idea para tamizar los parámetros "no válidos" durante la optimización genética en OnTester():

double OnTester()
{
   if(MQLInfoInteger(MQL_OPTIMIZATION) && paramIncorrect())  return(-99999999.99);
}

Resulta que sin interferir en la genética los resultados de INIT_PARAMETERS_INCORRECT pueden no verse.

Aquí se plantea otra cuestión: ¿podemos obtener un "deep minus" sobre los beneficios en este caso?

 

La forma en que lo hice: se crea un parámetro independiente y se sustituyen otros valores en función de su valor.

Un ejemplo sencillo (hace 2 semanas):

Existen los parámetros de tiempo: TF_UP (Senior) y TF_DOWN (Junior), y el Senior debe ser siempre mayor que el Junior, en caso contrario sale input_incorrect. En el probador hay muchos resultados nulos y la genética "trabaja para nada" (aunque es rápida). Como resultado, he eliminado estos 2 parámetros y creado un nuevo parámetro que tiene el tipo descrito a continuación, y optimizar sólo él, y ya en la función OnInit la sustitución en otros 2 parámetros, en función de este parámetro.

enum TF_only_opt
{
   _H4_H1 = 0,
   _H4_M30 = 1,
   _H4_M15 = 2,
   _H1_M30 = 3,
   _H1_M15 = 4,
   _H1_M5 = 5,
   _M30_M15 = 6,
   _M30_M5 = 7,
   _M30_M1 = 8,
   _M15_M5 = 9,
   _M15_M1 = 10,
   _M5_M1 = 11
};