Tomamos el Asesor Experto de la entrega y lo ejecutamos en el probador, obteniendo estos datos de rendimiento
------ OnTesterInit i = 0 Pass = 0 OnTester = 2.231 s.: Count = 3387955, 1518581.4 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1641 i = 1 Pass = 1 OnTester = 2.214 s.: Count = 3387955, 1530241.6 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1641 iMin = 1 Results[iMin] = 2.214 s. iMax = 0 Results[iMax] = 2.231 s. Amount = 2 Mean = 2.223 s. - 79.08% OnTesterDeinit ------ Interval = 5.621 s., Count = 0, 0.0 unit/sec
Ahora vamos a ejecutar el mismo Asesor Experto, pero utilizando Trade.mqh
------ OnTesterInit i = 0 Pass = 0 OnTester = 3.330 s.: Count = 3387955, 1017403.9 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1641 i = 1 Pass = 1 OnTester = 3.475 s.: Count = 3387955, 974951.1 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1641 iMin = 0 Results[iMin] = 3.330 s. iMax = 1 Results[iMax] = 3.475 s. Amount = 2 Mean = 3.402 s. - 89.73% OnTesterDeinit ------ Interval = 7.584 s., Count = 0, 0.0 unit/sec
Resulta que Trade.mqh es 1,5 veces más lento que MQL5 puro.
Supuse que esta era la razón e hice una pequeña edición a Trade.mqh.
//+------------------------------------------------------------------+ //| Funciones de acceso PositionSelect(...) | //+------------------------------------------------------------------+ bool CPositionInfo::Select(const string & symbol) { return(PositionSelect(symbol)); }
Pero los frenos de la variante SB no han desaparecido.
¿Dónde está el perro enterrado que el SB es tan lento?
Foro sobre trading, sistemas automatizados de trading y comprobación de estrategias de trading
fxsaber, 2017.07.24 14:13
Cogemos el EA de la entrega y lo ejecutamos en el tester, obteniendo dichos datos de rendimiento
------ OnTesterInit i = 0 Pass = 0 OnTester = 2.231 s.: Count = 3387955, 1518581.4 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1641 i = 1 Pass = 1 OnTester = 2.214 s.: Count = 3387955, 1530241.6 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1641 iMin = 1 Results[iMin] = 2.214 s. iMax = 0 Results[iMax] = 2.231 s. Amount = 2 Mean = 2.223 s. - 79.08% OnTesterDeinit ------ Interval = 5.621 s., Count = 0, 0.0 unit/sec
Este era el modo de optimización. Y ahora ESTE mismo EA, pero en modo de ejecución única.
Core 1 2017.07.21 23:59:59 Interval = 5.140 s., Count = 3387955, 659135.2 unit/sec Core 1 EURUSD,M1: 3387955 ticks, 52608 bars generated. Test passed in 0:00:05.164.
¡Una sola ejecución en el Agente local es 2,3 veces más lenta que en el mismo Agente pero en modo Optimización!
Tal vez sean los frenos del probador, así que veamos qué mostrará el perfilado OnTick (los problemas de ejecución y otros entornos de negociación no afectarán al resultado) en los modos Optimización y Ejecución única.
Optimización
------ OnTesterInit i = 0 Pass = 0 OnTester = 2.910 s.: OnTick Profiler: Count = 3387955, Interval = 0.969 s., 3496753.0 unit/sec , Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1641 i = 1 Pass = 1 OnTester = 2.862 s.: OnTick Profiler: Count = 3387955, Interval = 0.952 s., 3559797.1 unit/sec , Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1641 iMin = 1 Results[iMin] = 2.862 s. iMax = 0 Results[iMax] = 2.910 s. Amount = 2 Mean = 2.886 s. - 78.06% OnTesterDeinit ------ Interval = 7.394 s., Count = 0, 0.0 unit/sec
Simple
Core 1 2017.07.21 23:59:59 Interval = 6.149 s. (Profiler: Count = 3387955, Interval = 4.018 s., 843148.2 unit/sec) Core 1 EURUSD,M1: 3387955 ticks, 52608 bars generated. Test passed in 0:00:06.162.
La ejecución neta de OnTick es hasta 4,2 veces más lenta en el modo de ejecución única que en el de optimización. ¡Y eso en el mismo Agente local!
¡Una sola ejecución en el Agente local es 2,3 veces más lenta que en el mismo Agente pero durante la Optimización!
La misma situación en MT4. Probablemente, en 4 los frenos se deben a la generación de logs durante la Ejecución Única.
Siempre me he preguntado qué API de trading es más rápida: MQL4 puro o MQL5 puro.
Por lo tanto, vamos a realizar perfiles OnTick del mismo Asesor Experto en MT4/5 para excluir la influencia del rendimiento de los propios probadores.
MT5x64 (Optimización)
i = 1 Pass = 1 OnTester = 2.862 s.: OnTick Profiler: Count = 3387955, Interval = 0.952 s., 3559797.1 unit/sec , Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1641
MT4x86(Ejecución única)
2017.07.24 15:38:10.770 EURUSD,M1: 1044487 tick events (39659 bars, 1045534 bar states) processed in 0:00:01.903 (total time 0:00:01.997) 2017.07.24 15:38:10.770 2017.07.08 22:10:23 TesterBenchmark_Example EURUSD,M1: Interval = 1.878 s. (Profiler: Count = 1044487, Interval = 1.284 s., 813504.6 unit/sec)
Podemos concluir que la misma lógica de negociación escrita en MT4 en su API de negociación pura y escrita en MT5 en su API de negociación pura difieren en velocidad de la siguiente manera.
¡MT5 es 4,4 veces más rápido que MT4! Tenga en cuenta que no estamos comparando las velocidades de los lenguajes, sino las velocidades de las API de negociación para el mismo TS.
Hasta ahora, la moraleja es la siguiente: en lugar de realizar pruebas individuales, ¿deberíamos ejecutar una optimización imaginaria sobre un único valor?
Sí, si quieres que sea rápido. Al mismo tiempo, el informe comercial debería transmitirse desde el Agente.
Pero creo que esto es un bug y debería arreglarse.
La optimización falsa en un valor sólo se implementa a través de un lugar más - se necesitan al menos dos pasadas para ejecutar el Optimizador correctamente. El segundo pase (imaginario) debería ser capturado en OnInit con INIT_PARAMETERS_INCORRECT return (o ExpertRemove()).
¡MT5 es 4,4 veces más rápida que MT4! Tenga en cuenta que no comparamos las velocidades de los idiomas, sino las velocidades de las API de negociación para el mismo TS.
Pero aún así es interesante cuánto y qué probador es más productivo. El TS de la entrega no utiliza el historial de cotizaciones, por lo que es especialmente bueno para tal comparación.
Mediremos ambos probadores en el modo de Optimización para evitar varios matices.
MT5 (Optimización)
Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading.
fxsaber, 2017.07.24 14:13
------ OnTesterInit i = 0 Pass = 0 OnTester = 2.231 s.: Count = 3387955, 1518581.4 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1641 i = 1 Pass = 1 OnTester = 2.214 s.: Count = 3387955, 1530241.6 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1641 iMin = 1 Results[iMin] = 2.214 s. iMax = 0 Results[iMax] = 2.231 s. Amount = 2 Mean = 2.223 s. - 79.08% OnTesterDeinit ------ Interval = 5.621 s., Count = 0, 0.0 unit/sec
MT4 (Single).
2017.07.24 15:58:50.775 EURUSD,M1: 1044487 tick events (39659 bars, 1045534 bar states) processed in 0:00:01.513 (total time 0:00:01.607) 2017.07.24 15:58:50.775 2017.07.08 22:11:32 TesterBenchmark_Example EURUSD,M1: Interval = 1.486 s., Count = 1044487, 702884.9 unit/sec
Como Single se ralentiza también en MT4, hacemos Optimización y miramos el tiempo neto en OnTester
Obtenemos que la velocidad del probador MT4 es de 702884,9 * 1,486 / 0,607 = 1720736,3 ticks/segundo.
Conclusión: MT4-tester es ~12% más rápido que MT5-tester.
Pero todavía me pregunto cuánto y qué probador es más productivo. El TS de la entrega no utiliza la historia de las cotizaciones, por lo que es especialmente bueno para tal comparación.
Es decir, sólo se compara un caballo esférico en el vacío ). ¿Para qué sirve un comprobador sin comillas?
El probador genera cotizaciones, pero el TS en sí no las utiliza, para no atascar el resultado con la diferencia en la implementación de High[] y CopyHigh.
El probador crea el entorno de negociación, incluyendo el historial. Y es el probador lo que estábamos midiendo, no las peticiones de los usuarios (no confundir con la formación) del historial, que se implementan en las plataformas de formas fundamentalmente diferentes.
El mismo problema con la medición del rendimiento de las API de negociación.
Tomamos el Asesor Experto de la entrega y lo ejecutamos en el probador, obteniendo estos datos de rendimiento
Ahora vamos a ejecutar el mismo Asesor Experto, pero utilizando Trade.mqh
Resulta que Trade.mqh es 1,5 veces más lento que MQL5 puro.
Supuse que esta era la razón e hice una pequeña edición a Trade.mqh.
Pero los frenos de la variante SB no han desaparecido.
¿Dónde está el perro enterrado que el SB es tan lento?
Los desarrolladores han retocado algo en 1648 y corregido algunos errores, así que me las arreglé para estimar el rendimiento de una biblioteca de comercio más.
La situación actual es la siguiente.
MQL5 puro
------ OnTesterInit i = 0 Pass = 0 OnTester = 13.451 s.: Count = 19469844, 1447464.4 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 i = 1 Pass = 1 OnTester = 10.904 s.: Count = 19469844, 1785569.0 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 i = 2 Pass = 2 OnTester = 10.895 s.: Count = 19469844, 1787044.0 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 i = 3 Pass = 3 OnTester = 10.898 s.: Count = 19469844, 1786552.0 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 i = 4 Pass = 4 OnTester = 10.889 s.: Count = 19469844, 1788028.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 iMin = 4 Results[iMin] = 10.889 s. iMax = 0 Results[iMax] = 13.451 s. Amount = 5 Mean = 11.407 s. - 89.58% OnTesterDeinit ------ Interval = 63.675 s., Count = 0, 0.0 unit/sec
#include <Trade\Trade.mqh>
------ OnTesterInit i = 0 Pass = 0 OnTester = 14.390 s.: Count = 19469844, 1353012.1 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 i = 1 Pass = 1 OnTester = 13.044 s.: Count = 19469844, 1492628.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 i = 2 Pass = 2 OnTester = 13.016 s.: Count = 19469844, 1495839.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 i = 3 Pass = 3 OnTester = 13.014 s.: Count = 19469844, 1496069.2 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 i = 4 Pass = 4 OnTester = 13.039 s.: Count = 19469844, 1493200.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 iMin = 3 Results[iMin] = 13.014 s. iMax = 0 Results[iMax] = 14.390 s. Amount = 5 Mean = 13.301 s. - 94.05% OnTesterDeinit ------ Interval = 70.713 s., Count = 0, 0.0 unit/sec
#include <MT4Orders.mqh>
------ OnTesterInit i = 0 Pass = 0 OnTester = 14.385 s.: Count = 19469844, 1353482.4 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 i = 1 Pass = 1 OnTester = 11.434 s.: Count = 19469844, 1702802.5 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 i = 2 Pass = 2 OnTester = 11.459 s.: Count = 19469844, 1699087.5 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 i = 3 Pass = 3 OnTester = 11.440 s.: Count = 19469844, 1701909.4 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 i = 4 Pass = 4 OnTester = 11.426 s.: Count = 19469844, 1703994.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1648 iMin = 4 Results[iMin] = 11.426 s. iMax = 0 Results[iMax] = 14.385 s. Amount = 5 Mean = 12.029 s. - 91.20% OnTesterDeinit ------ Interval = 65.946 s., Count = 0, 0.0 unit/sec
Las plazas se distribuyeron de la siguiente manera
- Pure MQL5 - 100% de rendimiento.
- MT4Orders.mqh - ~95% de rendimiento.
- SB Trade\Trade.mqh - ~84% de rendimiento.
ZЫ Me pregunto cuánto otras bibliotecas de comercio ...
ZЫ2 ¿Qué son esos frenos en 1648 en la primera pasada de cada paquete? En 1643 era así
Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading.
Características del lenguaje mql5, sutilezas y técnicas de trabajo.
fxsaber, 2017.08.15 17:16
En la primera pasada de un lote de trabajos de Agente (por ejemplo, en una sola ejecución de tester), el tiempo entre el inicio del Asesor Experto y el primer evento NewTick puede tardar varios segundos. En las siguientes pasadas del lote este tiempo es cero.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso

TesterBenchmark:
Autor: fxsaber