MT4 simples - Ponte Java

 
Olá a todos,

Sou um programador JAVA e uso o MT4 desde um ano. Embora o MQL seja muito simples e fácil de aprender, algumas coisas são realmente dolorosas de codificar nesta linguagem. Há algumas semanas atrás, pensei em uma simples integração de código lógico escrito em Java no meu metatrader EA. Pesquisei na Internet e neste fórum por uma solução e encontrei algumas ferramentas interessantes (MT4-Java API https://forum.mql4.com/27050, Java Class to DLL converter, ... ) MAS todos têm seus prós e contras e por isso decidi escrever minha própria integração MT4-Java.

Eu tinha os seguintes quatro requisitos DEVIDO TER para minha solução:

1. Instalação simples
2. Capacidade de depuração para o código JAVA
3. Velocidade

4. Nenhuma comunicação em rede entre o MT-Terminal e outro processo


Uma coisa que não era importante para mim, era a necessidade de chamar as funções MT4 (indicador, funções comerciais) de dentro do meu código Java. Para análise técnica, utilizo a biblioteca de código aberto de www.ta-lib.org e o tratamento de pedidos ainda é feito no código MQL. O Javacode simplesmente informa o código MQL quando é hora de COMPRAR ou VENDER.

Tudo o que você precisa é MetaTrader, um JVM instalado (1.6) e o arquivo ZIP anexado que contém o código MQL e a DLL para o recipiente JVM .

Copiar os arquivos do ZIP para seu diretório de instalação MT (manter a estrutura do diretório) e editar o arquivo mt4j.properties e ajustar o caminho para seu arquivo jvm.dll. Tudo isso para executar o mt4Sample EA.

A implementação da amostra não faz nada. É apenas um esqueleto para lhe mostrar o que é possível. Leia os comentários dentro dos arquivos MT4BasicClient.java e SampleEA.java. As fontes JAVA que você pode encontrar dentro do arquivo mt4jSample.jar. Sua própria classe deve implementar a interface MT4BasicClient ou deve estender a classe AbstractBasicClient. Não se esqueça de adicionar o diretório ou arquivo JAR com suas próprias classes ao classpath (veja mt4j.properties).

Suas classes Java são carregadas e executadas por um JVM que roda dentro do processo do terminal. Isto lhe dará um ótimo desempenho. Eu fiz alguns testes de desempenho e contei com que freqüência o processTick() foi executado durante um backktest MT. A média de chamadas por segundo foi de 400.000 chamadas/segundo, o que eu acho que é rápido o suficiente para minhas necessidades.

A JVM foi configurada para criar uma porta de depuração no 8001 para que você possa usar sua IDE favorita e depurar seus componentes.

Todos os recursos para experimentar minha pequena ponte MT4-Java estão anexados a este post.

Divirta-se :-)
Cyberflohr
Arquivos anexados:
mt4j_v0.1.zip  17 kb
 

Legal. Obrigado. No entanto, não consigo encontrar https://forum.mql4.com/270509 - mostra um erro. Além disso, você pode, por favor, postar seu código. Java e mt4 é algo que eu quero usar, mas preciso ver o código.

 

Eu corrigi o link: https://www.mql5.com/en/forum/121466

Você pode encontrar o código MQL e Java no arquivo ZIP.

 

esta é uma excelente ferramenta

de alguma forma, não consigo fazer com que funcione. pode me ajudar.

quando eu dirijo a EA, ela cai mt4

Estou usando janelas 7 64bit, Java 7.0.1, MT4 ver4.00 build 409 25 oct 2011

java está instalado aqui C:|jre|bin_client|jvm.dll

mt4 está instalado aqui C:\MT4

fornece a seguinte mensagem de erro

Assinatura do problema:

Nome do Evento Problema: BEX

Nome da Aplicação: terminal.exe

Versão de aplicação: 4.0.0.409

Timestamp de aplicação: 0028f000

Nome do Módulo de Falha: MSVCR100.dll

Versão do Módulo de Falhas: 10.0.30319.1

Módulo de Falha Timestamp: 4ba1dbbe

Compensação de Exceção: 0008ae6e

Código de Exceção: c0000417

Dados de Exceção: 00000000

Versão do SO: 6.1.7601.2.1.0.256.1

ID local: 2057

Informações adicionais 1: a0db

Informações adicionais 2: a0db43c64a51ee21486e76f538ab825d

Informações adicionais 3: 5a50

Informações adicionais 4: 5a50e927a493324cabb3491f7239cdd1


Leia nossa declaração de privacidade on-line:

http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409


Se a declaração de privacidade on-line não estiver disponível, favor ler nossa declaração de privacidade off-line:

C:\system32en-US-erofflps.txt

 
Desculpe pelo atraso na resposta - mas de alguma forma não serei notificado sobre novos posts neste tópico.


Há duas razões possíveis para a queda de seu terminal MT4

1. Você usa uma JVM de 64 bits

Isto não vai funcionar, porque o MT4 é uma aplicação de 32bit. Você deve instalar um JVM de 32bit em seu Win7-64bit, que pode ser usado junto com o MT4.

A verificação da versão JVM não deve mostrar "64 Bit"

C:\jre\bin\bin\java -versão

Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) 64-Bit Server VM (build 20.5-b03, modo misto)

2. Java 7

Até agora, eu testei meu programa apenas com Java6. Talvez haja algumas mudanças no Java7 que desencadeiam o crash.

 

A nova versão 0.2 está disponível, o que irá corrigir a falha do terminal acima.

Arquivos anexados:
mt4j_v0.2.zip  17 kb
 

Olá cyberflohr,

Sou novato em MT, mas tenho alguma experiência com Java, então a ponte é uma ferramenta muito interessante para mim. Realizei toda a etapa de instalação que você mencionou, mas não fui capaz de lançar o exemplo. Fui seguido no registro de especialistas:

20:53:13 mt4jSample EURUSD,H4: carregado com sucesso

20:53:13 mt4jSamostra EURUSD,H4 entradas: IntProperty=99; BoolProperty=true; DoubleProperty=1,23; StringProperty="helloWorld";

20:53:17 mt4jSample EURUSD,H4: não pode carregar a biblioteca 'mt4j.dll'(erro 126)

20:53:17 mt4jAmostra EURUSD,H4: Perito parado

20:53:17 mt4jAmostra EURUSD,H4: Inicializado

20:54:27 mt4jAmostra EURUSD,H4: carregado com sucesso

20:54:27 mt4jSample EURUSD,H4: não pode carregar a biblioteca 'mt4j.dll' (erro 126)

20:54:27 mt4jSamostra EURUSD,H4: Perito parado

20:54:27 mt4jSamostra EURUSD,H4: desinicializada

20:54:27 mt4jSamostra EURUSD,H4: razão uninit 1

20:54:27 mt4jSamostra EURUSD,H4: retirada

Qual pode ser a causa do problema?

 
white123right:

Olá cyberflohr,


20:53:17 mt4jSample EURUSD,H4: não pode carregar a biblioteca 'mt4j.dll' (erro 126)


Qual pode ser a causa do problema?

Hi

Oerro 126, ao meu entender, significa que o MT4 não consegue encontrar o arquivo dll. Supondo que você esteja chamando-o pelo seu nome correto, ele precisa estar principalmente na pasta /experts/libraries/. Ele pode ir para outro lugar, mas esta é sua melhor localização.

Espero que isto ajude.

Abraço

Brooky

 

Olá Cyberflohr,

Eu segui as instruções para instalar o mt4jv0.2 e não recebi nenhum erro relatado na plataforma MT4. Entretanto, a partir do SampleEA.java descubro que existe um método que parece ser executado quando a inicialização da EA de acordo com a descrição no MT4BasicClient.java

código em SampleEA.java:

@Override

vazio público init() {

System.out.println("init()");

}

descrição em MT4BasicClient.java:

/**

* Chamado pelo cliente MT4 durante a fase init.

*/

A partir destes códigos acho que deve haver algo a ser impresso durante a inicialização. mas U não viu a mensagem "init()" ser impressa na plataforma MT4. Eu entendi o código corretamente?

Além disso, você pode dar outra demonstração para fazer um pedido?

muito obrigado, eu realmente aprecio seu código. :D

 
brooky29:

Hi

O erro 126, ao meu entender, significa que o MT4 não consegue encontrar o arquivo dll. Supondo que você esteja chamando-o pelo seu nome correto, ele precisa estar principalmente na pasta /experts/libraries/. Ele pode ir para outro lugar, mas esta é sua melhor localização.

Espero que isto ajude.

Abraço

Brooky

correto - a mt4j.dll não está na pasta das bibliotecas.

ou seja: se sua pasta de instalação do metatrader for c:\metatrader, então os arquivos para a ponte mt4j devem estar nos seguintes locais.


c:\i4jSample.ex4
c:\i4jSample.mq4
c:\i4jSample.mq4jSample.mq4jSample.mq4j. c:\i4jSample.mq4jSample.mq4j. c:\i4jSample.mq4jSample.mq4j.properties




c:\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas\fiscos de programas


 
limk0032:

Olá Cyberflohr,

Eu segui as instruções para instalar o mt4jv0.2 e não recebi nenhum erro relatado na plataforma MT4. Entretanto, a partir do SampleEA.java descubro que existe um método que parece ser executado quando a inicialização da EA de acordo com a descrição no MT4BasicClient.java

código em SampleEA.java:

@Override

vazio público init() {

System.out.println("init()");

}

descrição em MT4BasicClient.java:

/**

* Chamado pelo cliente MT4 durante a fase init.

*/

A partir destes códigos acho que deve haver algo a ser impresso durante a inicialização. mas U não viu a mensagem "init()" ser impressa na plataforma MT4. Eu entendi o código corretamente?

Além disso, você pode dar outra demonstração para fazer um pedido?

muito obrigado, eu realmente aprecio seu código. :D

infelizmente escrevendo para System.out / System.err não aparecerá mensagens em seu terminal MT. você deve escrever suas mensagens em um arquivo (usando java.io) ou usar uma estrutura de registro java como log4j ou slf4j.

Prepararei uma amostra mais complexa que fará algumas negociações nos próximos dias.

cumprimentos,
cyberflohr