Gracias al autor, artículo relevante. Yo también he estado dándole vueltas a este tema, pero no llegué a leer el artículo.
El autor advierte que usted debe vigilar cuidadosamente qué instrumentos se están ejecutando qué. A la luz de la escritura Asesores Expertos que se pueden ejecutar en cualquier par, esto es un poco difícil. Usted tendrá que realizar un seguimiento de qué par de la EA se está ejecutando en y ajustar los pares de flujos paralelos.
En este sentido, una pregunta (no tanto al autor, sino más bien a los desarrolladores de MQ): ¿es posible introducir herramientas personalizadas?
De esta forma podríamos resolver muchas tareas, empezando por crear gráficos vacíos para cálculos paralelizados y terminando con la creación de gráficos de ticks de elaboración propia.
En cuanto al buffer de transferencia de datos, te puedo aconsejar que crees una estructura global y transfieras diferentes tipos de datos por la estructura. Sé por experiencia que no siempre es conveniente devolver el resultado de los cálculos en forma de array, a menudo hay que hacer un seguimiento de algunos contadores, y para no confundir los nombres es más fácil pasar todo como una estructura y ya referirse a las variables como miembros de la estructura. Por cierto, la misma estructura puede incluir arrays.
- www.mql5.com
A este respecto, una pregunta (no tanto al autor, sino más bien a los desarrolladores de MQ): ¿es posible introducir herramientas personalizadas?
Tal vez voy a repetir la idea ya expresada aquí acerca de las herramientas personalizadas, pero me gustaría añadir....
Ahora un Asesor Experto (indicador, script) se lanza sólo en un símbolo específico. Tiene acceso a los datos actuales de otros símbolos, pero el evento OnTick se genera sólo para el símbolo anfitrión, en cuyo gráfico se lanza el Asesor Experto.
Tal vez sería lógico introducir la posibilidad de crear su propia"herramienta personalizada", que es como un complemento. que es como una superestructura sobre los Asesores Expertos y tiene la capacidad de recibir y procesar ticks de varios símbolos, pasando los resultados a los programas (partes del programa o Asesores Expertos, indicadores) que trabajan con un símbolo específico en su propio hilo. Esto facilitó e impulsó enormemente la creación de la "multidivisa". Y el propio concepto de programación de objetos empuja a ello. ¿Por qué vincular un Asesor Experto a un símbolo concreto si se trabaja con varios símbolos?
P.S.Bueno, o sería bueno añadir a las funciones SymbolInf... algo como el evento "ha llegado un nuevo tick para este símbolo".
Ahora el Asesor Experto (indicador, script) se lanza sólo en un símbolo específico. Tiene acceso a los datos actuales de otros símbolos, pero el evento OnTick se genera sólo para el símbolo anfitrión, en cuyo gráfico se lanza el Asesor Experto.
Es difícil entender por qué los desarrolladores repitieron la muletilla. Después de todo, cuando se estaba desarrollando la arquitectura MQL5, ya existía una API muy fuerte, en la que onTick se activaba para cualquier tick de cualquier símbolo firmado.
En general, no entiendo por qué eligieron tal arquitectura y tomaron tan poco de la API ya existente, que era muy competente en términos de arquitectura.
Los desarrolladores de MQL5 se comportan como si estuvieran reinventando la rueda: "pensaremos en esta función", "sí, tienes razón, la añadiremos", etc.
Se ha mencionado varias veces que se invirtió más de un año en elaborar la arquitectura. Así que hay algunos argumentos por los que decidieron hacerlo así y no de otra manera.
P.D. Tal vez la razón radica en el hecho de que los desarrolladores de MetaTrader tienen poca experiencia en corretaje y comercio, pero una enorme experiencia en la escritura de plataformas. Otros desarrolladores, por el contrario, tenían una gran experiencia en el corretaje real y el comercio de mercado.
P.P.S. Escribí mis pensamientos, no especulaciones. Siempre es más fácil criticar que crear. Los desarrolladores, a pesar de sus evidentes errores, merecen respeto.
Tal vez sería lógico introducir la posibilidad de crear su propia"herramienta personalizada" , que es como un complemento sobre los Asesores Expertos y tiene la capacidad de recibir y procesar ticks de varios símbolos, pasando los resultados a los programas (partes del programa o Asesores Expertos, indicadores que trabajan con un símbolo específico) que es como una superestructura sobre los EAs y tiene la capacidad de recibir y procesar ticks de varios símbolos, pasando los resultados a programas (partes del programa o EAs, indicadores) que trabajan con un símbolo concreto en su propio hilo. Esto facilitó e impulsó enormemente la creación de la "multidivisa". Y el propio concepto de programación de objetos empuja a ello. ¿Por qué vincular un Asesor Experto a un símbolo concreto si se trabaja con varios símbolos?
P.S.Bueno, o sería bueno añadir a las funciones SymbolInf... algo como el evento "ha llegado un nuevo tick para este símbolo".
Este "add-on" puede ser implementado usando las herramientas estandar de MQL5: Multicurrency tick handler OnTickMarketWatch
Gracias. Fue este artículo el que me empujó a las conclusiones anteriores. Pero como tu mismo has notado en este articulo:
Consejos de uso:
1. Esta variante del tick handler multidivisa consume bastantes recursos. Puedes aliviar la carga del procesador aumentando el retardo del tiempo de recepción de ticks en el script, utilizando la variable delay. Pero al mismo tiempo puede omitir algún número de ticks.
Si incrementas el tiempo de retardo hasta 1 segundo, puedes conseguir el mismo efecto usando OnTimer(). Desafortunadamente con las mismas desventajas.
Al mismo tiempo, el terminal recibe y procesa continuamente ticks por símbolos desde la "Ventana de Mercado". Tenemos acceso a estos ticks, pero no tenemos ninguna señal de que estos datos han sido actualizados. Por eso tenemos que hacer la comprobación artificialmente. La ventaja de MQL5 es que se puede hacer. Pero de acuerdo en que sería mucho más elegante tener una solución incrustada en las funciones de terminal. Que sea un evento independiente como OnTrade() y el desarrollador pueda usarlo a su discreción (o no).
Y sobre las "herramientas personalizadas" o superestructura sobre expertos.... Me doy cuenta de que esto es una especie de "sueño" y debería haberse pensado en la fase de diseño... ¡Es una pena!
Gracias. Fue este artículo el que me llevó a las conclusiones anteriores. Pero como usted mismo ha señalado en este artículo:
Consejos de uso:
1. Esta variante del gestor de tick multidivisa consume bastantes recursos. Puedes aliviar la carga del procesador aumentando el retardo del tiempo de recepción de ticks en el script, utilizando la variable delay. Pero al mismo tiempo puede omitir algún número de ticks.
Si incrementas el tiempo de retardo hasta 1 segundo, puedes conseguir el mismo efecto usando OnTimer(). Desafortunadamente con las mismas desventajas.
Al mismo tiempo, el terminal recibe y procesa continuamente ticks por símbolos desde la "Ventana de Mercado". Tenemos acceso a estos ticks, pero no tenemos ninguna señal de que estos datos han sido actualizados. Por eso tenemos que hacer la comprobación artificialmente. La ventaja de MQL5 es que se puede hacer. Pero de acuerdo en que sería mucho más elegante tener una solución incrustada en las funciones de terminal. Que sea un evento independiente como OnTrade() y que el desarrollador pueda usarlo a su discreción (o no).
Y sobre "herramientas personalizadas" o superestructura sobre expertos.... Me doy cuenta de que esto es sólo un "sueño" y debería haberse pensado en la fase de diseño... ¡Es una pena!
De acuerdo. Ahora falta que los desarrolladores nos escuchen. Estaría bien que este complemento incluyera de una vez funciones de gestión de hilos.
Sería posible ejecutar cada procesamiento en su propio hilo. Quizás permitiría procesar un nuevo tick mientras se trabaja con el tick actual.
Artículo útil. Me ha abierto nuevos horizontes.
Tengo una pregunta: ¿se puede convertir la función OnTick() en una función con un parámetro, como OnTick(EURUSD), para que los ticks de diferentes instrumentos puedan ser procesados en paralelo en un Asesor Experto? Por supuesto, con el procesamiento de cada instancia de una función de un solo parámetro en un hilo separado (en un núcleo separado).
- www.mql5.com
- 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
Artículo publicado Cálculos paralelos en MetaTrader 5:
El tiempo ha tenido un gran valor a lo largo de la historia de la humanidad, y nos esforzamos en no desperdiciarlo innecesariamente. En este artículo, se le va a mostrar cómo acelerar el funcionamiento de su Expert Advisor si su ordenador dispone de un procesador de núcleo múltiple. Además, la implementación del método propuesto no requiere el conocimiento de ningún otro lenguaje aparte de MQL5.
Autor: Andrew