Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Portanto, os 3 anos prometidos estão esperando... falta muito pouco - um ano para esperar )))
Provavelmente :)))
Foi publicado o novo artigo Websockets for MetaTrader 5:
Autor: Francis Dube
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.
h ttps:// www.mql5.com/en/book
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.
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;)
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.
Desde já agradeço
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:
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Especialistas: MQL5 Programming for Traders - Códigos-fonte do livro. Parte 7
Stanislav Korotky, 2025.03.10 13:32
Estou anexando algumas correções de erros e melhorias nas classes websockets.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: