Programação assíncrona e multi-tarefa em MQL

 
Existe a necessidade de escrever código mql em modo assíncrono ou multithreaded.
Estou familiarizado com a escrita de códigos assíncronos e multi-tarefa a partir do módulo assíncio de Python.

Como você sabe, todos os EAs e roteiros em mql são executados em um único fio.
Portanto, há alguma confusão a esse respeito.
A biblioteca WinAPI portada para mql tem funções para trabalhar com roscas via WinAPI.
Se eu usar estas funções multithreading no meu código mql, então as funções mql passed também serão multithreaded?
E o Expert Advisor/Script é single threaded por padrão, não impedirá o uso de multithreading no WinAPI?

Se for possível utilizar WinAPI multithreading em programas mql, sugere-me um guia ou artigos sobre como lidar com estes fios WinAPI em mql.
Entendo o princípio básico de asyncio, mas faltam os exemplos ilustrativos de mql.
Estou ciente da ajuda da Microsoft, mas não a estudei, porque ainda não tenho um entendimento claro da lógica de usar o fluxo WinAPI em mql, e o que exatamente se encontra na ajuda.
Aponte-me na direção certa, se houver algum exemplo ou artigo para mql, isso seria fantástico.
 

Experimente, não vale a pena adivinhar. Se as indicações para as funções forem válidas, talvez algo funcione. Você já pensou em outra pergunta - como inicializar a biblioteca de µl padrão para um novo tópico?

Os exemplos são fáceis de pesquisar no Google - "winapi multithreading". Você deve entender (talvez você saiba sem mim) que a programação multithreaded é outro nível, você pode perder suas pernas. Duvido que Python (embora eu esteja 0 em Python) possa revelar todos os lados desta atividade. É improvável que se obtenha um código decente multi-tarefa não-código ao acaso.

 
Vict:

Você já pensou em outra pergunta - como inicializar a biblioteca padrão de µl para um novo tópico?

Sim, a biblioteca padrão WinAPI, portada do Windows API, que interage através das dlls padrão.
Assim, a dll padrão deve ser inicializada, e para isso no WinAPI também são funções portadas.
Os exemplos em C++ para inicialização da dll devem ser capazes de funcionar também em mql.
Como as funções de inicialização são as mesmas da API do Windows, o principal é encontrar os exemplos certos que não estejam desatualizados, esse é o problema. Uma busca no Google nem sempre é o resultado certo.
Há muitos programadores profissionais neste fórum, eles podem mostrar um pedaço de código, como inicialização, alocação de memória, desinicialização, etc.
E então você tem que trabalhar com fios. É muito estranho que não haja nenhum artigo sobre este assunto na seção "Artigos" até agora.

Vitória:

Em geral, você precisa entender (talvez você saiba sem mim) - programação multithreaded é outro nível, você pode ser deixado sem pernas.
Duvido que Python (embora eu esteja 0 em Python) possa revelar todos os lados desta atividade. É improvável que se obtenha um código decente multi-tarefa não-código ao acaso.

O que você quer dizer com "sem pernas"?
Se você trabalha corretamente com fluxos ou assíncronia, não deve haver nenhuma deficiência.
Esse é o desafio, aprender como usar corretamente os threads API do Windows em mql, ou async.
Em Python eu trabalhei principalmente com async, tudo voa bem, com fios em Python por causa do GIL há problemas. Por este motivo, é melhor não utilizar os fios em Python.

 
Roman:
Existe a necessidade de escrever código mql em modo assíncrono ou multithreaded.
Estou familiarizado com a escrita de códigos assíncronos e multi-tarefa a partir do módulo assíncio de Python.

Como você sabe, todos os EAs e roteiros em mql são executados em um único fio.
Portanto, há alguma confusão a esse respeito.
A biblioteca WinAPI portada para mql tem funções para trabalhar com roscas via WinAPI.
Se eu usar estas funções multithreading no meu código mql, então as funções mql passed também serão multithreaded?
E o Expert Advisor/Script é single threaded por padrão, não impedirá o uso de multithreading no WinAPI?

Se for possível utilizar WinAPI multithreading em programas mql, sugere-me um guia ou artigos sobre como lidar com estes fios WinAPI em mql.
Entendo o princípio básico de asyncio, mas faltam os exemplos ilustrativos de mql.
Estou ciente da ajuda da Microsoft, mas não a estudei, porque ainda não tenho um entendimento claro da lógica de usar o fluxo WinAPI em mql, e o que exatamente se encontra na ajuda.
Aponte-me na direção certa, se houver algum exemplo ou artigo para mql, isso seria fantástico.
mt5 tem um openCL para multithreading. Procure aqui artigos sobre este assunto.
 

Não se pode chamar funções MQL a partir de uma DLL.

Mas é possível executar várias linhas através de chamadas DLL, para que elas possam trabalhar independentemente da MQL5 em seu ambiente.

Por exemplo, da MQL você prepara os dados, coloca em algum lugar ou passa para a DLL, que por sua vez funcionará com vários fios e retornará o resultado através de uma função adicional.

 
Roman:

Sim, eu fiz, a biblioteca padrão WinAPI, portada do Windows API, que interage através das dlls padrão.
De forma correspondente, as dlls padrão devem ser inicializadas, e há funções portadas no WinAPI também para este fim.

Não, eu estava falando especificamente sobre a biblioteca padrão µl (você sabe, as funções comerciais lá, por exemplo, e todas as outras). Deve haver dados globais lá, e cada thread deve ter sua própria cópia, sua nova thread via CriatTrade() permanecerá não-inicializada corretamente.

O que você quer dizer com "deixado sem pernas"?

Há muitos ancinhos por aí. Mas se você não tiver problemas com uma leitura como esta https://en.cppreference.com/w/cpp/atomic/memory_order, você está pronto.
 
MetaQuotes Software Corp.:

Mas é possível executar várias linhas através de chamadas DLL, de modo que elas funcionem independentemente da MQL5 em seu ambiente.

É disto que estamos falando, usar a biblioteca WinAPI padrão portada, implica apenas trabalhar através das dlls padrão do Windows.

Vitória:

Não, eu estava falando exatamente da biblioteca padrão MQL5 (por exemplo, funções comerciais e todo o resto). Deve haver ali dados globais e cada linha deve ter sua própria cópia, sua nova linha via CREATTrade() permanecerá não inicializada corretamente.

Há ali muitos ancinhos. Mas se você não tiver problemas com uma leitura como esta https://en.cppreference.com/w/cpp/atomic/memory_order, você está pronto para ir.

Até onde eu sei, ao inicializar a dll, você também pode inicializar as funções exportadas que serão chamadas da dll para o programa mql.
Então este não é o problema principal, o problema é como fazer isso? Como escrevi acima, talvez os exemplos C++ também funcionem em mql, mas achei que os exemplos de código mql poderiam ajudar aqui.
Por isso, para não me abalar com a portabilidade, talvez seja alguém que já tenha trabalhado com a WinAPI que poderá me dar algumas dicas.

p.s.
Entendo o que você quer dizer, mas é sobre o winAPI portado, não sobre funções mql,
talvez as funções mql possam ser inicializadas através de objetos, ou colocadas em sua dll e inicializadas como descrito acima.

 

Algo que não entendemos um ao outro.

Mas não se preocupe - você não vai criar um fio via CREATTrade() dentro do µl, você precisa passar um ponteiro para uma função (onde o fio começará), mas como observado acima - kukush.

 

Vou traduzir o que já lhe foi dito por um representante da empresa de desenvolvimento MT:

Não é possível criar roscas a partir da MQL. Nem mesmo com o WinAPI.

Você só pode fazer isso escrevendo sua própria DLL.


 
Roman:
Existe a necessidade de escrever código mql em modo assíncrono ou multithreaded.

Não é a coisa certa a fazer, mas é bom aprender

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

Algo que não entendemos um sobre o outro.

Mas não fique atolado - você não vai criar um fio via CREATTrade() dentro do µl, você precisa passar um ponteiro para uma função (com a qual o fio começará), mas como observado acima - kukish.

E quanto a esta resposta então?

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Programação assíncrona e multi-tarefa em MQL

MetaQuotes Software Corp., 2019.07.24 16:31

Mas é possível executar várias linhas através de chamadas DLL, de modo que elas funcionem independentemente da MQL5 em seu ambiente.

Vitória, talvez como você descreveu há um problema com os fios trabalhando dentro do mql, mas como eu entendo as funções de chamada da WinAPI usando a CriatTrade() não deve ser um problema.
Eu preciso de multithreading com funções WinAPI, não com funções mql.

Razão: