Einfache MT4-Java-Brücke

 
Hallo an alle,

Ich bin ein JAVA-Programmierer und benutze MT4 seit einem Jahr. Obwohl MQL ist sehr einfach und leicht zu erlernen, einige Dinge sind wirklich schmerzhaft, in dieser Sprache zu codieren. Vor ein paar Wochen dachte ich über eine einfache Integration von in Java geschriebenem Logik-Code in meinen Metatrader EA nach. Ich suchte im Internet und in diesem Forum nach einer Lösung und fand einige interessante Tools (MT4-Java API https://forum.mql4.com/27050, Java Class to DLL converter, ... ) ABER alle haben ihre Vor- und Nachteile und so entschied ich mich, meine eigene MT4-Java-Integration zu schreiben.

Ich hatte die folgenden vier MUST HAVE Anforderungen für meine Lösung:

1. Einfache Installation
2. Debugging-Funktionen für JAVA-Code
3. Geschwindigkeit

4. Keine Netzwerkkommunikation zwischen MT-Terminal und einem anderen Prozess


Eine Sache, die für mich nicht wichtig war, war die Notwendigkeit, MT4-Funktionen (Indikatoren, Handelsfunktionen) aus meinem Java-Code heraus aufzurufen. Für die technische Analyse verwende ich die Open-Source-Bibliothek von www.ta-lib.org und das Orderhandling erfolgt weiterhin im MQL-Code. Der Javacode informiert den MQL-Code einfach darüber, wann es Zeit ist zu KAUFEN oder zu VERKAUFEN.

Alles was Sie benötigen ist MetaTrader, eine installierte JVM (1.6) und die beigefügte ZIP-Datei, die den MQL-Code und die DLL für den JVM-Container enthält.

Kopieren Sie die Dateien aus der ZIP-Datei in Ihr MT-Installationsverzeichnis (behalten Sie die Verzeichnisstruktur bei) und bearbeiten Sie die Datei mt4j.properties und passen Sie den Pfad zu Ihrer jvm.dll-Datei an. Das ist alles, um den mt4Sample EA auszuführen.

Die Beispielimplementierung tut nichts. Es ist nur ein Skelett, um Ihnen zu zeigen, was möglich ist. Lesen Sie die Kommentare in den Dateien MT4BasicClient.java und SampleEA.java. Die JAVA-Quellen finden Sie in der Datei mt4jSample.jar. Ihre eigene Klasse muss die MT4BasicClient-Schnittstelle implementieren oder die Klasse AbstractBasicClient erweitern. Vergessen Sie nicht, das Verzeichnis oder die JAR-Datei mit Ihren eigenen Klassen zum Klassenpfad hinzuzufügen (siehe mt4j.properties).

Ihre Java-Klassen werden von einer JVM geladen und ausgeführt, die innerhalb des Terminalprozesses läuft. Dadurch erhalten Sie eine optimale Leistung. Ich habe einige Leistungstests durchgeführt und gezählt, wie oft processTick() während eines MT-Backtests ausgeführt wurde. Die durchschnittlichen Aufrufe pro Sekunde betrugen 400.000 Aufrufe/Sekunde, was meiner Meinung nach schnell genug für meine Bedürfnisse ist.

Die JVM wurde so konfiguriert, dass sie einen Debug-Port auf 8001 erstellt, so dass Sie Ihre bevorzugte IDE verwenden und Ihre Komponenten debuggen können.

Alle Ressourcen, um meine kleine MT4-Java-Brücke auszuprobieren, sind an diesen Beitrag angehängt.

Viel Spaß :-)
Cyberflohr
Dateien:
mt4j_v0.1.zip  17 kb
 

Sehr schön. Danke. Allerdings kann ich https://forum.mql4.com/270509 nicht finden - es wird ein Fehler angezeigt. Können Sie bitte auch Ihren Code posten. Java und mt4 ist etwas, das ich verwenden möchten, sondern müssen den Code zu sehen.

 

Ich habe den Link korrigiert: https://www.mql5.com/en/forum/121466

Sie finden den MQL- und Java-Code in der ZIP-Datei.

 

dies ist ein ausgezeichnetes Werkzeug

irgendwie kann ich es nicht zum Laufen bringen. können Sie mir helfen.

wenn ich den EA ausführe, stürzt mt4 ab

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

java ist hier installiert C:\jre\bin\client\jvm.dll

mt4 ist hier installiert C:\MT4\

Windows gibt die folgende Fehlermeldung aus

Problem-Signatur:

Problem Ereignis Name: BEX

Name der Anwendung: terminal.exe

Version der Anwendung: 4.0.0.409

Zeitstempel der Anwendung: 0028f000

Name des Fehlermoduls: MSVCR100.dll

Fehlermodul-Version: 10.0.30319.1

Zeitstempel des Fehlermoduls: 4ba1dbbe

Ausnahme Offset: 0008ae6e

Ausnahmecode: c0000417

Ausnahmedaten: 00000000

Betriebssystem-Version: 6.1.7601.2.1.0.256.1

Gebietsschema-ID: 2057

Zusätzliche Informationen 1: a0db

Zusätzliche Informationen 2: a0db43c64a51ee21486e76f538ab825d

Zusätzliche Informationen 3: 5a50

Zusätzliche Informationen 4: 5a50e927a493324cabb3491f7239cdd1


Lesen Sie unsere Datenschutzerklärung online:

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


Wenn die Online-Datenschutzerklärung nicht verfügbar ist, lesen Sie bitte unsere Datenschutzerklärung offline:

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

 
Sorry für die verspätete Antwort - aber irgendwie werde ich nicht über neue Beiträge in diesem Thread benachrichtigt.


Es gibt zwei mögliche Gründe, warum Ihr MT4-Terminal abgestürzt ist

1. Sie verwenden eine 64bit JVM

Dies wird nicht funktionieren, da MT4 eine 32bit Anwendung ist. Sie müssen eine 32bit JVM auf Ihrem Win7-64bit installieren, die zusammen mit MT4 verwendet werden kann.

Die JVM-Versionsprüfung sollte nicht "64 Bit" anzeigen

C:\jre\bin\java -version

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

2. Java 7

Bis jetzt habe ich mein Programm nur mit Java6 getestet. Vielleicht gibt es in Java7 einige Änderungen, die den Absturz auslösen.

 

Eine neue Version 0.2 ist verfügbar, die den oben genannten Absturz des Terminals behebt.

Dateien:
mt4j_v0.2.zip  17 kb
 

Hallo cyberflohr,

ich bin MT-Neuling, habe aber einige Erfahrung mit Java, so dass die Bridge ein sehr interessantes Tool für mich ist. Ich habe alle Installationsschritte durchgeführt, die Sie erwähnt haben, konnte aber das Beispiel nicht starten. Ich habe folgendes im Expertenprotokoll:

20:53:13 mt4jSample EURUSD,H4: erfolgreich geladen

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

20:53:17 mt4jSample EURUSD,H4: kann die Bibliothek 'mt4j.dll' nicht laden(Fehler 126)

20:53:17 mt4jSample EURUSD,H4: Experte angehalten

20:53:17 mt4jSample EURUSD,H4: initialisiert

20:54:27 mt4jSample EURUSD,H4: erfolgreich geladen

20:54:27 mt4jSample EURUSD,H4: kann die Bibliothek 'mt4j.dll' nicht laden (Fehler 126)

20:54:27 mt4jSample EURUSD,H4: Experte gestoppt

20:54:27 mt4jSample EURUSD,H4: deinitialisiert

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

20:54:27 mt4jSample EURUSD,H4: entfernt

Was kann die Ursache für dieses Problem sein?

 
white123right:

Hallo cyberflohr,


20:53:17 mt4jSample EURUSD,H4: kann Bibliothek 'mt4j.dll' nicht laden (Fehler 126)


Was kann die Ursache für dieses Problem sein?

Hallo

Fehler 126 bedeutet nach meinem Verständnis, dass MT4 die dll-Datei nicht finden kann. Vorausgesetzt, Sie rufen sie mit dem richtigen Namen auf, muss sie sich in erster Linie im Ordner /experts/libraries/ befinden. Sie kann auch woanders liegen, aber dies ist der beste Ort.

Ich hoffe, das hilft Ihnen.

Vielen Dank

Brooky

 

Hallo Cyberflohr,

Ich habe Ihre Anleitung zur Installation von mt4jv0.2 befolgt und keine Fehlermeldung auf der MT4-Plattform erhalten. Allerdings aus der SampleEA.java finde ich, dass es eine Methode, die zu sein scheint, wenn die EA-Initialisierung nach der Beschreibung in MT4BasicClient.java ausgeführt werden

Code in SampleEA.java:

@Override

public void init() {

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

}

Beschreibung in MT4BasicClient.java:

/**

* Wird vom MT4-Client während der Init-Phase aufgerufen.

*/

Aus diesen Codes schließe ich, dass während der Initialisierung etwas ausgedruckt werden soll. Aber ich habe nicht gesehen, dass die "init()"-Meldung in der MT4-Plattform gedruckt wird. Habe ich den Code richtig verstanden?

Außerdem, können Sie eine andere Demo geben, um eine Bestellung zu platzieren?

Vielen Dank, ich schätze Ihren Code sehr :D

 
brooky29:

Hallo

Fehler 126 bedeutet nach meinem Verständnis, dass MT4 die dll-Datei nicht finden kann. Unter der Annahme, dass Sie sie mit dem richtigen Namen aufrufen, muss sie sich in erster Linie im Ordner /experts/libraries/ befinden. Sie kann auch woanders liegen, aber dies ist der beste Ort.

Ich hoffe, das hilft Ihnen.

Vielen Dank

Brooky

Richtig - die mt4j.dll befindet sich nicht im Bibliotheksordner.

D.h.: Wenn Ihr Metatrader-Installationsordner c:\Programmdateien\metatrader lautet, dann müssen sich die Dateien für die mt4j-Bridge an den folgenden Orten befinden.

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: überprüfen Sie die Bridge-Logdatei für weitere Informationen über den Fehler

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


 
limk0032:

Hallo Cyberflohr,

Ich habe Ihre Anleitung zur Installation von mt4jv0.2 befolgt und keine Fehlermeldung auf der MT4-Plattform erhalten. Jedoch von der SampleEA.java finde ich, dass es eine Methode, die zu sein scheint, wenn die EA-Initialisierung nach der Beschreibung in MT4BasicClient.java ausgeführt werden

Code in SampleEA.java:

@Override

public void init() {

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

}

Beschreibung in MT4BasicClient.java:

/**

* Wird vom MT4-Client während der Init-Phase aufgerufen.

*/

Aus diesen Codes schließe ich, dass während der Initialisierung etwas ausgedruckt werden soll. Aber ich habe nicht gesehen, dass die "init()"-Meldung in der MT4-Plattform gedruckt wird. Habe ich den Code richtig verstanden?

Außerdem, können Sie eine andere Demo geben, um eine Bestellung zu platzieren?

Vielen Dank, ich schätze Ihren Code sehr :D

Leider werden beim Schreiben in System.out / System.err keine Nachrichten in Ihrem MT-Terminal angezeigt. Sie müssen Ihre Nachrichten in eine Datei schreiben (mit java.io) oder ein Java Logging Framework wie log4j oder slf4j verwenden.

Ich werde in den nächsten Tagen ein komplexeres Beispiel vorbereiten, in dem einige Trades durchgeführt werden.

Grüße,
cyberflohr