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

 

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

 

Absolutely amazingly incredible article !!!

Congratulations and thank you, @marketeer !

 

Really nice article. 

However I get issues when trying to compile with metatrader 5.

Initialize sequence for array expected:

   in template 'const TYPETOBYTES::STRUCT_TYPE<T> TYPETOBYTES::FillBytes(const uchar)' specified with [T=uchar] TypeToBytes.mqh 314 31

I understand that it is an issue initilizing the array. I could try to fix. However, I dont see any report of this issue, thinking whether it is only my self facing the issue.

Thanks for the article anywell, wonderful anyway!



 
magnomilk #:

Really nice article. 

However I get issues when trying to compile with metatrader 5.

Initialize sequence for array expected:

   in template 'const TYPETOBYTES::STRUCT_TYPE<T> TYPETOBYTES::FillBytes(const uchar)' specified with [T=uchar] TypeToBytes.mqh 314 31

I understand that it is an issue initilizing the array. I could try to fix. However, I dont see any report of this issue, thinking whether it is only my self facing the issue.

Thanks for the article anywell, wonderful anyway!



Make sure you're using the latest TypeToBytes library.

Razão: