Bibliotecas: Trabalhando com soquetes em MQL5

 

Trabalhando com soquetes em MQL5:

Este exemplo irá mostrar como implementar uma transferência de ticks em tempo real do MetaTrader 5 para aplicações de servidores externos. O protocolo TCP é usado, ele permite transferir dados não apenas localmente, mas por toda internet.

A biblioteca Winsock2 (ws2_32.dll) é utilizada para trabalhar com soquetes. As chamadas diretas das funções da biblioteca é impossível, porque a linguagem MQL5 não permite trabalhar com ponteiros e passar estruturas de dados complexas como parâmetros de funções DLL. A biblioteca socket_mql5.dll, escrita em C++, é um intermediador, conectando o Expert Advisor e a biblioteca soquete.

A interação do MetaTrader5 com aplicação de servidores externos são mostrados na Fig. 1:

Esquema de interação com o terminal cliente MetaTrader 5

Autor: Andrey Voytenko

 

Muito obrigado!


 

Há algumas alterações e adições ao projeto. Peço a todos que já fizeram o download do arquivo do projeto que o atualizem.

 
Isso é apenas para um par de moedas, mas como implementá-lo para vários pares de moedas?
 
gisip:
... como fazer isso para vários pares de moedas?

Para fazer isso, o consultor de soquete deve ser colocado nos gráficos dos pares de moedas para os quais você deseja coletar informações de ticks.

Não é a solução mais elegante. Mas estou disposto a ouvir sugestões para aprimorar o projeto.

 
avoitenko:

Para fazer isso, o Expert Advisor de soquete deve ser colocado nos gráficos dos pares de moedas para os quais você deseja coletar informações de ticks.

Não é a solução mais elegante. Mas estou disposto a ouvir sugestões sobre como aprimorar o projeto.

Para o MT4, parece claro como - por meio do servidor DDE, mas como no MT5 eu pergunto a todos.

Talvez alguém tenha alguma ideia?

[Excluído]  
gisip:

Para o MT4, parece claro como - por meio do servidor DDE, mas como no MT5 eu pergunto a todos.

Alguém tem alguma ideia?

Tudo depende do grau de avanço do servidor, da complexidade do protocolo de rede e da tarefa a ser executada....

Primeiro, você precisa definir a tarefa e, em seguida, desenvolver um protocolo de rede (pode ser necessário elaborar a estrutura do banco de dados do servidor).

 
Interesting:

Tudo depende do grau de avanço do servidor, da complexidade do protocolo de rede e da tarefa a ser executada....

Primeiro você precisa definir a tarefa e, em seguida, desenvolver um protocolo de rede (talvez seja necessário elaborar a estrutura do banco de dados do servidor).

Sem nenhum truque, apenas um fluxo de cotações, tão primitivo quanto no MT4 por meio do servidor DDE.
 

Se você tiver paciência, terminarei o projeto de troca de dados do File Mapping. Ele será exatamente o que você precisa.

 
avoitenko:

Se você tiver paciência, terminarei o projeto de troca de dados do File Mapping. Ele será exatamente o que você precisa.

Terei de colocar um consultor em cada par que desejo receber dados?
 
gisip:
Terei de configurar um Expert Advisor para cada par sobre o qual desejo receber dados?

Ainda não fiz a transferência de cotações da mesma forma que o MT4 faz via DDE, porque o MT4 é um servidor de automação. Faço da seguinte maneira: o MT5 é um cliente e, se você quiser saber o current_prices, envia uma solicitação e obtém o resultado. Isso funciona para todos os pares de moedas ativos na janela de visualização do mercado.

Também é possível enviar todas as cotações em um lote nesse projeto. Por exemplo, em um Expert Advisor, em um cronômetro a cada segundo, receba dados e verifique, antes de enviar, se os novos dados não são semelhantes aos dados já enviados, para cada par de moedas, ou seja, uma alteração nos dados para Ask ou Bid será considerada um novo tique.