socket para MQL5

 

Olá pessoal, 

 Preciso comunicar o EA com uma aplicação em java.

Pensei de cara em fazer da maneira rencomendada número 1 em aulas de Sistemas Operacionais (comunicação por arquivos sendo que ambos possuem a capacidade de receber um evento todas as vezes que o arquivo é alterado). Isso é bem eficiente mas não encontrei em Mql5 uma  forma de receber eventos com a atualização do arquivo, o que me obrigaria a fazer espera ocupada (descarto a possibilidade pela ineficiencia pois eu precisaria fazer em dezenas de arquivos).

Bom. Parti para a segunda recomendação mais popular: sockets. 

Mas ao ler nos fóruns muita gente reclama da estabilidade de algumas dlls para socket em mql5 e também de algumas terem comunicação apenas unidirecional. E eu preciso fazer ambas as direções. 

 

Aí vao minhas perguntas:

1) alguém sabe implementar um whatcher de arquivos em mql5 sem realizar espera ocupada?

2) alguém  conhece e usa alguma coisa para conectar via socket tcp algo que seja bidirecional para mql5, e confiável?

 

Agradeco a atenção pessoal!

 

Abraços 

 
humbertobrandao:

Olá pessoal, 

 Preciso comunicar o EA com uma aplicação em java.

Pensei de cara em fazer da maneira rencomendada número 1 em aulas de Sistemas Operacionais (comunicação por arquivos sendo que ambos possuem a capacidade de receber um evento todas as vezes que o arquivo é alterado). Isso é bem eficiente mas não encontrei em Mql5 uma  forma de receber eventos com a atualização do arquivo, o que me obrigaria a fazer espera ocupada (descarto a possibilidade pela ineficiencia pois eu precisaria fazer em dezenas de arquivos).

Bom. Parti para a segunda recomendação mais popular: sockets. 

Mas ao ler nos fóruns muita gente reclama da estabilidade de algumas dlls para socket em mql5 e também de algumas terem comunicação apenas unidirecional. E eu preciso fazer ambas as direções. 

 

Aí vao minhas perguntas:

1) alguém sabe implementar um whatcher de arquivos em mql5 sem realizar espera ocupada?

2) alguém  conhece e usa alguma coisa para conectar via socket tcp algo que seja bidirecional para mql5, e confiável?

 

Agradeco a atenção pessoal!

 

Abraços 

Olá Humberto, essa intercomunicação com seu sistema em java vc pode fazer de várias formas, das quais já experimentei a webrequests e arquivos e funcionou bem:

 

1- WebRequests (através de webservices da aplicação, no meu caso era python/django) - https://www.mql5.com/en/docs/network/webrequest

2- via arquivos mesmo, onde faz a verificaçao a cada tick, funciona bem se pretende apenas comprar ou vender a partir de um sistema interno, pra uma comunicação mais complexa

pode ficar um pouco lento, coloquei um código que fiz pra fazer isso há um tempo atrás que funcionou bem. 

3 - Via banco de dados MySQL , nunca testei mas parece funcionar bem e ser confiável  - https://www.mql5.com/en/articles/932

Documentation on MQL5: Common Functions / WebRequest
Documentation on MQL5: Common Functions / WebRequest
  • www.mql5.com
Common Functions / WebRequest - Reference on algorithmic/automated trading language for MetaTrader 5
Arquivos anexados:
 

Olá Humberto,

Concordo com o Rodrigo quanto à facilidade do WebRequest, mas acredito que não resolveria o problema pois também é uma solução por polling, além do fato de ter maior latência.

Realmente sockets e pipes já vi vários tipos de problemas, embora não seja algo inviável também. 

Entretanto, a maior parte dos programas de espelhamento de trades do MT5 utilizam polling de arquivos, por ser uma transferência rápida e robusta, e sem depender de DLLs.

Razão: