Discussão do artigo "WebRequest multi-threaded assíncrono em MQL5"

Para adicionar comentários, por favor Faça o login ou registrar
MetaQuotes Software Corp.
Moderador
205528
MetaQuotes Software Corp.  

Novo artigo WebRequest multi-threaded assíncrono em MQL5 foi publicado:

Este artigo descreve uma biblioteca que permite aumentar a eficiência ao trabalhar com solicitações HTTP em linguagem MQL5. O WebRequest é iniciado no modo sem bloqueio em threads adicionais usando gráficos e EAs assistentes, compartilhando eventos personalizados e lendo recursos compartilhados. Códigos fonte estão anexados ao artigo.

A implementação de algoritmos de negociação geralmente requer a análise de informações de várias fontes externas, em particular da Internet. A MQL5 fornece a função WebRequest para enviar solicitações HTTP, mas, infelizmente, ela tem uma falha importante. Esta função é síncrona e, portanto, bloqueia EAs durante toda a duração da solicitação. Lembre-se de que, para cada EA no MetaTrader 5, há uma única thread que executa sequencialmente as chamadas das funções API existentes no código e que inicia manipuladores para eventos de entrada (como ticks, alterações do livro de ofertas no BookEvent, temporizador, negócios, eventos gráficos, etc.). Apenas um trecho de código é executado por vez, enquanto os outros aguardam sua vez, até que o trecho atual retorna o controle ao kernel.

Por exemplo, se um EA tiver que processar novos ticks em tempo real e verificar periodicamente notícias econômicas num ou vários sites, é impossível cumprir os dois requisitos sem causar algum prejuízo. Depois que o WebRequest é executado no código, o EA permanece congelado na string com a chamada de função, enquanto os eventos sobre novos ticks são ignorados. Mesmo considerando que depois os ticks perdidos podem ser lidos usando a função CopyTicks, o momento da toma de decisão pode ser perdido. Veja como esta situação é ilustrada usando o diagrama de sequência UML:

Diagrama de sequência de processamento de eventos com um código de bloqueio numa thread

Fig.1 Diagrama de sequência de processamento de eventos com um código de bloqueio numa thread

Autor: Stanislav Korotky

Rodrigo Malacarne
Moderador
11107
Rodrigo Malacarne  

Absolutely amazingly incredible article !!!

Congratulations and thank you, @marketeer !

Para adicionar comentários, por favor Faça o login ou registrar