Simple MT4 - Pont Java

 
Bonjour à tous,

Je suis un programmeur JAVA et j'utilise MT4 depuis un an. Bien que MQL soit très simple et facile à apprendre, certaines choses sont vraiment pénibles à coder dans ce langage. Il y a quelques semaines, j'ai pensé à une intégration simple de code logique écrit en Java dans mon EA Metatrader. J'ai cherché une solution sur Internet et sur ce forum et j'ai trouvé quelques outils intéressants (MT4-Java API https://forum.mql4.com/27050, Java Class to DLL converter, .... ) MAIS tous ont leurs avantages et inconvénients et j'ai donc décidé d'écrire ma propre intégration MT4-Java.

J'avais les quatre exigences MUST HAVE suivantes pour ma solution :

1. Installation simple
2. Capacités de débogage pour le code JAVA
3. Vitesse

4. Pas de communication réseau entre MT-Terminal et un autre processus


Une chose qui n'était pas importante pour moi, était la nécessité d'appeler les fonctions MT4 (indicateur, fonctions de trading) à partir de mon code Java. Pour l'analyse technique, j'utilise la bibliothèque open source de www.ta-lib.org et le traitement des ordres est toujours effectué dans le code MQL. Le code Java informe simplement le code MQL quand il est temps d'ACHETER ou de VENDRE.

Tout ce dont vous avez besoin est MetaTrader, une JVM installée (1.6) et le fichier ZIP joint qui contient le code MQL et la DLL pour le conteneur JVM.

Copier les fichiers du ZIP dans votre répertoire d'installation MT (garder la structure du répertoire) et éditer le fichier mt4j.properties et ajuster le chemin vers votre fichier jvm.dll. C'est tout pour exécuter l'EA mt4Sample.

L'implémentation de l'échantillon ne fait rien. C'est juste un squelette pour vous montrer ce qui est possible. Lisez les commentaires à l'intérieur des fichiers MT4BasicClient.java et SampleEA.java. Les sources JAVA se trouvent dans le fichier mt4jSample.jar. Votre propre classe doit implémenter l'interface MT4BasicClient ou doit étendre la classe AbstractBasicClient. N'oubliez pas d'ajouter le répertoire ou le fichier JAR contenant vos propres classes au classpath (voir mt4j.properties).

Vos classes Java sont chargées et exécutées par une JVM qui s'exécute à l'intérieur du processus du terminal. Cela vous donnera des performances optimales. J'ai fait quelques tests de performance et compté combien de fois processTick() a été exécuté pendant un backtest MT. La moyenne des appels par seconde était de 400.000 appels/seconde, ce qui me semble assez rapide pour mes besoins.

La JVM a été configurée pour créer un port de débogage à 8001 afin que vous puissiez utiliser votre IDE préféré et déboguer vos composants.

Toutes les ressources pour essayer mon petit pont MT4-Java sont jointes à ce post.

Amusez-vous bien :-)
Cyberflohr
Dossiers :
mt4j_v0.1.zip  17 kb
 

Joli. Merci. Cependant, je ne trouve pas https://forum.mql4.com/270509 - une erreur s'affiche. De même, pouvez-vous afficher votre code. Java et mt4 est quelque chose que je veux utiliser mais j'ai besoin de voir le code.

 

J'ai corrigé le lien : https://www.mql5.com/en/forum/121466

Vous pouvez trouver le code MQL et Java dans le fichier ZIP.

 

c'est un excellent outil

Je n'arrive pas à le faire fonctionner. Pouvez-vous m'aider ?

Quand j'exécute l'EA, mt4 se bloque.

J'utilise Windows 7 64bit, Java 7.0.1, MT4 ver4.00 build 409 25 oct 2011.

java est installé ici C:\jre\bin\client\jvm.dll

mt4 est installé ici C:\MT4\

Windows affiche le message d'erreur suivant

Signature du problème :

Nom de l'événement problématique : BEX

Nom de l'application : terminal.exe

Version de l'application : 4.0.0.409

Horodatage de l'application : 0028f000

Nom du module d'erreur : MSVCR100.dll

Version du module d'erreur : 10.0.30319.1

Horodatage du module d'erreur : 4ba1dbbe

Décalage d'exception : 0008ae6e

Code d'exception : c0000417

Données d'exception : 00000000

Version du système d'exploitation : 6.1.7601.2.1.0.256.1

Locale ID : 2057

Information supplémentaire 1 : a0db

Information supplémentaire 2 : a0db43c64a51ee21486e76f538ab825d

Information supplémentaire 3 : 5a50

Informations complémentaires 4 : 5a50e927a493324cabb3491f7239cdd1


Lisez notre déclaration de confidentialité en ligne :

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


Si la déclaration de confidentialité en ligne n'est pas disponible, veuillez lire notre déclaration de confidentialité hors ligne :

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

 
Désolé pour cette réponse tardive - mais je ne suis pas informé des nouveaux messages dans ce fil de discussion.


Il y a deux raisons possibles pour lesquelles votre terminal MT4 s'est planté

1. Vous utilisez une JVM 64bit

Cela ne fonctionnera pas, car MT4 est une application 32 bits. Vous devez installer une JVM 32 bits sur votre Win7-64 bits, qui peut être utilisée avec MT4.

La vérification de la version de la JVM ne doit pas indiquer "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

Jusqu'à présent, j'ai testé mon programme uniquement avec Java6. Peut-être y a-t-il des changements dans Java7 qui déclenchent le crash.

 

La nouvelle version 0.2 est disponible et corrige le crash du terminal ci-dessus.

Dossiers :
mt4j_v0.2.zip  17 kb
 

Salut cyberflohr,

Je suis novice en MT mais j'ai une certaine expérience de Java donc le bridge est un outil très intéressant pour moi. J'ai effectué toutes les étapes d'installation que vous avez mentionnées, mais je n'ai pas réussi à lancer l'exemple. J'ai obtenu ce qui suit dans le journal des experts :

20:53:13 mt4jSample EURUSD,H4 : chargé avec succès

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

20:53:17 mt4jSample EURUSD,H4 : cannot load library 'mt4j.dll'(error 126)

20:53:17 mt4jSample EURUSD,H4 : expert arrêté

20:53:17 mt4jSample EURUSD,H4 : initialisé

20:54:27 mt4jSample EURUSD,H4 : chargé avec succès

20:54:27 mt4jSample EURUSD,H4 : cannot load library 'mt4j.dll' (error 126)

20:54:27 mt4jSample EURUSD,H4 : expert arrêté

20:54:27 mt4jSample EURUSD,H4 : désinitialisé

20:54:27 mt4jSample EURUSD,H4 : désinitialisation raison 1

20:54:27 mt4jSample EURUSD,H4 : supprimé

Quelle peut être la cause de ce problème ?

 
white123right:

Salut cyberflohr,


20:53:17 mt4jSample EURUSD,H4 : cannot load library 'mt4j.dll' (error 126)


Quelle peut être la cause de ce problème ?

Bonjour

Si je comprends bien, l'erreur 126 signifie que MT4 ne peut pas trouver le fichier dll. En supposant que vous l'appelez par son nom correct, il doit principalement se trouver dans le dossier /experts/libraries/. Il peut être placé ailleurs, mais c'est le meilleur emplacement.

J'espère que cela vous aidera.

Salutations

Brooky

 

Bonjour Cyberflohr,

J'ai suivi vos instructions pour installer mt4jv0.2 et je n'ai pas eu d'erreur signalée dans la plateforme MT4. Cependant, à partir de SampleEA.java, je trouve qu'il y a une méthode qui semble être exécutée lors de l'initialisation de l'EA selon la description de MT4BasicClient.java.

code dans SampleEA.java :

@Override

public void init() {

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

}

description dans MT4BasicClient.java :

/**

* Appelé par le client MT4 pendant la phase d'init.

*/

D'après ces codes, je pense qu'il doit y avoir quelque chose à imprimer pendant l'initialisation. Mais je n'ai pas vu le message "init()" s'imprimer sur la plateforme MT4. Ai-je bien compris le code ?

En outre, pouvez-vous donner une autre démo pour placer un ordre ?

Merci beaucoup, j'apprécie vraiment votre code :D

 
brooky29:

Bonjour

D'après ce que je comprends, l'erreur 126 signifie que MT4 ne trouve pas le fichier dll. En supposant que vous l'appelez par son nom correct, il doit principalement se trouver dans le dossier /experts/libraries/. Il peut être placé ailleurs, mais c'est le meilleur emplacement.

J'espère que cela vous aidera.

Salutations

Brooky

correct - le mt4j.dll n'est pas dans le dossier libraries.

Par exemple, si votre dossier d'installation metatrader est c:\program files\metatrader, alors les fichiers pour la passerelle mt4j doivent se trouver aux emplacements suivants.

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 : vérifiez le fichier journal du pont pour plus d'informations sur l'erreur

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


 
limk0032:

Bonjour Cyberflohr,

J'ai suivi vos instructions pour installer mt4jv0.2 et je n'ai pas eu d'erreur signalée dans la plateforme MT4. Cependant, à partir de SampleEA.java, je trouve qu'il y a une méthode qui semble être exécutée lors de l'initialisation de l'EA selon la description dans MT4BasicClient.java.

code dans SampleEA.java :

@Override

public void init() {

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

}

description dans MT4BasicClient.java :

/**

* Appelé par le client MT4 pendant la phase d'init.

*/

D'après ces codes, je pense qu'il doit y avoir quelque chose à imprimer pendant l'initialisation. Mais je n'ai pas vu le message "init()" s'imprimer sur la plateforme MT4. Ai-je bien compris le code ?

En outre, pouvez-vous donner une autre démo pour placer un ordre ?

merci beaucoup, j'apprécie vraiment votre code :D

Malheureusement, écrire dans System.out / System.err n'affichera pas les messages dans votre terminal MT. Vous devez écrire vos messages dans un fichier (en utilisant java.io) ou utiliser un framework de logging java comme log4j ou slf4j.

Je vais préparer un exemple plus complexe qui fait quelques transactions dans les prochains jours.

Salutations,
cyberflohr