Discussão do artigo "WebSocket para MetaTrader 5"

 

Novo artigo WebSocket para MetaTrader 5 foi publicado:

Antes do aparecimento das funções de rede na API MQL5 atualizada, os aplicativos MetaTrader eram limitados em sua capacidade de se conectar e interagir com serviços baseados no protocolo WebSocket. Agora a situação mudou. Neste artigo, veremos a implementação da biblioteca WebSocket em MQL5 puro. Uma breve descrição do protocolo WebSocket e um guia passo a passo sobre como usar a biblioteca resultante serão apresentados.

Abaixo está um vídeo do programa que funciona quando conectado ao servidor.


Autor: Francis Dube

 
Excelente artigo. Já era hora de o MT5 ter suporte nativo a websockets.
Esperamos que esse código seja incluído como arquivos de inclusão padrão do MT5.
Ou, melhor ainda, o MT5 deve fornecer a API nativa de websocket por motivos de desempenho.

Obrigado por seu esforço.
 
"The release folder contains prebuilt dll and .exe files available for immediate use."

Você se esqueceu da pasta Release mencionada em sua página do github? ;)

 
MetaQuotes:

O artigo WebSocket para MetaTrader 5 foi publicado:

Autor: Francis Dube

O WebSocket, mesmo em implementações normais, rápidas e corretas, é algo bastante caprichoso. É contraindicado criá-lo em MQL

Na minha opinião: ou ele deve ser criado pelos desenvolvedores de terminais ou fornecido por DLLs externas

 
Por que ele é necessário? Por que você precisa do Websocket e qual funcionalidade ele aprimora em relação ao MT comum. Você pode dar um exemplo de melhoria quantitativa ou qualitativa. Era assim, com o Websocket é assim. Muitas vezes mais rápido. Obrigado!
 

Você o testou em servidores públicos externos, especialmente com TLS? Seria ótimo ver um ou mais exemplos.

PS. Estou perguntando porque seu teste não funciona com wss://echo.websocket.org (estou anexando o log, BTW - por que você escreve informações tão volumosas e inúteis?) O ws puro (porta 80) funciona bem. No passado, também tentei executar minha implementação de WebSockets no MQL5, mas não consegui porque os soquetes do MQL têm algumas complexidades com a camada TLS. Parece que isso ainda não foi resolvido. E o wss é uma necessidade hoje em dia, porque todos os servidores de produção usam TLS e recusam conexões não seguras.

Arquivos anexados:
log.txt  1113 kb
 
Maxim Kuznetsov:

O WebSocket, mesmo em implementações normais, rápidas e corretas, é algo bastante caprichoso. Isso não deve ser feito em MQL

na minha opinião: ou ele deve aparecer dos desenvolvedores do terminal ou ser fornecido por DLLs externas.

Que absurdo.

Tudo funciona perfeitamente bem em MQL5.
 
Renat Fatkhullin:
Isso é besteira.

Tudo funciona perfeitamente em MQL5.

Não se trata de nenhuma bobagem sobre MQL. Havia problemas com o TLS (escrevi sobre eles no fórum, mas não esperei por uma solução) e ainda há. O exemplo do artigo não funciona. Anexei o registro ao artigo original em inglês.

Discussion of article "Websockets for MetaTrader 5"
Discussion of article "Websockets for MetaTrader 5"
  • 2020.11.25
  • www.mql5.com
New article Websockets for MetaTrader 5 has been published: Author: Francis Dube...
 
Renat Fatkhullin:
Isso é besteira.

Tudo funciona perfeitamente em MQL5.

Há um problema antigo no wss: na função padrão SocketIsReadable ()
É elementar contornar, mas sem essa função.

uint len = 1024; //SocketIsReadable(socket);


 
Roman:

Há um problema antigo no wss: na função padrão SocketIsReadable ()
Workaround é elementar, mas já sem essa função.

Há alguma justificativa para isso? Qual é o número mágico e por que ele seria adequado para uma mensagem de comprimento 256 ou 1500, por exemplo?

 
Roman:

Há um problema antigo no wss: na função padrão SocketIsReadable ()
A solução alternativa é elementar, mas já sem essa função

Você simplesmente não entende e não sabe como usar essa função.

Essa função fornece instantaneamente o número de bytes disponíveis no buffer de entrada e não informa se o soquete está ativo. A função é muito importante e permite que você não entre em espera síncrona, mas leia os dados parte por parte sem perder o controle sobre o programa.

E as funções TLS também estão corretas - elas são fornecidas para usuários treinados que sabem como e em que sequência usá-las. Elas não são para aqueles que "ligam e pronto".


Além disso, as funções socket e tls são, em sua forma pura, as mesmas que o terminal usa para conexões raw/tls/https. Ou seja, tudo funciona bem. Essas mesmas implementações funcionam em nossas soluções de alta carga.

As funções de rede brutas não são para iniciantes nem para uso ingênuo. É preciso entender suficientemente bem os princípios e as peculiaridades da interação de rede. E se estivermos falando de TLS, então os métodos e a sequência de processamento do processo de handshake.