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

 
SeriousRacoon:
Y prueba a desactivar la lógica actual y sustituirla por un asistente ordinario. Verás inmediatamente dónde se ha equivocado el gato, en la lógica o en la ejecución.

buen consejo.... No debemos llegar al punto de pensar que la optimización no es otra cosa que instancias separadas de ejecuciones únicas, al menos, eso es lo que les gustaría a los usuarios y lo que querían los desarrolladores.

Esto significa que, independientemente de la complejidad del algoritmo del Asesor Experto, el resultado de una sola ejecución debería ser idéntico al obtenido en un grupo de ejecuciones durante la optimización.

Yo imprimiría (como aconseja Renat) al terminar cada ejecución durante la optimización el historial de tratos en un archivo que contenga los parámetros (para facilitar la búsqueda entre un montón de archivos creados) y haría lo mismo para una sola ejecución, de esta manera será posible encontrar la diferencia de resultados después de la optimización y una sola ejecución. parece ser la única manera de llegar a la verdad.

sin embargo, tengo mucha curiosidad por saber qué, qué matiz, puede causar resultados diferentes en la optimización y en la ejecución única, porque la lógica sugiere que esto es imposible en principio, siempre que una ejecución única sea idéntica a la de la ejecución del lote de optimización.

 
Алексей Тарабанов:

"casi todos los datos se inicializan en un bucle".

Chicos, no se puede inicializar en un bucle. Hay que leer en el bucle.

Te mostré en qué casos no sólo es posible, sino necesario y no hay otro camino.

 

@Andrey Dik, me pregunto exactamente cómo atornillar la impresión a los archivos. Estoy pensando que el archivo debe escribirse sobre la marcha. ¿Y qué es exactamente lo que hay que escribir ahí? Precios: no son informativos. Debe escribir alguna información que le ayude a entender el motivo de la discrepancia. ¿Qué tipo de información? ¿Dónde podemos encontrarlo? Todavía no tengo ni idea.

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

@Andrey Dik, me pregunto exactamente cómo atornillar la impresión a los archivos. Parece que el archivo debe escribirse sobre la marcha. ¿Y qué es exactamente lo que hay que escribir ahí? Los precios no son informativos. Debe escribir alguna información que le ayude a entender el motivo de la discrepancia. ¿Qué tipo de información? ¿Dónde podemos encontrarlo? Todavía no tengo ideas.

En la función OnTester(), cree un archivo llamado InputName1 + "_" + InputName2 + "_" + InputName3 + "_" + InputName4 + "_" +.... y registrar el historial de todas las operaciones (no las posiciones) en él, se registrará toda la información necesaria para el análisis, el tiempo, el precio, etc. También se puede escribir en este archivo algo muy interesante para un EA en particular, que puede ser útil para buscar inconsistencias entre el optimizador y una sola ejecución.

No olvide comprobar MQLInfoInteger (MQL_OPTIMIZATION)); para añadir postfix en el nombre del archivo en una sola ejecución, para no sobrescribir el mismo archivo después de la optimización.


SZY. Si obtiene dos archivos con contenidos diferentes, no será suficiente para los desarrolladores, pero sólo le dará una dirección donde cavar más, tendrá que traer un código de problema reproducible. con suerte, el problema está en el código de EA.

 
Andrey Dik:

En la función OnTester() cree un archivo llamado InputName1 + "_" + InputName2 + "_" + InputName3 + "_" + InputName4 + "_" +.... y registrar el historial de todas las operaciones (no las posiciones) en él, se registrará toda la información necesaria para el análisis, el tiempo, el precio, etc. También se puede escribir en este archivo algo muy interesante para un EA en particular, que puede ser útil para buscar inconsistencias entre el optimizador y una sola ejecución.

No olvide comprobar MQLInfoInteger (MQL_OPTIMIZATION)); para añadir postfix en el nombre del archivo en una sola ejecución, para no sobrescribir el mismo archivo después de la optimización.


SZY. Si obtienes dos archivos con contenidos diferentes, no será suficiente para los desarrolladores, sino que sólo te dará la dirección de dónde cavar a continuación, tendrás que citar un problema de código reproducible. Espero que el problema esté en el código de EA.

Gracias. Lo haré.

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

Gracias. Lo haré.


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

Gracias. Lo haré.

Comprobar la inicialización de las variables declaradas globalmente.

Si la inicialización no está en OnInit() sino en la declaración y si sus valores se cambian en el código.

 
Andrey F. Zelinsky:

Comprobar la inicialización de las variables declaradas globalmente.

Si la inicialización no está en OnInit(), sino en la declaración y si sus valores se cambian en el código.

si las variables se inicializan o no, pero los resultados deben coincidir en ambos modos de comprobación (optimización y ejecución única)

 
Andrey Dik:

buen consejo.... No debemos llegar al punto de pensar que la optimización no es más que instancias separadas de las ejecuciones individuales, al menos eso es lo que los usuarios desearían y lo que los desarrolladores querían.

Esto significa que, independientemente de la complejidad del algoritmo del Asesor Experto, el resultado de una sola ejecución debería ser idéntico al obtenido en un grupo de ejecuciones durante la optimización.

Yo imprimiría (como aconseja Renat) tras la finalización de cada ejecución durante la optimización el historial de tratos en un archivo que contenga los parámetros (para facilitar la búsqueda entre el montón de archivos creados) y haría lo mismo durante una sola ejecución, así sería posible averiguar la diferencia de resultados tras la optimización y una sola ejecución.

Sin embargo, tengo mucha curiosidad por saber qué, qué matiz, puede causar resultados diferentes en la optimización y en la ejecución única, porque la lógica sugiere que esto es imposible en principio, siempre que una ejecución única sea idéntica a la de la ejecución del lote de optimización.

En general, estoy de acuerdo con usted. Si realmente owl no hace ramas dependiendo del entorno (si se ejecuta en optimizador o en tester), entonces lo único que podemos suponer es que en el modo de optimización algunas llamadas api en tester están demasiado optimizadas para la velocidad, perdón por la tautología. Tal vez dependa de las banderas de las funciones utilizadas. Un registro detallado de las transacciones y los resultados de la ejecución ayudaría, sí.

No me he encontrado con esto personalmente.

 
Andrey Dik:

si las variables se inicializan o no, pero los resultados deben coincidir en ambos modos de comprobación (optimización y ejecución única)

declarar una variable globalmente e inicializarla al declarar, por ejemplo, int kk=0;

entonces en OnTick() desprintar y cambiar el valor, por ejemplo Print("kk=",kk); ++kk;

luego cambiar la TF o los parámetros... y ver el resultado.