Programación asíncrona y multihilo en MQL

 
Es necesario escribir código mql en modo asíncrono o multihilo.
Estoy familiarizado con la escritura de código asíncrono y multihilo a partir del módulo asyncio de Python.

Como sabes, todos los EAs y scripts en mql se ejecutan en un solo hilo.
Por lo tanto, hay cierta confusión al respecto.
La biblioteca WinAPI portado a mql tiene funciones para trabajar con hilos a través de WinAPI.
Si utilizo estas funciones multihilo en mi código mql, entonces las funciones pasadas por mql también serán multihilo?
Y el Asesor Experto/Script es de un solo hilo por defecto, ¿no dificultará el uso de multihilo en WinAPI?

Si es posible usar WinAPI multithreading en programas mql, por favor sugiéreme una guía o artículos sobre cómo manejar estos hilos WinAPI en mql.
Entiendo el principio básico de asyncio, pero me faltan los ejemplos ilustrativos para mql.
Conozco la ayuda de Microsoft, pero no la he estudiado, porque aún no tengo clara la lógica de uso del flujo WinAPI en mql, y lo que se encuentra exactamente en la ayuda.
Indícame la dirección correcta, si hay algún ejemplo o artículo para mql, sería genial.
 

Pruébalo, no tiene sentido adivinar. Si los punteros a las funciones son válidos, tal vez algo funcione. ¿Has pensado en otra cuestión: cómo inicializar la biblioteca µl estándar para un nuevo hilo?

Los ejemplos son fáciles de buscar en Google: "winapi multithreading". Debes entender (quizás lo sepas sin mí) que la programación multihilo es otro nivel, puedes perder las piernas. Dudo que Python (aunque soy 0 en Python) pueda revelar todos los lados de esta actividad. Es poco probable que se consiga un no-código multihilo decente al azar.

 
Vict:

¿Has pensado en otra cuestión: cómo inicializar la biblioteca µl estándar para un nuevo hilo?

Sí, la biblioteca WinAPI estándar, portado de la API de Windows, que interactúa a través de dlls estándar.
En consecuencia, la dll estándar debe ser inicializado, y para ello en WinAPI también son funciones portadas.
Los ejemplos en C++ para la inicialización de dlls deberían poder funcionar también en mql.
Como las funciones de inicialización son las mismas de la API de Windows, lo principal es encontrar los ejemplos adecuados que no estén desfasados, ese es el problema. Una búsqueda en Google no siempre es el resultado correcto.
Hay muchos programadores profesionales en este foro, ellos pueden mostrarte un trozo de código, como la inicialización, la asignación de memoria, la desinicialización, etc.
Y luego hay que trabajar con hilos. Es muy extraño que hasta ahora no haya ningún artículo sobre este tema en la sección "Artículos".

Victoreo:

En general, es necesario entender (tal vez usted lo sabe sin mí) - la programación multihilo es otro nivel, se puede dejar sin piernas.
Dudo que Python (aunque soy 0 en Python) pueda revelar todos los lados de esta actividad. Es poco probable que se consiga un no-código multihilo decente al azar.

¿Qué quiere decir con "quedarse sin piernas"?
Si se trabaja correctamente con los flujos o la asincronía, no debería haber discapacidades.
Ese es el reto, aprender a utilizar correctamente los hilos de la API de Windows en mql, o async.
En Python he trabajado sobre todo con async, todo vuela bien, con hilos en Python por culpa de GIL hay problemas. Por esta razón es mejor no utilizar hilos en Python.

 
Roman:
Es necesario escribir código mql en modo asíncrono o multihilo.
Estoy familiarizado con la escritura de código asíncrono y multihilo a partir del módulo asyncio de Python.

Como sabes, todos los EAs y scripts en mql se ejecutan en un solo hilo.
Por lo tanto, hay cierta confusión al respecto.
La biblioteca WinAPI portado a mql tiene funciones para trabajar con hilos a través de WinAPI.
Si utilizo estas funciones multihilo en mi código mql, entonces las funciones pasadas por mql también serán multihilo?
Y el Asesor Experto/Script es de un solo hilo por defecto, ¿no dificultará el uso de multihilo en WinAPI?

Si es posible usar WinAPI multithreading en programas mql, por favor sugiéreme una guía o artículos sobre cómo manejar estos hilos WinAPI en mql.
Entiendo el principio básico de asyncio, pero me faltan los ejemplos ilustrativos para mql.
Conozco la ayuda de Microsoft, pero no la he estudiado, porque aún no tengo clara la lógica de uso del flujo WinAPI en mql, y lo que se encuentra exactamente en la ayuda.
Indícame la dirección correcta, si hay algún ejemplo o artículo para mql, sería genial.
mt5 tiene un openCL para el multithreading. Busque artículos sobre este tema aquí.
 

