PLO - página 2

 
Interesting:

De hecho, con un enfoque normal, la OOP implementada en MQL5 (junto con los recursos del propio terminal) dará un aumento significativo de la velocidad.

¿A qué velocidad de funcionamiento se refiere, a la del programa o a la de su escritura?

 
Integer:

La POO no aumenta el rendimiento. Tiene algún beneficio - por ejemplo, si hay alguna función llamada con algunos parámetros (digamos, el cálculo de la EMA), una variable estática se utiliza en la función para almacenar el valor anterior de la EMA. Dado que la función almacena el último valor en base al cual se realizarán los cálculos, no puede ser llamada con otros parámetros (símbolo, marco temporal, periodo de suavizado) la siguiente vez que se llame a la función, por lo tanto, si se necesita llamar a la función con diferentes parámetros, debe copiarse con un nombre diferente o utilizar una variable global pasada por referencia en lugar de una estática. Este es el único caso en el que es más conveniente utilizar un objeto: se carga una instancia de objeto, se establecen sus parámetros y luego se llama al método sin parámetros. Si el objeto incluye métodos cuya ejecución no depende de ejecuciones anteriores ni, en general, de ningún parámetro con el que se cargue el objeto, no da nada más que consumo de recursos.

Lo hace, lo hace, realmente lo hace. Pero todo depende de la experiencia, la imaginación y la torpeza de las manos del programador (en ese orden)... :)

Y de hecho, incluso asumiendo que la POO (con el enfoque más horrible de la misma) no aumenta el tiempo de ejecución, o lo hace de forma insignificante (aunque personalmente dudo que ese aumento en 10 veces pueda considerarse insignificante) seguirá siendo más útil para entender a los desarrolladores que todas las posibles desventajas de la POO.

La cuestión es que MQL5, si contiene OOP, contribuirá de alguna manera al desarrollo del enfoque modular (unitario) de la programación, que no se ve en MQL4 (excepto en las bibliotecas). Esto se debe a que es conveniente colocar estructuras, clases o grupos de ellas en archivos separados (módulos) y utilizarlos cuando sea necesario.

Además, debido a la abstracción, la encapsulación, la herencia y el polimorfismo, el uso de clases permitirá depurar los bloques listos (módulos) y no pensar en su contenido para utilizarlos en su propio trabajo.

Además, el uso de la programación orientada a objetos debería aumentar el nivel y la conveniencia de utilizar DLL externas y otros ajustes de software en los sistemas de comercio.

Combinado con el uso de librerías, esto hará la vida de los desarrolladores una docena de veces más fácil y también acelerará enormemente el desarrollo de EAs bastante complejos.

 
Integer:

¿A qué velocidad de funcionamiento se refiere, a la velocidad de ejecución del programa o a la velocidad de escritura?

Ambos. Los detalles sobre la velocidad de desarrollo están escritos más arriba (por supuesto, todo tiene sentido si tienes algo de experiencia en el desarrollo y uso de clases)...
 
Interesting:

Lo hace, lo hace, lo hace....

¿Quién te ha dicho eso? No es cierto. Todo lo demás es correcto.

 
Integer:

¿Quién te ha dicho eso? No es cierto. Todo lo demás es correcto.

Repetiré: aumenta, aumenta, cuánto aumenta. Pero todo depende de la experiencia, la imaginación y la torpeza de las manos del programador (en este mismo orden)...

En una ocasión estuve comparando la velocidad de inicialización de mi EA, salvo algunos detalles menores, el código del programa era el mismo (en MQL5 se utilizaba la librería de migración). Y resultó que la inicialización de MQL5 era 2,5 veces más rápida de media.

Por supuesto, sé que no es un indicador, pero sigo confiando en que la velocidad de MQL5 es 10 veces más rápida incluso ahora, utilizando el enfoque correcto.

Puedes discutir eternamente, pero intenta implementar OnTrade() oOnChartEvent y todo se aclarará. Pero además de estas cosas hay muchas otras "bondades"...

PS

Por supuesto, hay problemas de velocidad con el probador de estrategias y los indicadores. Pero con el tiempo estas deficiencias serán eliminadas por los desarrolladores del terminal, o los autores de los Asesores Expertos en comercio.

Además, MQ ha declarado más de una vez que la velocidad máxima de ejecución del código del programa no está disponible todavía (que yo sepa)...

 
Aumenta... Aumenta... Sólo queda cantarlo al son de un mantra con una campana en la mano y vestido con una sotana. MQL5 es más rápido que MQL4, no porque soporte objetos.
 
Integer:
Aumenta... aumenta... ...será mejor que lo cantes en un mantra con una campana en la mano y te pongas un vestido.

Entero:
MQL5 es más rápido que MQL4, no porque soporte objetos.
Pero aún así, en la mayoría de los casos, es más rápido. En mi opinión, no es apropiado comparar MQL5 con MQL4 (o con cualquier otro lenguaje de programación) en términos de velocidad de trabajo con objetos.
 

Usando la función GetTickCount(), he probado Asesores Expertos similares con y sin OOP:

Probar mi_oop_ea ( con OOP )

RJ 0 Core 1 15:12:15 Tiempo de prueba = 115203

EO 0 Core 1 15:12:15 EURUSD,H1: 6124935 ticks (3052 barras) generados en 115203 ms (total de barras en el historial 9199)

RP 0 Core 1 15:12:15 Desconectado


Mi_primera_prueba_EA ( sin OOP )

RH 0 Core 1 15:18:54 Tiempo de prueba = 90578

CR 0 Core 1 15:18:54 EURUSD,H1: 6124935 ticks (3052 barras) generados en 90578 ms (total de barras en el historial 9199)

O 0 Core 1 15:18:54 Desconectado


La diferencia es pequeña, pero no a favor de la OOP. Y en caso de optimización, esta diferencia se multiplica por el número de ejecuciones, si he entendido bien.

He sacado conclusiones por mí mismo.

También he comparado el EA de muestra MACD estándar para MT5 (con OOP) y para MT4:

Macd Muestra MT5

FO 0 Core 1 18:03:21 Tiempo de prueba = 126016

FD 0 Core 1 18:03:21 EURUSD,M1: 6124935 ticks (181129 barras) generados en 126016 ms (total de barras en el historial 545615)


Macd Muestra MT4

18:12:52 2010.06.30 23:59 MACD Muestra EURUSD,M1: Pruebas de tiempo = 64406

Los resultados son sorprendentes: MT5 y MQL con OOP no sólo son devoradores de recursos sino también de tiempo.

 

Cuando se prueban diferentes plataformas MT4 y MT5, no se pueden sacar conclusiones específicas sobre OOP. La diferencia en los resultados se debe en un 90% a la diferente arquitectura del sistema.

Además, el optimizador de código en MQL5 ha sido desactivado por el momento - lo estamos afinando. Cuando se activa, los resultados mejoran inmediatamente muchas veces.

Ayer se publicó un artículo en el que se comparaba la velocidad de MQL4 y MQL5 - te recomiendo que lo leas:

Se ha publicado el Análisis de Rendimiento de Medias Móviles MQL5:

Desde que se creó el primer indicador de media móvil simple, han aparecido muchos indicadores diferentes. Muchos de ellos se basan en un principio similar o utilizan determinadas formas de tratamiento de las series de precios en sus cálculos. Sin embargo, la cuestión de la velocidad de cálculo de estos indicadores y la optimización de los algoritmos utilizados en ellos suele quedar sin respuesta. En este artículo se describen todas las opciones posibles para utilizar las medias móviles y se hace un análisis comparativo de cada una de ellas.

Autor: Sergey

 


Una función con otro parámetro es claramente más lenta. ¿Es realmente por el parámetro?

Archivos adjuntos:
test.mq5  2 kb