¿Qué diablos está pasando? - página 6

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

Si realiza varias optimizaciones, con los mismos parámetros del EA, ¿coinciden los resultados de las diferentes optimizaciones? si lo hacen, entonces el problema está en la diferencia entre el optimizador y la pasada única. si no lo hacen - entonces el problema está definitivamente en el código del EA.

 

Permítanme explicar - la escritura de moda aquí en el :

if (condition) {

} else if (!condition) {

}

supuestamente aumenta la legibilidad y la comprensión del código, es en realidad un mal

y además hay que trabajar con mucho, mucho cuidado con el doble

 
Andrey Dik:

¿Cree que una variable global de EA conserva su valor de las pasadas ejecuciones del optimizador y se traslada a las siguientes?

Sí, así es. Estaba tratando de hacerlo.

Sólo que no era sólo una variable global, sino un miembro estático de la clase o una variable terminal o algo más.


Además, una sola prueba inmediatamente después de lanzar el terminal y una repetida en el mismo agente pueden ser diferentes. Por la misma razón.

En definitiva, hay que inicializar todo y vigilarlo escrupulosamente.


ps: no, eso me recuerda. Estaba bien con la inicialización, era uno de los builds que inicializaba la estática con fallos. Lo arreglaron rápidamente.

 
Andrey Dik:

cualquier transferencia del contenido de la variable EA de una ejecución a otra debe considerarse como un error del probador, incluso si se trata de variables globales del terminal.

Si hay varias copias de un EA que se ejecutan en los gráficos en tiempo real, el usuario utiliza un mago u otras formas de identificación, y el proceso de optimización implica múltiples e independientes entre sí ejecuciones de un EA con el mismo mago, si no es así, entonces no sólo es erróneo desde el punto de vista ideológico de la optimización, sino que abre la posibilidad de influir en la optimización y abusar de los productos del mercado engañando al comprador.

A la espera del informe de TC sobre los tratos sin podar, intriga sin embargo.

No está preparado para un santo ladrón.

El punto, como siempre, es simple - el EA no se descarga para optimizar más rápido. Los archivos EX pueden ser grandes.

 

Sólo hoy he tenido tiempo de ponerme a solucionar el problema. Decidí empezar poco a poco. Una cosa a la vez. Incluyendo la comprobación de los archivos abiertos. El código es el siguiente:

      int      h     = FileOpen(filename, FILE_BIN|FILE_READ|FILE_COMMON);
      if(h == INVALID_HANDLE)
      {
         Print("Ошибка открытия файла обученной сети по индикатору >>> ",name);
         writeErrorFile(program_name,program_version,"======= "+IntegerToString(bars_count-1)+" === Ошибка открытия файла обученной сети по индикатору >>> "+name);
         writeOptTestFile(file_Opt_Tst,"======= "+IntegerToString(bars_count-1)+" === Ошибка открытия файла обученной сети по индикатору >>> "+name+"\n");
         FileClose(h);
         return(TRADESIGNAL_NO);
      }

He ejecutado la optimización y luego una sola prueba. Como resultado, tengo dos archivos:

1_100_100_300_300_.opt
1_100_100_300_300_.tst

He abierto estos dos archivos en el programa WinMerge. Y esto es lo que vi allí

Hay un problema con la apertura de archivos en el optimizador. Tenga en cuenta que no hay ningún error de este tipo en el probador.

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

Hay un problema con el optimizador al abrir los archivos. Tenga en cuenta que no hay ningún error de este tipo en el probador.

Varios núcleos abren el archivo al mismo tiempo. Uno se abre, el resto se fastidia.
Necesita código con espera, o al menos la bandera FILE_SHARE_READ

 

Si tú:

  • acceden al mismo archivo desde un EA en la zona común
  • obtener errores de acceso
  • no protegen contra el acceso compartido por múltiples procesos paralelos, no intentan repetir con un tiempo de espera
Entonces, por supuesto, obtendrá la diferencia en el optimizador y el pase único. Esto es un error lógico.
 
Andrey Khatimlianskii:

Varios núcleos abren el archivo al mismo tiempo. Uno abre, los otros se joden.
Necesito un código con espera, o al menos la bandera FILE_SHARE_READ

Bueno, no escribí el código específicamente para el optimizador. Se esperaba que el optimizador ya conociera estos matices. Intentaré añadir una bandera, no lo hará peor. )))

Renat Fatkhullin:

Si tú:

  • están accediendo al mismo archivo en la zona comon desde un Asesor Experto
  • obtener errores de acceso
  • no protegen del acceso compartido por múltiples procesos paralelos, no intentan repetir con un tiempo de espera.
Entonces, por supuesto, obtendrá la diferencia en el optimizador y el pase único. Esto es un error lógico.

  1. Incluyo la zona de commit únicamente por la comodidad de encontrar los archivos.
  2. ....
  3. No tengo ningún acceso compartido. A estos archivos sólo accede un EA.
 

Como todavía no hay código, las condiciones de prueba no están descritas de ninguna manera, y estás haciendo afirmaciones claramente erróneas, entonces ocúpate tú mismo.

Si ni siquiera puede abrir archivos, significa que hay muchos problemas en el Asesor Experto.

Incluso ha ocultado los nombres de estos archivos.

 
Renat Fatkhullin:

Como todavía no hay código, las condiciones de prueba no están descritas de ninguna manera, y estás haciendo afirmaciones claramente erróneas, entonces ocúpate tú mismo.

Si ni siquiera puede abrir archivos, significa que hay muchos problemas en el Asesor Experto.

Incluso ha ocultado los nombres de estos archivos.

No hay código porque al añadir el globo se solucionó realmente el problema. Ahora los resultados de la optimización y las ejecuciones individuales son totalmente coherentes.

Es que antes apenas utilizaba archivos en los EAs (al menos toda escritura/lectura durante la optimización/prueba estaba desactivada), pero pensaba que el optimizador resolvía el tema del acceso desde un solo EA.