Einfache MT4-Java-Brücke - Seite 3

 
cyberflohr:
Verwendest du die richtige Getter-Methode - getDoubleProperty(jCtx, "DoublePropertyName") ?

Ich habe das Beispiel mt4jSAmple.mq4 mit Double-Werten überprüft und es funktioniert.

setDoubleProperty(jCtx, "DoublePropertySample", DoubleProperty);
if (DoubleProperty != getDoubleProperty(jCtx, "DoublePropertySample")) {
Alert("Double wasn't set correct: " + getDoubleProperty(jCtx, "DoublePropertySample"));

}


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

Umgebung

========

> MT4.00 build 418

> Java Runtime : C:\Program Files (x86)\Java\jre6\bin\client\jvm.dll

java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b05)

Java HotSpot(TM) Client VM (Build 20.6-b01, gemischter Modus, gemeinsame Nutzung)



MT4-Einbindung :

==========

#import "mt4j.dll"

double getDoubleProperty(int jctx, string property);

void setDoubleProperty(int jctx, string property, double value);

#import


Java-Implementierung :

==============

private doubleDoublePropertySample;


public double getDoublePropertySample() {

return this.doublePropertySample;

}

public void setDoublePropertySample(double doubleProperty) {
this.doublePropertySample = doubleProperty;
}



Folgender Code wird ausgeführt:

==============

double send_test_double = -8008.12345678912;

setDoubleProperty(pid, "DoublePropertySample",send_test_double);
double received_test_double = getDoubleProperty(pid, "DoublePropertySample");

Print("Double Send (as is) ",send_test_double);
Print("Double Send Test ",DoubleToStrMorePrecision(send_test_double,16));
Print("Double Received (as is) ",received_test_double);
Print("Double Received Test ",DoubleToStrMorePrecision(received_test_double,16));
Print("Double Comparison Test ",send_test_double == received_test_double);


Folgende Zeilen in der Terminalprotokollierung :

=======================

2012.05.10 00:55:55 ATT - Java EURUSD,M5: Double Send (as is) -8008.1235
2012.05.10 00:55:55 stdlib EURUSD,M5: erfolgreich geladen
2012.05.10 00:55:55 ATT - Java EURUSD,M5: Double Send Test -8008.1234567891197003
2012.05.10 00:55:55 ATT - Java EURUSD,M5: Double Received (as is) -1.#IND
2012.05.10 00:55:55 ATT - Java EURUSD,M5: Double Received Test -1.6627963145224000
2012.05.10 00:55:55 ATT - Java EURUSD,M5: Double Comparison Test 1


Hoffe du kannst etwas erkennen, da ich es schon mehrmals verglichen habe (vielleicht übersehe ich etwas).

 
pivotpoint:

Umgebung

========

> MT4.00 build 418

> Java Runtime : C:\Programme (x86)\Java\jre6\bin\client\jvm.dll

java version "1.6.0_31"
Java(TM) SE Laufzeitumgebung (Build 1.6.0_31-b05)

Java HotSpot(TM) Client VM (Build 20.6-b01, gemischter Modus, gemeinsame Nutzung)



MT4 Einbeziehung :

==========

#import "mt4j.dll"

double getDoubleProperty(int jctx, string property);

void setDoubleProperty(int jctx, string property, double value);

#import


Java-Implementierung :

==============

private doublePropertySample;


public double getDoublePropertySample() {

return this.doublePropertySample;

}

public void setDoublePropertySample(double doubleProperty) {
this.doublePropertySample = doubleProperty;
}



Der folgende Code wird ausgeführt:

==============

double send_test_double = -8008.12345678912;

setDoubleProperty(pid, "DoublePropertySample",send_test_double);
double received_test_double = getDoubleProperty(pid, "DoublePropertySample");

Print("Double Send (as is) ",send_test_double);
Print("Double Send Test ",DoubleToStrMorePrecision(send_test_double,16));
Print("Double Received (as is) ",received_test_double);
Print("Double Received Test ",DoubleToStrMorePrecision(received_test_double,16));
Print("Double Comparison Test ",send_test_double == received_test_double);


Folgende Zeilen in der Terminalprotokollierung :

=======================

2012.05.10 00:55:55 ATT - Java EURUSD,M5: Double Send (as is) -8008.1235
2012.05.10 00:55:55 stdlib EURUSD,M5: erfolgreich geladen
2012.05.10 00:55:55 ATT - Java EURUSD,M5: Doppelter Sendetest -8008.1234567891197003
2012.05.10 00:55:55 ATT - Java EURUSD,M5: Doppeltes Empfangen (wie vorhanden) -1.#IND
2012.05.10 00:55:55 ATT - Java EURUSD,M5: Doppelt erhaltener Test -1.6627963145224000
2012.05.10 00:55:55 ATT - Java EURUSD,M5: Doppelter Vergleichstest 1


Hoffe man kann etwas darauf erkennen, da ich es schon mehrfach verglichen habe (vielleicht übersehe ich etwas).



Oder haben Sie zufällig aktualisierte Versionen der Software mit anderen Erweiterungen zur Verfügung? Ich verwende derzeit die Version v2 der DLL.
 

Hallo pivotpoint,

ich habe deinen Code mit meinem MT build 409 getestet und er funktioniert.

06:37:18 mt4jSample EURUSD,H4: Doppeltes Senden (wie gehabt) -8008.1235
06:37:18 stdlib EURUSD,H4: erfolgreich geladen
06:37:18 mt4jSample EURUSD,H4: Doppelter Sendetest -8008.1234567891197003
06:37:18 mt4jSample EURUSD,H4: Double Received (wie gehabt) -8008.1235
06:37:18 mt4jSample EURUSD,H4: Doppelt erhaltener Test -8008.1234567891197003

06:37:18 mt4jSample EURUSD,H4: Doppelter Vergleichstest 1


Trotzdem habe ich mich umgesehen und ein interessantes Posting gefunden. Es scheint, dass die Version (418), die Sie verwenden, einige schwerwiegende Bugs hat.

https://www.mql5.com/en/forum/138657


Grüße,

cyberflohr

 
Neue Version: V0.3

Unterstützung für noargs void-method hinzugefügt.

MT4-Code:

// ruft eine noargs void-Methode in Ihrer EA-Klasse auf.
callNoArgsMethod(jCtx, "doSomething");


Grüße,

cyberflohr

Dateien:
mt4j_v0.3.zip  17 kb
 
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

Tatsächlich habe ich nach mehreren Tests und der Suche in externen Foren herausgefunden, dass der Fehler 126 vom System ausgegeben wird, wenn die DLL eine ihrer Abhängigkeiten nicht finden kann... ich empfehle dringend, das Tool depends.exe zu verwenden, um herauszufinden, welche DLL-Abhängigkeit auf Ihrem Betriebssystem fehlt.
 

Hallo,

Ich habe folgenden Fehler für MT build 432

2012.06.14 00:23:24 2011.09.26 20:00 mt4jSample EURUSD,H4: function 'addNewBar' call from dll 'mt4j.dll' critical error c0000005 at 6D8860FA.

Für mich sieht es so aus, als hätte der Build ein Problem mit der API.

Würden wir das gleiche Problem wieder treffen, wenn wir mit einem neueren MT-Build aktualisieren?


Vielen Dank


 

Hallo,

Ich habe ein Problem beim Laden der mt4jSample.jar. Ich habe ein paar Code in SampleEA.java hinzugefügt, die externe jar-Dateien erfordern, aber nachdem ich mt4jSample.jar neu verpackt das System scheint nicht erkannt oder kann nicht finden, wo diese externen jar-Dateien.

Die neue SampleEA.java funktioniert gut in Eclipse, aber nur nicht in MetaTrader 4, wenn ich den Code entfernt, die externe Jar-Dateien aufrufen und neu gepackt, mt4jSample.jar funktioniert gut.

Können Sie mir bitte sagen, wo ich den Klassenpfad für diese externen Jar-Dateien definieren oder festlegen sollte? Ich habe es mit mt4j.properties versucht, aber es funktioniert nicht.

Vielen Dank!

 
javaelf:

Hallo,

Ich habe ein Problem beim Laden der mt4jSample.jar. Ich habe ein paar Code in SampleEA.java hinzugefügt, die externe jar-Dateien erfordern, aber nachdem ich mt4jSample.jar neu verpackt das System scheint nicht erkannt oder kann nicht finden, wo diese externen jar-Dateien.

Die neue SampleEA.java funktioniert gut in Eclipse, aber nur nicht in MetaTrader 4, wenn ich den Code entfernt, die externe Jar-Dateien aufrufen und neu gepackt, mt4jSample.jar funktioniert gut.

Können Sie mir bitte sagen, wo ich den Klassenpfad für diese externen Jar-Dateien definieren oder festlegen sollte? Ich habe es mit mt4j.properties versucht, aber es funktioniert nicht.

Vielen Dank!

In diesem Forum geht es um mql4-Kodierung...
 
RaptorUK:
In diesem Forum geht es um mql4-Kodierung...

Danke, aber wie ich in dem Beitrag erwähnt, gibt es keine Probleme, wenn ich es in Eclipse laufen, aber hat Probleme in MetaTrader4. Nicht sicher, wo MQL4 oder MetaTrader4 sollte die Klasse Pfad konfigurieren.
 
javaelf:

Hallo,

Ich habe ein Problem beim Laden der mt4jSample.jar. Ich habe ein paar Code in SampleEA.java hinzugefügt, die externe jar-Dateien erfordern, aber nachdem ich mt4jSample.jar neu verpackt das System scheint nicht erkannt oder kann nicht finden, wo diese externen jar-Dateien.

Die neue SampleEA.java funktioniert gut in Eclipse, aber nur nicht in MetaTrader 4, wenn ich den Code entfernt, die externe Jar-Dateien aufrufen und neu gepackt, mt4jSample.jar funktioniert gut.

Können Sie mir bitte sagen, wo ich den Klassenpfad für diese externen Jar-Dateien definieren oder festlegen sollte? Ich habe es mit mt4j.properties versucht, aber es funktioniert nicht.

Vielen Dank!

mt4j.properties ist der richtige Ort, um den Klassenpfad zu erweitern, d.h.

jvmOption.1=-Djava.class.path=experts\libraries\mt4jSample.jar;experts\libraries\mylib.jar;c:\mylibs\mylib2.jar


cyberflohr