No se puede llamar a funciones MQL desde una DLL.

Pero es posible ejecutar múltiples hilos a través de llamadas a la DLL, para que trabajen independientemente de MQL5 en su entorno.

Por ejemplo, se preparan los datos desde MQL y se colocan en algún lugar o se pasan a la DLL, que a su vez trabajará con múltiples hilos y devolverá el resultado a través de una función adicional.

 
Roman:

Sí, lo hice, la biblioteca WinAPI estándar, portado de la API de Windows, que interactúa a través de dlls estándar.
En consecuencia, las dlls estándar deben ser inicializadas, y hay funciones portadas en WinAPI para este propósito también.

No, me refería específicamente a la biblioteca estándar de µl (ya sabes, las funciones de comercio que hay, por ejemplo, y todas las demás). Debe haber datos globales allí, y cada hilo debe tener su propia copia, su nuevo hilo a través de CriatTrade() permanecerá sin inicializar correctamente.

¿Qué quiere decir con "quedarse sin piernas"?

Hay muchos rastrillos por ahí. Pero si no tienes problemas con una lectura como esta https://en.cppreference.com/w/cpp/atomic/memory_order, estás listo.
 
MetaQuotes Software Corp.:

Pero es posible ejecutar múltiples hilos a través de llamadas DLL, de modo que funcionen independientemente de MQL5 en su entorno.

Esto es lo que estamos hablando, utilizar la biblioteca WinAPI estándar portado, sólo implica trabajar a través de dlls estándar de Windows.

Victora:

No, me refería exactamente a la biblioteca estándar de MQL5 (por ejemplo, las funciones comerciales y todo lo demás). Debe haber datos globales allí y cada hilo debe tener su propia copia, su nuevo hilo a través de CREATTrade() permanecerá sin inicializar correctamente.

Hay muchos rastrillos ahí. Pero si no tienes problemas con una lectura como esta https://en.cppreference.com/w/cpp/atomic/memory_order, puedes irte.

Hasta donde yo sé, cuando se inicializa la dll, también se pueden inicializar las funciones exportadas que serán llamadas desde la dll al programa mql.
Así que este no es el principal problema, el problema es cómo hacerlo. Como escribí arriba, tal vez los ejemplos de C++ funcionen también en mql, pero pensé que los ejemplos de código de mql podrían ayudar aquí.
Así que para no devanarme los sesos con la portabilidad, puede que alguien que ya haya trabajado con WinAPI me pueda dar una pista.

p.d.
Ah, ya veo lo que quieres decir, pero se trata del WinAPI portado, no de las funciones mql,
tal vez las funciones mql podrían ser inicializadas a través de objetos, o poner en su dll e inicializar como se describe anteriormente.

 

Algo que no nos entendemos.

Pero no te molestes - no crearás un hilo a través de CREATTrade() dentro de µl, tienes que pasar un puntero a una función (donde el hilo se iniciará), pero como se señaló anteriormente - kukush.

 

Voy a traducir lo que ya le ha dicho un representante de la empresa de desarrollo de MT:

No se pueden crear hilos desde MQL. Ni siquiera con WinAPI.

Sólo puede hacerlo escribiendo su propia DLL.


 
Roman:
Es necesario escribir código mql en modo asíncrono o multihilo.

No es lo que necesitas, por supuesto, pero puedes aprender de ello

Многопоточный асинхронный WebRequest на MQL5 своими руками
Многопоточный асинхронный WebRequest на MQL5 своими руками
  • www.mql5.com
Реализация торговых алгоритмов часто требует анализа информации из различных внешних источников, в частности из Internet. MQL5 предоставляет функцию WebRequest для отправки HTTP-запросов во "внешний мир", но она, к сожалению, обладает одним заметным недостатком. Эта функция является синхронной, а потому блокирует работу эксперта на все время...
 
Vict:

Algo que no entendemos del otro.

Pero no se complique: no creará un hilo mediante CREATTrade() dentro de µl, sino que tendrá que pasar un puntero a una función (con la que se iniciará el hilo), pero como ya se ha indicado, kukish.

¿Qué hay de esta respuesta entonces?

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Programación asíncrona y multihilo en MQL

MetaQuotes Software Corp., 2019.07.24 16:31

Pero es posible ejecutar múltiples hilos a través de llamadas DLL, de modo que funcionen independientemente de MQL5 en su entorno.

Vict, tal vez como has descrito hay un problema con los hilos que trabajan dentro de mql, pero según tengo entendido llamar a funciones desde WinAPI usando CriatTrade() no debería ser un problema.
Necesito multithreading con funciones WinAPI, no con funciones mql.

Razón de la queja: