Einfache MT4-Java-Brücke - Seite 2

 

Danke cyberflohr für deine Antwort. Ich habe eine andere Frage.

Es gibt vordefinierte Methoden in SampleEA definiert, die mit Ihrem Beispiel kommen. Diese Methoden sind über die mt4j.dll mit MT4 verknüpft. Wenn ich meine eigene Methode zu SampleEA.java hinzufügen möchte und möchte, dass sie in MT4 aufgerufen wird, was soll ich tun? die mt4j.dll ändern?

cyberflohr:
Wenn Sie in System.out / System.err schreiben, werden leider 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
 

Sie können Ihre eigenen set/get Methoden zu Ihrer Klasse hinzufügen, z.B. void setBuyPrice(double price), double getPrice(), aber das Hinzufügen von Methoden mit einer variablen Parameterliste ist nicht möglich.

PS: Ich könnte Unterstützung für noargs-Methoden hinzufügen, wenn Sie wollen, d.h. Sie rufen zuerst Ihre Setter-Methoden auf, um Ihr Instanzobjekt mit Daten vorzubereiten, und rufen dann die noargs-Methode auf, um die Verarbeitung zu starten - was immer Sie wollen.

 

Die Unterstützung von noargs-Methoden (void someMethod()) wäre sehr praktisch. Dies würde die Trennung zwischen der Übertragung der Daten und der Kontrolle der darauf ausgeführten Operationen verbessern.


Mit freundlichen Grüßen,

 

Hallo cyberflohr,

ausgezeichnetes Werkzeug. Ich habe eine Frage:

Wie kann ich mt4j.dll neu generieren, wenn ich meine eigene öffentliche Java-Api zum Aufruf von MT4 bereitstellen möchte?

Vielen Dank!

Vielmals!

Mit freundlichen Grüßen,

Tamas

 

Hallo CyberFlohr, vielen Dank für diese MT4 Java Bridge. Ich bin daran interessiert, einige Merkmale des Inhalts der MT4J.dll-Implementierung zu haben, ich würde gerne einen Ausgangspunkt für die Entwicklung meiner eigenen DLL haben, weil ich gerne einige technische Funktionen innerhalb der API zur Verfügung stellen würde.


Vielen Dank!

Jesus

 

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:Beats by Dr. Dre Solo

/**

* 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

 

Hat irgendjemand das Senden von Doppelwerten rigide getestet?


Ich habe mehrere Optionen ausprobiert, um einen Double-Wert zu senden und dann denselben zurückzubekommen, aber ohne Erfolg. Das Senden in die Java-Umgebung ist erfolgreich (da ich den empfangenen Wert auf der Java-Seite debuggt habe), aber der Empfang des gleichen Wertes zurück in die MT-Umgebung schlägt fehl.


Beim Drucken des empfangenen Wertes wird eine Ausgabe wie unten gezeigt:


2012.05.03 22:57:32 ATT - Java EURUSD,M5: Double rec : -1.#IND


Ist jemandem dasselbe Problem begegnet? Es scheint, als ob die DLL, die die eigentliche Übertragung durchführt, die Rückübertragung von Double-Typen nicht korrekt handhabt.



Vielen Dank im Voraus.

 
pivotpoint:

Hat irgendjemand das Senden von Doppelwerten rigide getestet?


Ich habe mehrere Optionen ausprobiert, um einen Double-Wert zu senden und dann denselben Wert zurückzubekommen, aber ohne Erfolg. Das Senden in die Java-Umgebung ist erfolgreich (da ich den empfangenen Wert auf der Java-Seite debuggt habe), aber der Empfang des gleichen Wertes zurück in die MT-Umgebung schlägt fehl.


Beim Drucken des empfangenen Wertes wird eine Ausgabe wie unten gezeigt:


2012.05.03 22:57:32 ATT - Java EURUSD,M5: Double rec : -1.#IND


Ist jemandem dasselbe Problem begegnet? Es scheint, als ob die DLL, die die eigentliche Übertragung durchführt, die Rückübertragung von Double-Typen nicht korrekt handhabt.



Vielen Dank im Voraus.

Verwenden Sie die richtige Getter-Methode - getDoubleProperty(jCtx, "DoublePropertyName") ?

Ich habe das Beispiel mt4jSAmple.mq4 mit Doppelwerten überprüft und es funktioniert.

setDoubleProperty(jCtx, "DoublePropertySample", DoubleProperty);
if (DoubleProperty != getDoubleProperty(jCtx, "DoublePropertySample")) {
Alert("Double wurde nicht korrekt gesetzt: " + getDoubleProperty(jCtx, "DoublePropertySample"));

}


Vielleicht liegt es am Float-Wert selbst, was ist der Float-Wert?

 
fasdfwesdgwe:

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:Beats by Dr. Dre Solo

/**

* 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

Wie ich bereits in einem früheren Posting geschrieben habe, gibt es keine Möglichkeit, die in System.out/err geschriebenen Nachrichten zurück zur MT4-Plattform zu leiten. Bitte verwenden Sie ein Logging-Framework (log4j,slfj), um Ihre Meldungen in eine Datei zu schreiben.
Um die in System.out geschriebenen Nachrichten in eine Datei umzuleiten, fügen Sie einfach den folgenden statischen Initialisierungscode in die Klasse MT4BasicClient.java ein:

static {
try {
System.setOut(new PrintStream(new FileOutputStream("c:\\temp\\mt4j.log",true));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
 
cyberflohr:
Wie ich bereits in einem früheren Posting geschrieben habe, gibt es keine Möglichkeit, die in System.out/err geschriebenen Nachrichten zurück zur MT4-Plattform zu leiten. Bitte verwenden Sie ein Logging-Framework (log4j,slfj), um Ihre Meldungen in eine Datei zu schreiben.
Um die in System.out geschriebenen Nachrichten in eine Datei umzuleiten, fügen Sie einfach den folgenden statischen Initialisierungscode in die Klasse MT4BasicClient.java ein:

static {
try {
System.setOut(new PrintStream(new FileOutputStream("c:\\temp\\mt4j.log",true));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}


Ein weiteres Beispiel für die Umleitung unten:


String out_filename = String.format("%s%s.log", "experts/logs/",this.getClass().getSimpleName());
String err_filename = String.format("%s%s_error.log", "experts/logs/",this.getClass().getSimpleName());

System.setOut(new PrintStream(out_filename));
System.setErr(new PrintStream(err_filename));


Damit wird die gesamte Konsolen- und Fehlerprotokollierung ordnungsgemäß durchgeführt.