Puente simple MT4 - Java

 
Hola a todos,

Soy programador de JAVA y uso MT4 desde hace un año. Aunque MQL es muy simple y fácil de aprender, algunas cosas son realmente dolorosas para codificar en este lenguaje. Hace unas semanas pensé en una simple integración de código lógico escrito en Java en mi metatrader EA. Busqué en internet y en este foro una solución y encontré algunas herramientas interesantes (MT4-Java API https://forum.mql4.com/27050, Java Class to DLL converter, ... ) PERO todas tienen sus pros y sus contras y por eso decidí escribir mi propia integración MT4-Java.

Tenía los siguientes cuatro requisitos MUST HAVE para mi solución:

1. Instalación simple
2. Capacidades de depuración para el código JAVA
3. Velocidad

4. No hay comunicación de red entre MT-Terminal y otro proceso


Una cosa que no era importante para mí, era la necesidad de llamar a las funciones de MT4 (indicador, funciones de trading) desde mi código Java. Para el análisis técnico utilizo la librería de código abierto de www.ta-lib.org y el manejo de órdenes se sigue haciendo en el código MQL. El código Javacode simplemente informa al código MQL cuando es el momento de COMPRAR o VENDER.

Todo lo que necesitas es MetaTrader, una JVM instalada (1.6) y el archivo ZIP adjunto que contiene el código MQL y la DLL para el contenedor JVM.

Copiar los archivos del ZIP a su directorio de instalación de MT (mantener la estructura de directorios) y editar el archivo mt4j.properties y ajustar la ruta a su archivo jvm.dll. Esto es todo para ejecutar el EA mt4Sample.

La implementación de la muestra no hace nada. Es sólo un esqueleto para mostrar lo que es posible. Lea los comentarios dentro de los archivos MT4BasicClient.java y SampleEA.java. Las fuentes JAVA las puedes encontrar dentro del mt4jSample.jar. Tu propia clase debe implementar la interfaz MT4BasicClient o debe extender la clase AbstractBasicClient. No olvides añadir el directorio o archivo JAR con tus propias clases al classpath (ver mt4j.properties).

Tus clases Java son cargadas y ejecutadas por una JVM que se ejecuta dentro del Proceso del terminal. Esto le dará un rendimiento óptimo. Hice algunas pruebas de rendimiento y conté la frecuencia con la que processTick() se ejecutó durante un backtest de MT. El promedio de llamadas por segundo fue de 400.000 llamadas/segundo, que creo que es lo suficientemente rápido para mis necesidades.

La JVM fue configurada para crear un puerto de depuración en 8001 para que pueda utilizar su IDE favorito y depurar sus componentes.

Todos los recursos para probar mi pequeño puente MT4-Java están adjuntos a este post.

Diviértete :-)
Cyberflohr
Archivos adjuntos:
mt4j_v0.1.zip  17 kb
 

Muy bien. Gracias. Sin embargo, no puedo encontrar https://forum.mql4.com/270509 - muestra un error. También, puede usted por favor, publicar su código. Java y mt4 es algo que quiero usar pero necesito ver el código.

 

He corregido el enlace: https://www.mql5.com/en/forum/121466

Puedes encontrar el código MQL y Java en el archivo ZIP.

 

esta es una excelente herramienta

de alguna manera no puedo conseguir que funcione. puede usted ayudarme.

cuando ejecuto el EA se bloquea mt4

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

java se instala aquí C:\jre\bin\client\jvm.dll

mt4 se instala aquí C:\MT4\

windows da el siguiente mensaje de error

Firma del problema:

Nombre del evento del problema: BEX

Nombre de la aplicación: terminal.exe

Versión de la aplicación: 4.0.0.409

Marca de tiempo de la aplicación: 0028f000

Nombre del módulo de fallo: MSVCR100.dll

Versión del módulo de fallo: 10.0.30319.1

Marca de tiempo del módulo de fallo: 4ba1dbbe

Desplazamiento de la excepción: 0008ae6e

Código de excepción: c0000417

Datos de excepción: 00000000

Versión del sistema operativo: 6.1.7601.2.1.0.256.1

ID de localización: 2057

Información adicional 1: a0db

Información adicional 2: a0db43c64a51ee21486e76f538ab825d

Información adicional 3: 5a50

Información adicional 4: 5a50e927a493324cabb3491f7239cdd1


Lea nuestra declaración de privacidad en línea:

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


Si la declaración de privacidad en línea no está disponible, lea nuestra declaración de privacidad fuera de línea:

C:\Windows\system32\en-US\erofflps.txt

 
Perdón por el retraso en la respuesta, pero por alguna razón no se me notifican los nuevos mensajes en este hilo.


Hay dos posibles razones por las que su terminal MT4 se estrelló

1. Usted utiliza una JVM de 64 bits

Esto no funcionará, porque MT4 es una aplicación de 32 bits. Debes instalar una JVM de 32 bits en tu Win7-64bit, que pueda ser utilizada junto con MT4.

La comprobación de la versión de la JVM no debería mostrar "64 Bit"

C:\jre\bin\java -version

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

2. Java 7

Hasta ahora he probado mi programa sólo con Java6. Tal vez hay algunos cambios en Java7 que desencadenan la caída.

 

Ya está disponible la nueva versión 0.2 que arreglará el fallo de la terminal mencionado anteriormente.

Archivos adjuntos:
mt4j_v0.2.zip  17 kb
 

Hola cyberflohr

Soy novato en MT pero tengo algo de experiencia con Java así que el puente es una herramienta muy interesante para mí. He realizado todos los pasos de instalación que has mencionado, pero no he podido lanzar el ejemplo. Tengo lo siguiente en el registro de expertos:

20:53:13 mt4jSample EURUSD,H4: cargado con éxito

20:53:13 mt4jSample EURUSD,H4 entradas: IntProperty=99; BoolProperty=true; DoubleProperty=1.23; StringProperty="helloWorld";

20:53:17 mt4jSample EURUSD,H4: no se puede cargar la biblioteca 'mt4j.dll'(error 126)

20:53:17 mt4jSample EURUSD,H4: experto detenido

20:53:17 mt4jSample EURUSD,H4: inicializado

20:54:27 mt4jSample EURUSD,H4: cargado con éxito

20:54:27 mt4jSample EURUSD,H4: no se puede cargar la biblioteca 'mt4j.dll' (error 126)

20:54:27 mt4jSample EURUSD,H4: experto detenido

20:54:27 mt4jSample EURUSD,H4: deinitialized

20:54:27 mt4jSample EURUSD,H4: uninit razón 1

20:54:27 mt4jSample EURUSD,H4: eliminado

¿Cuál puede ser la causa del problema?

 
white123right:

Hola cyberflohr


20:53:17 mt4jSample EURUSD,H4: no se puede cargar la biblioteca 'mt4j.dll' (error 126)


¿Cuál puede ser la causa del problema?

Hola

El error126 a mi entender significa que MT4 no puede encontrar el archivo dll. Asumiendo que lo estás llamando por su nombre correcto, debe estar principalmente en la carpeta /experts/libraries/. Puede ir en otro lugar, pero esta es su mejor ubicación.

Espero que esto ayude.

Saludos

Brooky

 

Hola Cyberflohr,

Seguí tus instrucciones para instalar el mt4jv0.2 y no obtuve ningún error en la plataforma MT4. Sin embargo, desde el SampleEA.java encuentro que hay un método que parece ser ejecutado cuando la inicialización de EA de acuerdo con la descripción en MT4BasicClient.java

código en SampleEA.java:

@Override

public void init() {

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

}

descripción en MT4BasicClient.java:

/**

* Llamado por el cliente MT4 durante la fase de init.

*/

A partir de este código creo que debe haber algo que se imprima durante la inicialización, pero no he visto que el mensaje "init()" se imprima en la plataforma MT4. ¿He entendido bien el código?

Además, ¿puede dar otra demo para colocar una orden?

muchas gracias, realmente aprecio su código. :D

 
brooky29:

Hola

El error 126 significa que MT4 no puede encontrar el archivo dll. Asumiendo que lo estás llamando por su nombre correcto, necesita estar principalmente en la carpeta /experts/libraries/. Puede ir en otro lugar, pero esta es su mejor ubicación.

Espero que esto ayude.

Saludos

Brooky

correcto - el mt4j.dll no está en la carpeta de bibliotecas.

es decir: si su carpeta de instalación de metatrader es c:\program files\metatrader, entonces los archivos para el puente mt4j deben estar en las siguientes ubicaciones.

c:\program files\metatrader\experts\mt4jSample.ex4
c:\program files\metatrader\experts\mt4jSample.mq4
c:\program files\metatrader\experts\libraries\mt4j.dll
c:\program files\metatrader\experts\libraries\mt4j.properties
c:\program files\metatrader\experts\libraries\mt4jSample.jar

PS: compruebe el archivo de registro del puente para obtener más información sobre el error

c:\program files\metatrader\experts\files\mt4j.log


 
limk0032:

Hola Cyberflohr,

Seguí tus instrucciones para instalar el mt4jv0.2 y no obtuve ningún error en la plataforma MT4. Sin embargo, desde el SampleEA.java encuentro que hay un método que parece ser ejecutado cuando la inicialización de EA de acuerdo con la descripción en MT4BasicClient.java

código en SampleEA.java:

@Override

public void init() {

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

}

descripción en MT4BasicClient.java:

/**

* Llamado por el cliente MT4 durante la fase de init.

*/

A partir de este código creo que debe haber algo que se imprima durante la inicialización, pero no he visto que el mensaje "init()" se imprima en la plataforma MT4. ¿He entendido bien el código?

Además, ¿puede dar otra demo para colocar una orden?

muchas gracias, realmente aprecio su código. :D

desafortunadamente escribir en System.out / System.err no mostrará los mensajes en tu terminal MT. debes escribir tus mensajes en un archivo (usando java.io) o usar un marco de registro java como log4j o slf4j.

Prepararé un ejemplo más complejo que haga algunas operaciones en los próximos días.

Saludos,
cyberflohr
Razón de la queja: