Librerías: Biblioteca de alta productividad iTimeSeries

 

Biblioteca de alta productividad iTimeSeries:

Esta biblioteca proporciona un acceso relámpago a las series temporales para implementar los métodos habituales MQL4 (por ejemplo, iBarShift) en las aplicaciones MQL5 sensibles a los retrasos.

AV Benchmark

Autor: nicholishen

 

Buen trabajo.

Sin embargo tu comparación del rendimiento de iBarshift es un poco engañosa, el propósito de un bucle de 100.000 iteraciones es obtener un valor de tiempo promediado y utilizable (en ms). Tu iBarShift() necesita inicializar un objeto y esta inicialización no se cuenta en tu bucle sino fuera. De todas formas, seguro que mantener todos los valores en memoria es más rápido que calcularlos cada vez.

 

BTW, iBarShiftFast mencionado en los benchmarks de referencia puede ser mejorado para ser tan simple como:

(Bars(symbol, timeframe, time, D'2100.01.01') - 1)

La mejora consiste en eliminar SeriesInfoInteger por completo y utilizar una fecha constante en un futuro lejano.

 
Alain Verleyen:

Buen trabajo.

Sin embargo tu comparación del rendimiento de iBarshift es un poco engañosa, el propósito de un bucle de 100.000 iteraciones es obtener un valor de tiempo promediado y utilizable (en ms). Tu iBarShift() necesita inicializar un objeto y esta inicialización no se cuenta en tu bucle sino fuera. De todas formas, seguro que mantener todos los valores en memoria es más rápido que calcularlos cada vez.


¡Gracias! :)


Ese es un gran punto y sí el "modo de rendimiento" de demostración no inicializar fuera del bucle, sin embargo, la llamada directa a iBarShift en el segundo punto de referencia es instanciar un objeto que es la razón por la que está tomando más tiempo para completar los 100.000 ciclos ... porque tiene que instanciar e inicializar un objeto global estática antes de llamar de nuevo a ella para los datos - por lo que la segunda prueba es una comparación justa. El "modo de rendimiento" también es una comparación justa si lo consideras sólo como acceso a datos dentro de una operación hot-path.

BTW, acabo de hacer algunas pruebas y quiero especificar de nuevo para cualquiera que lea esto: Este método sólo es más rápido si planea separar el refresco de datos y la llamada a datos en rutas separadas O si llama a cualquier combinación de llamadas a funciones de series temporales más de un total agregado de 300 veces por barra. En otras palabras, la marca de ~300 iteraciones es el punto de equilibrio. Si usted no llama más de 300 veces por barra y no está utilizando una "ruta caliente", entonces probablemente sea mejor utilizar otros métodos.

 
iBarShift benchmark based on 100000 runs.
=======================================================
iBarShift(Alain Verleyen) for 2017.04.11 19:56:37 is 45723 in 338.868 milliseconds.
-------------------------------------------------------------
iBarShift3 for 2017.04.11 19:56:37 is 45723 in 0.492 milliseconds.
-------------------------------------------------------------
iBarShift(direct function call) for 2017.04.11 19:56:37 is 45723 in 38.712 milliseconds.
-------------------------------------------------------------
iBar.Shift(performance mode) for 2017.04.11 19:56:37 is 45723 in 3.403 milliseconds.
-------------------------------------------------------------
Archivos adjuntos:
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: Высокопроизводительная библиотека iTimeSeries

fxsaber, 2017.05.25 13:23

iBarShift benchmark based on 100000 runs.
=======================================================
iBarShift(Alain Verleyen) for 2017.04.11 19:56:37 is 45723 in 338.868 milliseconds.
-------------------------------------------------------------
iBarShift3 for 2017.04.11 19:56:37 is 45723 in 0.492 milliseconds.
-------------------------------------------------------------
iBarShift(direct function call) for 2017.04.11 19:56:37 is 45723 in 38.712 milliseconds.
-------------------------------------------------------------
iBar.Shift(performance mode) for 2017.04.11 19:56:37 is 45723 in 3.403 milliseconds.
-------------------------------------------------------------
 
fxsaber:
¿En serio? Es sólo un truco.
 
Alain Verleyen:
¿En serio? Es sólo un truco.

Esta prueba de rendimiento fue escrita por el propio autor de la biblioteca.

El ejemplo con un poco de humor muestra que la prueba debe ser un poco diferente. + otra implementación de la función de prueba.

 
fxsaber :

Esta prueba de rendimiento escrito por el autor de la biblioteca.

Ejemplo con un poco de humor muestra que la prueba debe ser algo diferente. + Otras funciones de verificación de implementación.


Usted tiene razón. La prueba fue diseñada para reflejar el punto de referencia Alain. Aquí hay un ejemplo con un cambio de tiempo para simular con mayor precisión el uso en el mundo real para este algoritmo.

https://i.imgtc.com/rhYzQFj.png

Archivos adjuntos:
 
nicholishen:


Tienes razón. La prueba fue diseñada para reflejar el punto de referencia Alain. Aquí hay un ejemplo con un cambio de tiempo para simular con mayor precisión el uso en el mundo real para este algoritmo.

Se necesita un alto rendimiento para un probador / optimizador (solamente).

Por favor, muestre el resultado comparativo de su biblioteca en el probador/optimizador.

 
fxsaber:

Se necesita un alto rendimiento para el probador/optimizador (únicamente).

Por favor, muestre el resultado comparativo de su biblioteca en tester/optimiser.


...también se necesita para construcciones complejas - a partir de muchos objetos