简单的MT4 - Java桥 - 页 2

 

谢谢cyberflohr的回答。我还有一个问题。

在SampleEA中定义了一些预定义的方法,这些方法通过mt4j.dll与MT4相连。这些方法通过mt4j.dll链接到MT4。如果我想在SampleEA.java中添加我自己的方法,并希望它在MT4中被调用,我应该怎么做? 修改mt4j.dll?

cyberflohr:
不幸的是,写到System.out/System.err不会在MT终端显示信息。你必须把信息写到文件中(使用java.io)或使用java日志框架如log4j或slf4j。

我将在未来几天准备一个更复杂的例子,做一些交易。

问候。
cyberflohr
 

你可以在你的类中添加你自己的set/get方法,例如:void setBuyPrice(double price), double getPrice(),但是添加带有可变参数 列表的方法是不可能的。

PS:如果你愿意,我可以添加对noargs方法的支持,这意味着你首先调用你的setter方法来准备你的实例对象的数据,然后调用noargs方法来开始处理--无论你想要什么。

 

对noargs方法(void someMethod())的支持将是非常方便的。因为这将改善传输数据和控制 运行数据的分离。


请注意。

 

嗨,cyberflohr。

很好的工具。我有一个问题。

如果我想公开我自己的公共java api以从MT4调用,我如何重新生成mt4j.dll?

谢谢。

谢谢!

Regards,

塔玛斯

 

你好,CyberFlohr,非常感谢你的MT4 Java桥。我对MT4J.dll实现内容的一些特征很感兴趣,我想为我开发自己的DLL提供一个起点,因为我想在API中添加一些可用的技术功能


谢谢。

耶稣

 

你好,Cyberflohr。

我按照您的指示安装了mt4jv0.2,在MT4平台上没有得到任何错误报告。然而,从SampleEA.java中我发现,根据MT4BasicClient.java中的描述,有一个方法似乎在EA初始化时运行

SampleEA.java中的代码。

@Override

public void init() {

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

}

MT4BasicClient.java中的描述。Beats by Dr. Dre Solo

/**

* 在初始阶段由MT4客户端调用。

*/

从这些代码中,我认为在初始化时应该有一些东西被打印出来。但我没有看到 "init() "信息被打印在MT4平台上。我对这段代码的理解是否正确?

此外,你能给另一个演示来下单吗?

非常感谢你,我非常欣赏你的代码。

 

有没有人在发送双倍值时做过一些严格的测试?


我尝试了几种方法来发送一个双倍值,然后再接收同样的值,但都没有成功。发送到Java环境中是成功的(因为我已经在java端调试了接收的值),但在MT环境中接收相同的值却失败。


在打印收到的值时,显示出如下的输出。


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


有人遇到过同样的情况吗?似乎进行实际传输的dll没有正确处理双倍类型的传输。



提前感谢。

 
pivotpoint:

有没有人在发送双倍值时做过一些严格的测试?


我尝试了几种方法来发送一个双倍值,然后再接收同样的值,但没有任何成功。发送到Java环境中是成功的(因为我已经在java端调试了接收的值),但在MT环境中接收相同的值却失败了。


在打印收到的值时,显示出如下的输出。


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


有人遇到过同样的情况吗?好像是做实际传输的dll没有正确处理双倍类型的传输。



提前感谢。

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

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

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

}


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

 
fasdfwesdgwe:

你好,Cyberflohr。

我按照您的指示安装了mt4jv0.2,在MT4平台上没有得到任何错误报告。然而,从SampleEA.java中我发现,根据MT4BasicClient.java中的描述,有一个方法似乎在EA初始化时运行

SampleEA.java中的代码。

@Override

public void init() {

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

}

MT4BasicClient.java中的描述。Beats by Dr. Dre Solo

/**

* 在初始阶段由MT4客户端调用。

*/

从这些代码中,我认为在初始化时应该有一些东西被打印出来。但我没有看到 "init() "信息被打印在MT4平台上。我对这段代码的理解是否正确?

此外,你能给另一个演示来下单吗?

非常感谢你,我非常欣赏你的代码。

我在之前的帖子中已经写过,没有办法将写到System.out/err的信息重定向到MT4平台上。请使用日志框架(log4j,slfj)将你的信息写入文件中。
要将写入System.out的消息重定向到文件,只需在MT4BasicClient.java类中添加以下静态初始化代码。

static {
try {
System.setOut(new PrintStream(new FileOutputStream("c:\temp\mt4j.log",true))。
} catch (FileNotFoundException e) {
e.printStackTrace()。
}
}
 
cyberflohr:
我在之前的文章中已经写过,没有办法将写到System.out/err的信息重定向到MT4平台。请使用日志框架(log4j,slfj)将信息写入文件。
要将写入System.out的消息重定向到文件,只需在MT4BasicClient.java类中添加以下静态初始化代码。

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


下面是另一个重定向的例子。


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


这将很好地记录你所有的控制台和错误记录。