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

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

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

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

Pero aquí tenemos otra pregunta: ¿podemos obtener un "deep minus" en el beneficio en este caso?

este es un método muy lento. Estamos gastando recursos calculando todo el pase.

 
Mikhail Mitin:

es un método muy lento. Estamos desperdiciando recursos en calcular mal todo el pasillo.

De dos males...

 
Mikhail Mitin:

es un método muy lento. Estamos desperdiciando recursos calculando todo el pase.

IntroducirINIT_PARAMETERS_INCORRECT_ONTESTER - pasar a OnTester.

 

Cómo resolví este problema (varias variantes):

  • Se crea un parámetro independiente y se sustituyen otros valores en función de su valor (descrito en un par de posts más arriba). La optimización va sólo para este parámetro
  • También hay una manera de salir de esta situación, pero no es fácil de implementar:
    1. creó un archivo csv, en el que estaba la enumeración de sólo los parámetros necesarios
    2. leo el archivo en el OnInit, leo valores del archivo y los envío a los parámetros (leo archivos con la bandera Shared access)
    3. optimizado sólo 1 parámetro (número de línea en el archivo csv)
  • escribió un algoritmo para generar un archivo mqh a partir de un archivo csv (similar a los puntos anteriores, pero más rápido) y lo conectó al Asesor Experto.

 
Mikhail Mitin:

Cómo resolví este problema (varias variantes):

  • Se crea un parámetro independiente y se sustituyen otros valores en función de su valor (descrito en un par de posts más arriba). La optimización va sólo para este parámetro
  • También hay una manera de salir de esta situación, pero no es fácil de implementar:
    1. creó un archivo csv, en el que estaba la enumeración de sólo los parámetros necesarios
    2. leo el archivo en el OnInit, leo los valores del archivo y los asigno a los parámetros (lectura de archivos con la bandera Shared)
    3. optimizado sólo 1 parámetro (número de línea en el archivo csv)
  • escribió un algoritmo para generar un archivo mqh a partir de un archivo csv (similar a los puntos anteriores, pero más rápido) y lo conectó al Asesor Experto.

¿Y cómo permite esto implementar un algoritmo genético, si sólo tiene una variable?

 

¡Me he dado cuenta! ))))

Desde las líneas OnInit

   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_profit)                  return(INIT_PARAMETERS_INCORRECT);
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_stop)                    return(INIT_PARAMETERS_INCORRECT);
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && shift_correction_HMA7C != 5)  return(INIT_PARAMETERS_INCORRECT);

se trasladó a.

void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_profit)                                 ExpertRemove();
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_stop)                                   ExpertRemove();
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && shift_correction_HMA7C != 5)                 ExpertRemove();

La genética no interfiere, yPARAMETERS_INCORRECT no se calcula. )))

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

¡Me he dado cuenta! ))))

Desde las líneas OnInit

se trasladó a.

La genética no interfiere, yPARAMETERS_INCORRECT no se calcula. )))

Una solución interesante. ¿Y cómo, la genética va con éxito, no se empantana en un solo descendiente?

 
Aleksey Vyazmikin:

Es una solución interesante. Y cómo, ¿la genética va bien, no se empantana en una sola descendencia?

No pasa nada. No está fallando. ))) Al menos, todavía no. En algún lugar tenía un búho con un montón de parámetros no válidos. Tendré que hacer una optimización y ver.

La idea de portar es que la genética tropiece exactamente en la inicialización. Pero si la comprobación se mueve a OnTick , entonces la inicialización va bien, la prueba comienza, termina inmediatamente y la genética obtiene el resultado de pasar a cero.

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

No pasa nada. No va a bajar. ))) Al menos, todavía no. En algún lugar tenía un búho con muchos parámetros inválidos. Tendré que hacer una optimización y ver.

La idea de portar es que la genética tropiece exactamente en la inicialización. Pero si la comprobación se traslada a OnTick , entonces la inicialización va bien, la prueba comienza y termina enseguida y la genética obtiene un resultado nulo.

Es bueno que no falle. La esencia del código es clara, pero yo añadiría la ejecución sólo una vez, especialmente si hay muchas condiciones para la salida anticipada.

 
Aleksey Vyazmikin:

Es bueno que no se estanque. La esencia del código es clara, pero yo sólo añadiría la ejecución una vez, especialmente si hay muchas condiciones para la salida anticipada.

La optimización de la lechuza de la que hablaba va bien. )))

Buena idea. Tenemos que añadir una bandera de verificación.

Razón de la queja: