Discussão do artigo "WebSocket para MetaTrader 5" - página 4

 
Denis Kirichenko # :

Portanto, os 3 anos prometidos estão esperando... falta muito pouco - um ano para esperar )))

Provavelmente :)))

 
MetaQuotes:

Foi publicado o novo artigo Websockets for MetaTrader 5:

Autor: Francis Dube

Muito bom! Então, como você analisa o quadro de continuação? Até agora, ele só analisa os quadros que estão na primeira resposta. Estou usando o websocket do nodejs.
 

Olá, ótimo trabalho @Francis Dube,

Implementei sua biblioteca para trabalhar com meu servidor de soquete da Web em nodejs/nestjs. O problema que estou enfrentando é que, quando estou usando os soquetes localmente com meu servidor, tudo funciona bem. O soquete mql5 envia o handshake e recebo a resposta correta, ou seja, "101 Switching protocols".

Mas as coisas mudam assim que implanto meu aplicativo nestjs na plataforma de aplicativos da digitalocean. Inicialmente, não consegui conectar os soquetes mql5 ao meu servidor, mas depois consegui me conectar a ele, mas não estou obtendo a resposta correta para o handshake, pois o método de conexão do "CWebsocketClient" retorna falso, já que o método de atualização não conseguiu analisar nenhuma resposta.

Embora eu não tenha certeza sobre o restante da funcionalidade, como o status do soquete é consistentemente definido como "CONNECTING", não consigo fazer nada após a conexão bem-sucedida. No entanto, quando, depois de chamar o método de conexão, envio os dados para o meu servidor usando o método "sendString" , os dados são entregues.

E é aí que fico confuso sobre como implementar as coisas no meu aplicativo, já que não consigo testar o handshake de nenhuma outra forma. Tentei extensões para verificar se o soquete da Web está funcionando no meu aplicativo, mas, quando se trata de mql5, as coisas ficam confusas e não são suficientemente elaborativas para descobrir a causa desse comportamento.

Qualquer pista ou orientação sobre esse problema será muito apreciada.

PS: Por enquanto, não estou fazendo nada sofisticado no meu EA mql5, estou apenas seguindo o guia de conexão do artigo e me conectando ao servidor. Nada mais! :(

 

Observe que há um bug em WebsocketClient.fillRxBuffer, no cenário em que há várias chamadas para m_socket.Read(...) dentro do loop while.

O m_socket.Read(...) não está acrescentando dados ao final da matriz, mas sim gravando no início da matriz.

No meu caso, em que eu estava me conectando a um soquete da Web local para teste, descobri que a primeira chamada para m_socket.Read(...) estava obtendo apenas um único byte e, em seguida, um segundo loop para m_socket.Read(...) estava obtendo o restante. Como resultado, o buffer não tinha o primeiro byte, o que causou um erro ao analisar o quadro.
Você também precisa garantir que o m_rxbuf esteja vazio antes de preencher o buffer, ou ele poderá pensar que mais dados foram obtidos do que realmente foram. O buffer é limpo após a análise dos quadros, mas, para ter certeza, decidi limpá-lo sempre que chamar fillRxBuffer.

Também fiz com que o m_socket.Read(...) parasse de repetir quando não houvesse mais dados para ler, para que não ficasse esperando pelo período de tempo limite. Idealmente, acho que ele deveria continuar lendo até que houvesse dados suficientes para analisar um quadro, mas isso requer uma pequena reestruturação do código.

No entanto, obrigado por este artigo. Até o momento, é a solução mais próxima que encontrei do que estava procurando. Eventualmente, talvez eu crie minha própria biblioteca de soquete da Web.

 
https://www.mql5.com/en/book

Você pode encontrar o trabalho com o websocket nativo no livro

aproveite
 
Soewono Effendi #:
h ttps:// www.mql5.com/en/book

Você pode encontrar o websocket nativo funcional no livro

aproveite

Acho que você pode estar confundindo websockets com sockets de rede comuns ou WebRequests HTTP simples. Os websockets exigem codificação personalizada além das solicitações HTTP comuns. Consegui fazer funcionar uma solução baseada neste artigo com algumas modificações específicas do projeto.

 
Shane Leigh Kingston #:

Acho que você pode estar confundindo websockets com sockets de rede comuns ou WebRequests HTTP simples. Os websockets exigem codificação personalizada além das solicitações HTTP comuns. Consegui fazer funcionar uma solução baseada neste artigo com algumas modificações específicas do projeto.

Para dar uma dica,
se você não quiser consultar o livro, a perda é sua, não minha;)

 
Shane Leigh Kingston analisar o quadro.
Você também precisa garantir que o m_rxbuf esteja vazio antes de preencher o buffer, ou ele poderá pensar que mais dados foram obtidos do que realmente foram. O buffer é limpo após a análise dos quadros, mas, para ter certeza, decidi limpá-lo sempre que chamar fillRxBuffer.

Também fiz com que o m_socket.Read(...) parasse de repetir quando não houvesse mais dados para ler, para que não ficasse esperando pelo período de tempo limite. Idealmente, acho que ele deveria continuar lendo até que haja dados suficientes para analisar um quadro, mas isso requer uma pequena reestruturação do código.

No entanto, obrigado por este artigo. Até o momento, é a solução mais próxima que encontrei do que estava procurando. Eventualmente, talvez eu crie minha própria biblioteca de soquete da Web.

Por favor, @ Shane Leigh Kingston, eu sabia que esta postagem era antiga, mas preciso de uma maneira de implementar o websocket com o mql5 e essa biblioteca parece ser a única relativamente próxima disso. Mas, novamente, estou enfrentando o problema que você acabou de descrever, mas não sou um especialista nessa área. Por favor, poderia me orientar sobre como fazer isso funcionar. Ficarei muito grato se puder me ajudar.

Desde já agradeço
 
pauldic #:
Por favor, @ Shane Leigh Kingston, eu sabia que essa postagem era antiga, mas preciso de uma maneira de implementar o websocket com o mql5 e essa biblioteca parece ser a única relativamente próxima disso. Mas, novamente, estou enfrentando o problema que você acabou de descrever, mas não sou um especialista nessa área. Por favor, poderia me orientar sobre como fazer isso funcionar. Ficarei muito grato se puder me ajudar.

Há outra implementação de websockets no livro algotrading.

Você pode encontrar a versão atual dos códigos-fonte na discussão no fórum:

MQL5 Book: Advanced language tools / Projects / WebSocket protocol in MQL5
MQL5 Book: Advanced language tools / Projects / WebSocket protocol in MQL5
  • www.mql5.com
We have previously looked at Theoretical foundations of the WebSockets protocol . The complete specification is quite extensive, and a detailed...
 
Stanislav Korotky #:

Há outra implementação de websockets no livro de algotrading.

Você pode encontrar a versão atual dos códigos-fonte na discussão no fórum:


Sim, @Stanislav, encontrei-o ontem e tem sido útil até agora, obrigado