Probando el nuevo compilador MQL5 para plataformas x64 - ¡Cálculos de 2 a 10 veces más rápidos! - página 14

 

Hoy he querido probar la aceleración de los cálculos en mi Expert Advisor en previsión de la súper velocidad (incluso he utilizado una CPU más rápida) y... Por alguna razón, el Asesor Experto optimizado funcionaba en el probador tres veces más lento. ¿No te ha pasado nunca? En cuanto localice y reproduzca el problema, publicaré el código. Allí no hay llamadas al sistema, sólo operaciones con un montón de arrays y operaciones aritméticas básicas.

Además, aquí hay un par de peticiones:

1. Podemos añadir la posibilidad de lanzar el script desde el editor sin depurar, es decir, como si se hiciera desde el Navegador. Este tipo de lanzamiento está presente en cualquier entorno de desarrollo. Estaba pensando en sugerir Ctrl + F5, como en sys, pero la combinación ya está tomada por ti :)

2. Añade la invocación de la consola stdout de wind desde el script, para evitar cambiar al terminal cada vez para ver el resultado del script. Aunque, según tengo entendido, puedes intentar llamarlo usando WinAPI.

3. Añade al menos algunos ajustes de optimización genética. Por ejemplo, el número de combinaciones puede ser 1e35 y 10k pases no siempre es suficiente (el optimizador ni siquiera genera nuevos pases después de 10k), se entiende que 20-30k sería suficiente, pero no se puede afinar. Por otro lado, cuando se fijan algunos parámetros y se dejan otros para afinar más y estudiar la distribución... Así, cuando el número de combinaciones es pequeño, por ejemplo, 50k, el optimizador para GA ofrece sólo 2k ejecuciones - y esto tampoco es suficiente para esta tarea en particular - para estudiar mejor el comportamiento de la función en estos parámetros. Es decir, es una estupidez pasar por los 50k, mientras que GA genera sólo 2k carreras y no da una imagen suficiente. Espero que entienda de qué estoy hablando.

 
Renat Fatkhullin:

Las mejoras están por llegar.

¿Alguien ha probado ya la depuración del historial en el probador de estrategias?

Creo que a muchos les encantaría probarlo, pero la dificultad y la realidad es que se suele probar donde se escribe el código y se pretende operar. Hay muy pocos corredores que ofrecen MT5, lo que ralentizará la prueba de todas las nuevas características por parte de los operadores e inevitablemente ralentizará el desarrollo de MT5. Así que tal vez tenga sentido buscar alguna solución no trivial que resuelva este problema y aumente la motivación para usar MT5.
 
Renat Fatkhullin:

Las mejoras están por llegar.

¿Alguien ha probado ya la depuración del historial en el probador de estrategias?

Algo estoy haciendo mal. Mi visualizador se abre de forma sencilla y funciona como siempre. El punto de interrupción está justo en la primera declaración en OnInit() - pero no funciona.
 
Renat Fatkhullin:

Las mejoras están por llegar.

¿Alguien ha probado ya la depuración del historial en el probador de estrategias?

También estaría bien poder seleccionar "encontrar usos" en el menú contextual.

Sé que es un poco off-topic, pero no necesito escribir ningún cambio, pero es bueno que los desarrolladores tengan estas cosas.

He comprobado la Media Móvil, la Muestra MACD en el nuevo compilador, pero no he encontrado ninguna diferencia. Lo probaré en mis EAs.

 

Todavía no he depurado del todo y encontrado el fallo (de formas muy diferentes), pero hasta ahora he encontrado los siguientes problemas con Optimize=1. Permítanme decirles de inmediato que mi Asesor Experto tiene alrededor de 100 parámetros de entrada, y trabaja mucho con las matrices. Además, no negocia, sólo realiza cálculos.

Describiré el orden de mis acciones:

1. Pongo en marcha el terminal, selecciono "Optimización = Desactivado" en el probador y doy un conjunto maestro de parámetros de entrada. El comprobador da el resultado correcto.

2. Elijo "Optimización = Rápida (algoritmo genético)", lo lanzo - el probador ni siquiera genera el primer paso. Los agentes (procesadores) no responden. Al principio pensé que podía haber algún error de cálculo con malos conjuntos de parámetros y que el probador simplemente muere.

3. De nuevo selecciono "Optimización = Desactivada" y vuelvo a dar el conjunto de referencia. Ahora el probador no muestra ningún resultado.

4. Abro el código EA en el editor, presiono F5 para generar un código no optimizado. En el probador, vuelvo a ejecutarlo en el conjunto de referencia - voilá, hay un resultado. Bueno, algo está fallando dentro del Asesor Experto debido a la optimización.

He añadido una función que registra los parámetros de entrada del Asesor Experto en un archivo. Así, en el paso 2 (la optimización se está ejecutando y los pasos del probador casi no se generan), aparecían valores aleatorios para algunos parámetros que no se proporcionan en absoluto porque el parámetro es inmodificable o el valor está fuera del rango establecido. Por ejemplo, tenía un parámetro establecido en 80 y era invariable. En el registro se puso 0,01355835795402527 (?). El otro se fijó en 0 y se registró como 4,940656458412465e-324; ambos parámetros eran dobles. Pero luego descubrí que también había valores totalmente inapropiados para int.

En segundo lugar, he recortado el código "innecesario" del Asesor Experto para dejar sólo ese código que también provoca un error. Aun así, resultó ser bastante. Además, la función de registro estaba emitiendo el valor de TODOS los parámetros. Sin embargo, cuando eliminé la mayoría de los parámetros (y se convirtieron en menos de 64 u 80), el probador no murió. Dicho esto, también encontré una extraña conexión entre el error y mi función de registro. Cuando se comenta (es decir, todos los parámetros NO se utilizan en el código), el probador muere. Cuando se registra, el probador muere. Muy extraño.

Y tercero. Me he dado cuenta de que la puesta en paralelo de los cálculos no se traduce en un aumento lineal de la velocidad global de las ejecuciones. Por ejemplo, adjunto los archivos: un script y un Expert Advisor con el mismo código. Este es un trozo de código real, recortado de mi Asesor Experto, pero las matrices son renombradas. Cuando Optimize=1, mi script se ejecuta en 156 ms, es decir, quizás 6 ejecuciones por segundo. (Sin Optimizar tarda 3 veces más). Tengo 8 hilos, es decir, teóricamente son posibles 48 ejecuciones por segundo. Al ejecutar el Asesor Experto en el probador (hacer Slow Optimize, activar el parámetro ficticio, por ejemplo, para 2000 ejecuciones) sólo obtuve un poco más de 4 ejecuciones por segundo, es decir, ¡incluso más lento que en un solo núcleo! Aunque honestamente había 8 procesos colgados en el administrador de tareas. ¿Por qué? ¿Múltiples procesos bloquean el acceso a la memoria? ¿Inicialización larga de matrices? (Hay que reconocer que las matrices no son grandes allí).

Cuando ejecutamos una sola prueba en el probador, Impresión: 156 ms. Es decir, todo parece ser normal con el Asesor Experto.

Por cierto, ¿habrá alguna vez punteros en MQL? :) Porque tuve que hacer matrices-copias.

Archivos adjuntos:
 
xfo:

Por alguna razón, el experto con optimización funcionaba 3 veces más lento en el probador.

Ahora entiendo por qué va más lento: sólo un agente (aleatorio) funciona, los demás fallan y así constantemente un intento cada pocos segundos. No hay nada claro en el registro del probador. Según tengo entendido, si el agente más reciente falla también, entonces sucede lo que escribí antes: los pasos del probador no se generan en absoluto.

La compilación 1117 no solucionó todos los problemas descritos anteriormente (incluido el struct array).

 

Actualizado a 1117 hoy, pero la depuración de los datos históricos - todavía no va.

Tomo ExpertMACD.mt5, pongo un punto de interrupción justo en la entrada de la función Init, inicio la depuración en los datos históricos (presiono el botón), la ventana del editor se cierra, la configuración del probador de estrategias se abre. Establezco el periodo de tiempo (para 2015, días, todos los ticks), la visualización - la casilla de verificación está activada, presiono el botón de Inicio y la visualización comienza. El punto de interrupción no funcionó.

¿Qué estoy haciendo mal?

 
George Merts:

Actualizado a 1117 hoy, pero la depuración de los datos históricos - todavía no va.

Tomo ExpertMACD.mt5, pongo un punto de interrupción justo en la entrada de la función Init, inicio la depuración en los datos históricos (presiono el botón), la ventana del editor se cierra, la configuración del probador de estrategias se abre. Establezco el período de tiempo (para 2015, diarios, todos los ticks), la visualización - la casilla de verificación está activada, presiono el botón de Inicio y la visualización comienza. El punto de interrupción no funcionó.

¿Qué estoy haciendo mal?

Necesito abrir una cuenta demo enMetaQuotes-Demo, entonces

Mi MACD Sample.mq5 en una cuenta de demostración moex el símbolo USDRUB_TOM no funciona (comienza a trabajar primero, luego se detiene después de unos pasos) y un simple backtest no funciona tampoco.

Pero Moving Average.mq5 en una cuenta demo moex USDRUB_TOM funciona bien (y también lo hace el backtest simple).

En la cuenta demo de demoforex el símbolo EURUSD funciona bien (y también el backtest simple) MACD Sample.mq5 y Moving Average.mq5

Grabado un video de depuración en el símbolo MACD Sample.mq5 EURUSD en la cuenta demoforex. (también funciona a diario)

Archivos adjuntos:
capture-mt5-1.zip  5457 kb
 
xfo:

No lo he depurado del todo y no he encontrado cómo se produce el fallo (de formas muy diferentes), pero hasta ahora he encontrado los siguientes problemas cuando Optimize=1. Permítanme decirles de inmediato que mi Asesor Experto tiene alrededor de 100 parámetros de entrada, y trabaja mucho con las matrices. Además, no negocia sino que sólo realiza cálculos.

........................

.......................

Por cierto, ¿habrá alguna vez punteros en MQL? :) Porque he tenido que hacer matrices-copias.

Hola, me gustaría ser más específico.

1. Su Asesor Experto ha hecho cálculos, pero no ha operado. ¿Qué y cómo muestra el Asesor Experto? ¿Qué espera del Asesor Experto cuando lo ejecuta en el probador de estrategias? ¿Qué datos espera obtener durante las pruebas con la optimización? No hemos encontrado ningún error durante las pruebas del Asesor Experto adjunto. ¿Los errores que describe están relacionados con ella?

2. paso a paso lo que haces y lo que esperas, por favor adjunta el código que utilizas.

3. ¿puede adjuntar los registros de pruebas con y sin optimización?

4. ¿Su versión de terminal, OS?

 

Eduard Vavrin, el archivo adjunto no está relacionado con los errores descritos. Voy a intentar preparar el código que da lugar al error y enviártelo. Sólo lleva tiempo y hasta ahora este código contiene demasiado de la fuente del Asesor Experto.

En cuanto al archivo que adjunté: decía que una sola ejecución del EA adjunto tarda 156 ms, es decir, 1/6 de segundo. Podemos suponer que en 8 hilos obtendríamos 48 ejecuciones por segundo. En realidad, el corredor múltiple (existe el parámetro ficticio, modo de optimización lenta) produce sólo 4-5 ejecuciones por segundo en 8 hilos. La pregunta era: ¿por qué está bajando la velocidad? En la pestaña de Agentes puedo ver que todos los hilos se están ejecutando y cada hilo gasta más de 1 segundo para una ejecución. Lo que el Asesor Experto devuelve rand() es sólo un tick para ver que ha funcionado.

Razón de la queja: