简单的MT4 - Java桥 - 页 3

 
cyberflohr:
你是否使用了正确的获取方法 - getDoubleProperty(jCtx, "DoublePropertyName") ?

我已经用双倍值验证了样本mt4jSAmple.mq4,它可以工作。

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

}


也许是浮动值本身的问题,浮动值是什么?

环境

========

> MT4.00 build 418

> Java运行时间:C:\Program Files (x86)\Java\jre6\bin\client\jvm.dll

java版本 "1.6.0_31"
Java(TM) SE运行环境(构建1.6.0_31-b05)。

Java HotSpot(TM)客户端虚拟机(构建20.6-b01,混合模式,共享)。



包含MT4。

==========

#import "mt4j.dll" (导入)。

double getDoubleProperty(int jctx, stringproperty);

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

#import


Java实现。

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

私有doublePropertySample。


public double getDoublePropertySample() {

返回 this.doublePropertySample;

}

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



以下是运行的代码:

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

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) 。


以下是终端日志中的几行。

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

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: 载入成功
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


希望你能在上面看到一些东西,因为我已经比较过很多次了(也许我忽略了什么)。

 
pivotpoint:

环境

========

> MT4.00 build 418

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

java版本 "1.6.0_31"
Java(TM) SE运行时环境(构建1.6.0_31-b05)。

Java HotSpot(TM) Client VM(build 20.6-b01,混合模式,共享)。



MT4包含。

==========

#import "mt4j.dll"

double getDoubleProperty(int jctx, string property)。

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

##进口


Java实现:

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

私有 doublePropertySample;


public double getDoublePropertySample() {

返回 this.doublePropertySample;

}

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



以下是运行的代码:

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

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("双倍数比较测试",send_test_double == received_test_double)。


以下是终端日志中的几行。

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

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:加载成功
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: 双重比较测试1


希望你能在上面看到一些东西,因为我已经比较过很多次了(也许我忽略了什么)。



或者你是否碰巧有其他增强功能的软件更新版本?我目前使用的是v2版的dll。
 

嗨,pivotpoint。

我已经用我的MT build 409测试了你的代码,它可以工作。

06:37:18 mt4jSample EURUSD,H4: Double Send (as is) -8008.1235
06:37:18 stdlib EURUSD,H4:加载成功
06:37:18 mt4jSample EURUSD,H4: 双重发送测试 -8008.1234567891197003
06:37:18 mt4jSample EURUSD,H4: Double Received (as is) -8008.1235
06:37:18 mt4jSample EURUSD,H4: Double Received Test -8008.1234567891197003

06:37:18 mt4jSample EURUSD,H4: Double Comparison Test 1


尽管如此,我还是搜索了一下,发现了一个有趣的帖子。似乎你所使用的版本(418)有一些严重的错误。

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


问候。

尹志强

 
新版本。V0.3

增加了对noargs void-method的支持。

MT4代码。

//在你的EA类中调用一个noargs void方法。
callNoArgsMethod(jCtx, "doSomething")。


问候。

cyberflohr

附加的文件:
mt4j_v0.3.zip  17 kb
 
brooky29:

你好

根据我的理解,错误126意味着MT4找不到dll文件。假设你用正确的名字调用它,它主要需要在/experts/libraries/文件夹中。它可以放在其他地方,但这是你的最佳位置。

希望这有帮助。

谢谢

布鲁克

事实上,经过几次测试和在外部论坛上的搜索,我发现当DLL找不到它的一个依赖项时,系统就会发布Error 126......我强烈建议使用dependence.exe工具来找出你的操作系统中缺少的DLL依赖项。
 

你好。

我在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.

对我来说,这看起来是构建时遇到了api的问题。

如果我们升级到较新的MT版本,会不会再次遇到同样的问题?


谢谢


 

你好。

我有一个加载mt4jSample.jar的问题。我在SampleEA.java中添加了一些需要外部jar文件的代码,但是在我重新打包了mt4jSample.jar 之后,系统似乎不承认或者找不到这些外部jar文件。

新的SampleEA.java在Eclipse中工作正常,但在MetaTrader 4中却不能工作,如果我删除那些调用外部jar文件的代码并重新打包,mt4jSample.jar就能正常工作。

你能告诉我,我应该在哪里为这些外部jar文件定义或设置类的路径吗?我试过mt4j.properties,但没有用。

非常感谢

 
javaelf:

你好。

我有一个加载mt4jSample.jar的问题。我在SampleEA.java中添加了一些需要外部jar文件的代码,但是在我重新打包了mt4jSample.jar 之后,系统似乎不承认或者找不到这些外部jar文件。

新的SampleEA.java在Eclipse中工作正常,但在MetaTrader 4中却不能工作,如果我删除那些调用外部jar文件的代码并重新打包,mt4jSample.jar就能正常工作。

你能告诉我,我应该在哪里为这些外部jar文件定义或设置类的路径吗?我试过mt4j.properties,但没有效果。

非常感谢

本论坛是关于mql4编码的 . . .
 
RaptorUK:
本论坛是关于mql4编码的 . . .

谢谢,但正如我在帖子中提到的,我在Eclipse中运行时没有问题,但在MetaTrader4中却有问题。不知道MQL4或MetaTrader4应该在哪里配置类的路径。
 
javaelf:

你好。

我有一个加载mt4jSample.jar的问题。我在SampleEA.java中添加了一些需要外部jar文件的代码,但是在我重新打包了mt4jSample.jar 之后,系统似乎不承认或者找不到这些外部jar文件。

新的SampleEA.java在Eclipse中工作正常,但在MetaTrader 4中却不能工作,如果我删除那些调用外部jar文件的代码并重新打包,mt4jSample.jar就能正常工作。

你能告诉我,我应该在哪里为这些外部jar文件定义或设置类的路径吗?我试过mt4j.properties,但没有效果。

非常感谢

mt4j.properties 是扩展classpath的正确位置,即

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


cyberflohr