Programación asíncrona y multihilo en MQL - página 26

 
Vladimir Simakov:
La sincronización es tarea del programador, si no se sabe cómo, no se usa el multithreading. La tarea de los creadores de dar una herramienta, y allí todo el mundo es un mal Pinocho a sí mismo. El mismo a la mutex no es un problema para implementar por sí mismo.

Desgraciadamente no es así, el público objetivo de MQL - ¿quién? (en mi opinión, los programadores de aplicaciones que conocen los fundamentos de la programación)

Y esto seguirá siendo MQL5 (los desarrolladores han dicho repetidamente que no habrá más actualizaciones en MQL4).

El propio MQL5 funciona inicialmente en modo asíncrono - una solicitud de datos históricos (por ejemplo, devolverá los datos o empezará a paginar en segundo plano y devolverá un error). De esta manera todo funciona en cuanto al intercambio de datos entre el terminal y el programa MQL,

y estos momentos ya son desconcertantes, porque en lugar de devolver valores hay que comprobar constantemente la disponibilidad de los datos, etc. .... al convertir desde MQL4 no es realmente conveniente


y aquí hay otro tema que dice que vamos a utilizar una estructura simple de MQL-programa y entrar en diferentes eventos de forma asíncrona.... ¿a quién va dirigido? - ¿quién será el usuario final de estas funciones necesarias?

;)

 
Andrey Barinov:

La GUI debe girar en el EA principal y todo lo demás en un EA separado. Este EA esclavo separado se coloca en el OBJ_CHART invisible e interactúa con la ruta principal EventSendCustom().

No sé cómo es ahora. Parece que antes sólo se ejecutaban los scripts en OBJ_CHART. Había alguna otra peculiaridad con los parámetros de entrada.

He intentado solicitar barras de todos los símbolos de Market Watch. El historial de todos está cargado. ¡Decenas de segundos de un pase de ciclo! No estoy contento con MT5, por decirlo suavemente.
 
fxsaber:

No sé cómo es ahora. Anteriormente, parecía que sólo los scripts se ejecutaban en OBJ_CHART. Había alguna otra peculiaridad con los parámetros de entrada.

He intentado solicitar barras de todos los símbolos de Market Watch. Historial de todo lo subido. ¡Decenas de segundos de un pase de ciclo! No estoy contento con MT5, por decirlo suavemente.

Los Asesores Expertos se ejecutan, pero ni los ticks ni el temporizador funcionan allí. La única manera de ejecutar todo es a través de OnChartEvent (los ticks y el temporizador se pueden pasar allí desde el EA principal).

No he notado ninguna otra limitación. Todo funciona.

Pero se puede hacer lo mismo en un gráfico normal con el mismo principio. (En MT4 lo tengo así, ya que allí no hayOBJ_CHART )
 
Andrey Barinov:

Los asesores se inician, pero ni los ticks ni el temporizador funcionan allí. Sólo se puede utilizar OnChartEvent para iniciar todo (y los ticks y el temporizador se pueden enviar allí desde el EA principal).

No he notado ninguna otra limitación. Todo funciona.

Eso es genial. No conocía esta posibilidad. ¿Por qué no se pone el gui en el indicador y se interactúa a través de los recursos? Lo tengo así. El EventChartCustom() envía hasta 128 símbolos, un doble y un largo a la vez y llega a la cola OnChartEvent(). En los recursos, puede colocar cualquier carácter y valores de cualquier tipo a través de las unidades. Y no hace cola. Lo consigues cuando lo necesitas.
 
Реter Konow:
Eso es genial. No conocía esta posibilidad. ¿Por qué no pones el gui en el indicador y utilizas los recursos para la comunicación? Lo tengo así. El EventChartCustom() envía hasta 128 símbolos, un doble y un largo a la vez y llega a la cola OnChartEvent(). En los recursos, puede colocar cualquier carácter y valores de cualquier tipo a través de unidades. Y no hace cola. Lo consigues cuando lo necesitas.

Gracias, no sabía lo de OnChartEvent. ¿Hace la sincronización a través de eventos personalizados? ¿Intercambio de datos?

 
Реter Konow:
Eso es genial. No conocía esta característica. ¿Por qué no poner el gui en el indicador y utilizar los recursos? Lo tengo así. El EventChartCustom() envía hasta 128 símbolos, un doble y un largo a la vez y llega a la cola OnChartEvent(). En los recursos, puede colocar cualquier carácter y valores de cualquier tipo a través de las unidades. Y no hace cola. Lo consigues cuando lo necesitas.

No paso datos por OnChartEvent. Sólo eventos. De lo contrario, no hay eventos en el agente EA, y así recibe ONTIMER_BEAT y ONTICK_BEAT.

Los datos pueden intercambiarse a través de un archivo o de recursos, según la tarea. Yo uso los archivos más a menudo, porque también se utilizan para restaurar la interfaz gráfica de usuario y todo lo demás después de reiniciar el terminal.

¿Su interfaz gráfica de usuario es capaz de recordar y restablecer su aspecto tras el reinicio del terminal?

 
fxsaber:

Gracias, no sabía lo de OnChartEvent. ¿Hace la sincronización a través de eventos personalizados? ¿Intercambio de datos?

Cada mensaje de cada lado tiene un número de secuencia. Cuando la parte A envía un mensaje a la parte B, primero mira si el mensaje anterior ha sido leído. Si no es así, no envía uno nuevo. Cuando la parte B envía un mensaje a la parte A, también busca si el mensaje anterior ha sido leído.
 
Andrey Barinov:

No paso datos por OnChartEvent. Sólo eventos. De lo contrario, no hay eventos en el agente EA, y así recibe ONTIMER_BEAT y ONTICK_BEAT.

Los datos pueden intercambiarse a través de un archivo o de recursos, según la tarea. Yo uso los archivos más a menudo, porque también se utilizan para restaurar la interfaz gráfica de usuario y todo lo demás después de reiniciar el terminal.

¿Su interfaz gráfica de usuario es capaz de recordar y restaurar su imagen después de reiniciar el terminal?

Yo sugeriría prescindir por completo de EventChartCustom(), precisamente por la cola, que a veces puede provocar atascos. Interactuar a través de los recursos haciendo peticiones bidireccionales con la frecuencia del temporizador. Por ejemplo, si el lado A está muy cargado con OnChartEvent() y el lado B envía un evento del botón Cancelar, entonces el lado A puede recibir este evento tarde debido a alguna tontería que lo esté cargando.

Sí, guardo el núcleo en un archivo y lo cargo desde un archivo. En este caso, todos los ajustes y la apariencia se revierten a la última vista después de reiniciar. Pero, por lo general, después de reiniciar necesito la configuración de inicio, por lo que no uso esta función.

 
Реter Konow:

Yo sugeriría prescindir por completo de EventChartCustom(), precisamente por la cola, que a veces puede causar ralentizaciones. Interactuar a través de los recursos haciendo peticiones bidireccionales con la frecuencia del temporizador . Por ejemplo, si el lado A está muy cargado con OnChartEvent() y el lado B envía un evento del botón Cancelar, entonces el lado A puede recibir este evento tarde debido a alguna tontería que lo cargue.

El temporizador no funciona en EA que está en OBJ_CHART. No hay EVENTOS allí (excepto OnChartEvent). Por lo tanto, tenemos que enviar todos loseventos (OnTick, OnTimer etc) allí desde el EA principal.

Además, no mando a pulsar botones allí. No hay necesidad de eso.
 
Andrey Barinov:

El temporizador no funciona en el EA que está en OBJ_CHART. No hay EVENTOS allí (excepto OnChartEvent). Por lo tanto, todos los eventos (OnTick, OnTimer, etc.) deben ser enviados allí desde el EA principal.

Además, no envío pulsaciones de botones de un lado a otro. No hay necesidad de eso.

Propongo utilizar el indicador como un portador de GUI, y los recursos como un enlace a la EA. Además, en MT4, podrá controlar el probador de Asesores Expertos desde un gráfico estándar utilizando el panel. Todos los controles funcionarán, no sólo los botones. Podrás enviar textos y cualquier otra cosa al EA en prueba. Ya lo he probado. Todo funciona.

ZS. Y el EA que se está probando enviará datos diferentes al gráfico normal.

Razón de la queja: