Los resultados de la optimización difieren de los de las pruebas individuales - página 6

 

Veo que la cuestión de las pruebas de difusión se ha planteado una y otra vez. Recientemente he llegado a un sistema que parece más o menos serio (en términos de comercio real) y, por lo tanto, requiere una prueba exhaustiva. Y también se han preocupado por este tema. Como resultado escribí un simple script que establece la extensión requerida para las pruebas fuera de línea.

El principio es bien conocido, en el archivo symbols.sel se sobrescribe Ask. Así que, en el terminal offline, cópialo de la carpeta history a la carpeta experts/files, lanza el script, luego cierra el terminal, vuelve a copiar symbols.sel y lanza el terminal de nuevo.

P.S. Reemplazado el script, un pequeño descuido fue, si alguien de repente tenía tiempo para tomar SetSpread y no SetSpread_1, necesidad de descargar de nuevo.

Archivos adjuntos:
 
El mismo problema. Obtengo los mismos resultados durante la optimización, pero resultados drásticamente diferentes durante las ejecuciones individuales. Gracias a Mathemat por indicarme la dirección correcta.

Matemáticas:
Tenga cuidado con los objetos durante las pruebas. Es mejor no usarlos.

Voy a compartir lo que pasó y cómo se solucionó, tal vez alguien lo encuentre útil. Escribí mi propio indicador, utilizando líneas de tendencia. El indicador pasó el número de línea de tendencia rota a la variable global del terminal. Fue así:

GlobalVariableSet("GV_name", number);

y en el Asesor Experto tomó el valor de

int dc = GlobalVariableGet("GV_name");

Todo estaba bien en el visualizador y en las pruebas individuales. Así que decidí ahorrarme la declaración de una variable "extra" para reducir el tamaño del código. Después de corregir el código de la siguiente manera, todo empezó a funcionar con resultados idénticos tanto en el optimizador como en las pruebas individuales.

string GlobVar = "GV_name";  // объявил переменную в индикаторе на глобальном уровне программы

int start(){
  GlobalVariableSet(GlobVar, number);
}
string GlobVar;  // объявил переменную в советнике на глобальном уровне программы
int dc;

int start(){
  dc = GlobalVariableGet(GlobVar);
}

Por lo tanto, la configuración de las variables globales en el indicador y en el EA hizo que todo funcionara correctamente.

 

Buenas noches, colegas.

He decidido reanimar este tema, ya que me he encontrado con un problema idéntico.

Mi Asesor Experto no utiliza objetos gráficos. He establecido una extensión personalizada que es la misma en todas partes. Sin embargo, las pruebas individuales son muy diferentes de los resultados de la optimización. Además, he realizado pruebas individuales en diferentes ordenadores y todas se parecen pero no coinciden con los resultados de optimización.

¿Quizás alguien haya encontrado una solución?

 
Andrey Kaunov:

Buenas noches, colegas.

He decidido reanimar este tema, ya que me he encontrado con un problema idéntico.

Mi Asesor Experto no utiliza objetos gráficos. He establecido una extensión personalizada que es la misma en todas partes. Sin embargo, las pruebas individuales son muy diferentes de los resultados de la optimización. Además, he realizado pruebas individuales en diferentes ordenadores y todas se parecen pero no coinciden con los resultados de optimización.

¿Quizás alguien haya encontrado una solución?

¿Por qué deberían ser iguales? A no ser que tengas que recorrer todos los parámetros y seleccionar la mejor opción. Pero esto es caro y requiere muchos recursos. Por eso utilizamos algoritmos genéticos. Y se construyen esencialmente así: muestreo aleatorio de conjuntos de parámetros de los que se están optimizando y luego se elige el mejor y se hace una búsqueda más detallada allí. Por ejemplo, 6 parámetros. Presentar la mejor solución es como la mayor densidad en un espacio de 6 dimensiones. Y puede haber muchos puntos de densificación. Un buen algoritmo da gladiadores volumétricos suaves de 6 dimensiones con no muchas densidades y la optimización los encontrará, y si el algoritmo da densidades nítidas, entonces los resultados pueden ser aleatorios. es decir, la optimización encontrará densidades, pero no cada vez el mismo conjunto de parámetros (los mismos modelos).

 

Valery, en lugar de responder, me limitaré a citar...

eugene-last:

Um... Creo que mucha gente se niega a entender el problema. O se aleja deliberadamente.

¿Qué es la optimización y qué es una prueba única? Respuesta: la optimización consiste en varias pruebas individuales.
¿Qué significa? Respuesta: significa que, en teoría, el pase de optimización es el mismo y termina con el mismo resultado que la prueba única.

Pues bien, en la práctica resulta que no es así. Y el Asesor Experto (no es una máxima por cierto, veo que molesta a algunos aquí) no falla porque la prueba única muestra exactamente el mismo resultado. Entonces, ¿por qué esta única prueba de optimización da un resultado diferente?

 
Andrey Kaunov:

Buenas noches, colegas.

He decidido reanimar este tema, ya que me he encontrado con un problema idéntico.

Mi Asesor Experto no utiliza objetos gráficos. He establecido una extensión personalizada que es la misma en todas partes. Sin embargo, las pruebas individuales son muy diferentes de los resultados de la optimización. Además, he realizado pruebas individuales en diferentes ordenadores y todas se parecen pero no coinciden con los resultados de optimización.

¿Quizás alguien haya encontrado una solución?

1. Comprobar que todas las variables están inicializadas, aunque en el pasado en MQL4 - las variables no inicializadas eran iguales a 0, ahora no lo sé.

2, si utiliza matrices dinámicas - es necesario comprobar el resultado ArrayResize() - Tuve este problema, hice EA en 4-5 indicadores, resultó que un indicador comió toda la memoria, y en mi EA, ArrayResize() no siempre dio el tamaño de la matriz solicitada - funcionó una vez o no. Si no me equivoco, el MQL4 tiene unos 3Gb de memoria máxima para programas MQL, el terminal es de 32 bits.

 
Andrey Kaunov:

Valery, en lugar de responder, me limitaré a citar...

No lo sé exactamente, no lo sé. Al fin y al cabo, la optimización no consiste en unas pocas pruebas, sino en muchas. Así que, en aras de la rapidez, los datos de entrada pueden ser diferentes. Para llegar al fondo de esto, necesitamos códigos de problemas simples y reproducibles. Entonces, tal vez los desarrolladores respondan.

 
Igor Makanu:

1. comprobar que todas las variables están inicializadas, aunque antes en MQL4 - las variables no inicializadas eran iguales a 0, ahora no sé, por cierto también se refiere a los indicadores

2, si utiliza matrices dinámicas - es necesario comprobar el resultado de ArrayResize() - Tuve este problema, hice EA para 4-5 indicadores, resultó que un indicador se comió toda la memoria, y en EA, no tengo siempre ArrayResize() marcó el tamaño solicitado de la matriz - funcionó y no funcionó ninguna otra vez. Si no me equivoco, el MQL4 tiene unos 3Gb de memoria máxima para programas MQL, el terminal tiene 32 bits.

Igor, gracias por el consejo. Intentaré investigar en este sentido.

Valeriy Yastremskiy:

No estoy seguro, no lo sé. Por lo tanto, los datos de entrada pueden ser diferentes en aras de la rapidez. Para llegar al fondo de esto, necesitamos códigos de problemas simples y reproducibles. Entonces quizás los desarrolladores respondan.

Bueno, nada debería ser diferente, de lo contrario se pierde todo el sentido de la optimización. Y los desarrolladores no han contestado nada durante 10 años...

 
Andrey Kaunov:

Igor, gracias por el consejo. Intentaré indagar en esa dirección.

Bueno, nada debería ser diferente, de lo contrario se pierde todo el sentido de la optimización. Y los desarrolladores no han contestado nada durante 10 años...

Los desarrolladores no entienden de palabras ni de quejas. Sólo el código comprensible que reproduce el problema).

 
Igor Makanu:

1. comprobar que todas las variables están inicializadas, aunque antes en MQL4 - las variables no inicializadas eran iguales a 0, ahora no sé, por cierto también se refiere a los indicadores

2, si utiliza matrices dinámicas - es necesario comprobar el resultado de ArrayResize() - Tuve este problema, hice EA en 4-5 indicadores, resultó que un indicador se comió toda la memoria, y en EA, no tengo siempre ArrayResize() marcó el tamaño solicitado de la matriz - funcionó una vez o no. Si no me equivoco, en MQL4 la memoria es de unos 3Gb como máximo para los programas MQL, el terminal es de 32 bits.

Hay ceros en el 4 y basura en el 5. La última vez, estos problemas parecían haberse resuelto precisamente por encontrar variables que se inicializaban fuera de OnInit y se cambiaban durante la ejecución de la optimización, es decir, durante

en la siguiente pasada no terminaron con su valor original.