Discusión sobre el artículo "WebRequest multiflujo asincrónico en MQL5"

 

Artículo publicado WebRequest multiflujo asincrónico en MQL5:

En el artículo se analiza una biblioteca que permite aumentar la efectividad del trabajo con solicitudes HTTP en MQL5. La ejecución de WebRequest en el modo no bloqueante se ha implementado en flujos adicionales usando gráficos y expertos auxiliares, intercambio de eventos personalizados y lectura de recursos compartidos. Se adjuntan los códigos fuente.

La implementación de los algoritmos requiere con frecuencia el análisis de información de diferentes fuentes externas, en concreto de Internet. MQL5 ofrece la función WebRequest para enviar solicitudes HTTP al "mundo exterior", pero dicha función, por desgracia, tiene un defecto muy notable. Esta función es sincrónica, y por eso bloquea el funcionamiento del experto durante todo el tiempo de ejecución de la solicitud. Recordemos que para cada experto en MetaTrader 5 se reserva un único flujo, que ejecuta consecutivamente las llamadas disponibles a las funciones API en el código, y que también inicia los manejadores de los eventos entrantes (tales como los ticks, los cambios en la profundidad de mercado de BookEvent, el temporizador, las transacciones comerciales, los eventos del gráfico, etc). En cada momento se ejecuta solo un fragmento de código, mientras que las demás "tareas" esperan su momento en las colas, hasta que el fragmento actual no retorne el control al núcleo.

Por ejemplo, si el experto debe procesar nuevos ticks en tiempo real, y además de ello, debe comprobar periódicamente las noticias económicas en uno o varios sitios web, no resultará posible ejecutar ambas misiones sin perjuicio alguno para una u otra. En cuanto el WebRequest se ejecuta en el código, el experto se queda "colgado" en la línea con la llamada de la función, y el evento sobre los nuevos ticks se omitirá. Incluso teniendo en cuenta que los ticks omitidos se pueden leer después con la ayuda de la función CopyTicks, el momento de la toma decisiones ya se habrá dejado escapar. Así, esta situación se ilustra con la ayuda de un diagrama UML de secuencialidad:

Diagrama de secuencia de procesamiento de eventos con código de bloqueo en un flujo

Fig.1 Diagrama de secuencia de procesamiento de eventos con código de bloqueo en un flujo

Autor: Stanislav Korotky

 
Awesome article. Openning doors for a lot of possibilities!. Thanks you.
Razón de la queja: