Semplice ponte MT4 - Java

 
Ciao a tutti,

Sono un programmatore JAVA e uso MT4 da un anno. Anche se MQL è molto semplice e facile da imparare, alcune cose sono davvero dolorose da codificare in questo linguaggio. Qualche settimana fa ho pensato ad una semplice integrazione dal codice logico scritto in Java nel mio EA metatrader. Ho cercato su internet e su questo forum una soluzione e ho trovato alcuni strumenti interessanti (MT4-Java API https://forum.mql4.com/27050, Java Class to DLL converter, ... ) MA tutti hanno i loro pro e contro e così ho deciso di scrivere la mia integrazione MT4-Java.

Avevo i seguenti quattro requisiti MUST HAVE per la mia soluzione:

1. Installazione semplice
2. Capacità di debugging per il codice JAVA
3. Velocità

4. Nessuna comunicazione di rete tra MT-Terminal e un altro processo


Una cosa che non era importante per me, era la necessità di chiamare le funzioni MT4 (indicatore, funzioni di trading) dall'interno del mio codice Java. Per l'analisi tecnica uso la libreria open source di www.ta-lib.org e la gestione degli ordini è ancora fatta nel codice MQL. Il Javacode informa semplicemente il codice MQL quando è il momento di COMPRARE o VENDERE.

Tutto ciò di cui avete bisogno è MetaTrader, una JVM installata (1.6) e il file ZIP allegato che contiene il codice MQL e la DLL per il contenitore JVM.

Copiare i file dallo ZIP alla vostra directory di installazione di MT (mantenere la struttura della directory) e modificare il file mt4j.properties e regolare il percorso del vostro file jvm.dll. Questo è tutto per eseguire l'EA mt4Sample.

L'implementazione Sample non fa nulla. È solo uno scheletro per mostrarvi cosa è possibile fare. Leggi i commenti all'interno dei file MT4BasicClient.java e SampleEA.java. I sorgenti JAVA si trovano all'interno del file mt4jSample.jar. La tua classe deve implementare l'interfaccia MT4BasicClient o estendere la classe AbstractBasicClient. Non dimenticare di aggiungere la directory o il file JAR con le tue classi al classpath (vedi mt4j.properties).

Le tue classi Java sono caricate ed eseguite da una JVM che gira all'interno del processo del terminale. Questo vi darà prestazioni ottimali. Ho fatto alcuni test di performance e ho contato quanto spesso processTick() è stato eseguito durante un backtest MT. La media delle chiamate al secondo era di 400.000 chiamate/secondo, che penso sia abbastanza veloce per le mie esigenze.

La JVM è stata configurata per creare una porta di debug a 8001 in modo da poter utilizzare il vostro IDE preferito e fare il debug dei vostri componenti.

Tutte le risorse per provare il mio piccolo ponte MT4-Java sono allegate a questo post.

Buon divertimento :-)
Cyberflohr
File:
mt4j_v0.1.zip  17 kb
 

Bello. Grazie. Tuttavia non riesco a trovare https://forum.mql4.com/270509 - mostra un errore. Inoltre, puoi per favore postare il tuo codice. Java e mt4 è qualcosa che voglio usare ma ho bisogno di vedere il codice.

 

Ho corretto il link: https://www.mql5.com/en/forum/121466

Potete trovare il codice MQL e Java nel file ZIP.

 

questo è uno strumento eccellente

in qualche modo non riesco a farlo funzionare. potete aiutarmi.

quando eseguo l'EA si blocca mt4

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

java è installato qui C:\jre\bin\client\jvm.dll

mt4 è installato qui C:\MT4\

windows dà il seguente messaggio di errore

Firma del problema:

Nome dell'evento problematico: BEX

Nome dell'applicazione: terminal.exe

Versione dell'applicazione: 4.0.0.409

Application Timestamp: 0028f000

Fault Module Name: MSVCR100.dll

Fault Module Version: 10.0.30319.1

Fault Module Timestamp: 4ba1dbbe

Exception Offset: 0008ae6e

Codice di eccezione: c0000417

Dati di eccezione: 00000000

Versione OS: 6.1.7601.2.1.0.256.1

ID locale: 2057

Informazioni aggiuntive 1: a0db

Informazioni aggiuntive 2: a0db43c64a51ee21486e76f538ab825d

Informazioni addizionali 3: 5a50

Informazioni aggiuntive 4: 5a50e927a493324cabb3491f7239cdd1


Leggi la nostra dichiarazione sulla privacy online:

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


Se l'informativa sulla privacy online non è disponibile, leggi la nostra informativa sulla privacy offline:

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

 
Scusa per la risposta ritardata - ma in qualche modo non vengo notificato sui nuovi post in questo thread.


Ci sono due possibili ragioni per cui il vostro terminale MT4 è andato in crash

1. Si usa una JVM a 64bit

Questo non funzionerà, perché MT4 è un'applicazione a 32bit. È necessario installare una JVM a 32bit sul vostro Win7-64bit, che può essere utilizzato insieme a MT4.

Il controllo della versione della JVM non dovrebbe mostrare "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

Finora ho testato il mio programma solo con Java6. Forse ci sono alcuni cambiamenti in Java7 che innescano il crash.

 

È disponibile la nuova versione 0.2 che risolve il suddetto crash del terminale.

File:
mt4j_v0.2.zip  17 kb
 

Ciao cyberflohr,

Sono alle prime armi con MT ma ho qualche esperienza con Java, quindi il ponte è uno strumento molto interessante per me. Ho eseguito tutti i passi di installazione che hai menzionato, ma non sono riuscito a lanciare l'esempio. Ho ottenuto quanto segue nel log degli esperti:

20:53:13 mt4jSample EURUSD,H4: caricato con successo

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

20:53:17 mt4jSample EURUSD,H4: impossibile caricare la libreria 'mt4j.dll'(errore 126)

20:53:17 mt4jSample EURUSD,H4: esperto fermato

20:53:17 mt4jSample EURUSD,H4: inizializzato

20:54:27 mt4jSample EURUSD,H4: caricato con successo

20:54:27 mt4jSample EURUSD,H4: impossibile caricare la libreria 'mt4j.dll' (errore 126)

20:54:27 mt4jSample EURUSD,H4: esperto fermato

20:54:27 mt4jSample EURUSD,H4: deinizializzato

20:54:27 mt4jSample EURUSD,H4: uninit reason 1

20:54:27 mt4jSample EURUSD,H4: rimosso

Quale può essere la causa del problema?

 
white123right:

Ciao cyberflohr,


20:53:17 mt4jSample EURUSD,H4: impossibile caricare la libreria 'mt4j.dll' (errore 126)


Quale può essere la causa del problema?

Ciao

L'errore 126 per quanto ne so significa che MT4 non riesce a trovare il file dll. Supponendo che tu lo stia chiamando con il suo nome corretto, deve essere principalmente nella cartella /experts/libraries/. Può andare altrove, ma questa è la posizione migliore.

Spero che questo aiuti.

Saluti

Brooky

 

Ciao Cyberflohr,

Ho seguito le tue istruzioni per installare la mt4jv0.2 e non ho ottenuto alcun errore segnalato nella piattaforma MT4. Tuttavia dal SampleEA.java trovo che c'è un metodo che sembra essere eseguito quando l'inizializzazione EA secondo la descrizione in MT4BasicClient.java

codice in SampleEA.java:

@Override

public void init() {

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

}

descrizione in MT4BasicClient.java:

/**

* Chiamato dal client MT4 durante la fase di init.

*/

Da questo codice penso che ci dovrebbe essere qualcosa da stampare durante l'inizializzazione, ma non ho visto il messaggio "init()" essere stampato nella piattaforma MT4. Ho capito bene il codice?

Inoltre, puoi dare un'altra demo per piazzare un ordine?

Grazie mille, apprezzo molto il tuo codice :D

 
brooky29:

Ciao

L'errore 126 per quanto ne so significa che MT4 non riesce a trovare il file dll. Supponendo che tu lo stia chiamando con il suo nome corretto, deve essere principalmente nella cartella /experts/libraries/. Può andare altrove, ma questa è la posizione migliore.

Spero che questo aiuti.

Saluti

Brooky

corretto - la mt4j.dll non è nella cartella libraries.

Cioè: se la cartella di installazione di Metatrader è c:\program files\metatrader, allora i file per il ponte mt4j devono essere nelle seguenti posizioni.

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: controllare il file di log del bridge per ulteriori informazioni sull'errore

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


 
limk0032:

Ciao Cyberflohr,

Ho seguito le tue istruzioni per installare la mt4jv0.2 e non ho ottenuto alcun errore segnalato nella piattaforma MT4. Tuttavia dal SampleEA.java trovo che c'è un metodo che sembra essere eseguito quando l'inizializzazione EA secondo la descrizione in MT4BasicClient.java

codice in SampleEA.java:

@Override

public void init() {

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

}

descrizione in MT4BasicClient.java:

/**

* Chiamato dal client MT4 durante la fase di init.

*/

Da questo codice penso che ci dovrebbe essere qualcosa da stampare durante l'inizializzazione, ma non ho visto il messaggio "init()" essere stampato nella piattaforma MT4. Ho capito bene il codice?

Inoltre, puoi dare un'altra demo per piazzare un ordine?

Grazie mille, apprezzo molto il tuo codice :D

sfortunatamente scrivere su System.out / System.err non mostrerà i messaggi nel vostro terminale MT. dovete scrivere i vostri messaggi su un file (usando java.io) o usare un framework di logging java come log4j o slf4j.

Preparerò un esempio più complesso che faccia alcuni trade nei prossimi giorni.

saluti,
cyberflohr