通过IP从Java发送订单到MT4

 

你好。

有没有办法从另一台电脑(运行Java应用程序)通过IP向MT4发送简单的订单(只是买入、卖出、关闭)?

不需要双向通信,只需要单向通信。

预先感谢。

 
Mariop: 有没有办法从另一台电脑(运行Java应用程序)通过IP向MT4发送简单的订单(只是买入、卖出、关闭)? 不需要双向通信,只需要单向的。

是的,但进程间通信的接口需要编码,因为它不是内置的东西。编码需要知识和经验,不是像你这样的初学者能够轻易解决的。

因此,请到自由职业者 部分,雇用有资格的人为你做这件事,但我怀疑这将是很便宜的。

 
:)谢谢你的回答。
然而,我认为我不是一个初学者,事实上,几年前我已经通过TradePlatform.NET用C#做了更复杂的事情,但这次我需要从一个Java程序中发送它们(订单)。 因此,如果有任何方法使MT4能够以我所问的方式接收订单,我仍在等待更有趣的答案。
 

我已经给了你最合适的答案!你可以使用网络上的文件作为通信方式。你总是可以使用网络上的文件作为通信方式,但这将是缓慢和麻烦的。

你问这个问题,说明就MetaTrader/MQL编程环境而言,你对MQL/MetaTrader的熟练程度相对较低。我这样说是因为如果您对MQL和WinAPI非常精通,您就会知道通过通道、命名管道、TCP/IP等的各种IPC解决方案。- 其中大部分是通过DLL库实现的,但不一定是这样。

 
从Java连接MT4的最简单(虽然不容易)的方法是使用套接字,在代码库和文章中有MQL的示例代码。
 
Ovo:
从Java连接MT4的最简单(虽然不容易)的方法是使用套接字,在代码库和文章中有MQL的示例代码。

我对Java几乎没有经验,但是,如果两台电脑在同一个本地网络上,那么命名管道--MQL4通过FileOpen()支持--可能是可能的,而且更简单。

http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java

 
jjc:

我对Java几乎没有经验,但是,如果两台电脑在同一个本地网络上,那么命名管道--MQL4通过FileOpen()支持--可能是可能的,而且更简单。

http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java

事实上,我对Java中的命名管道没有经验,但套接字在Java中非常普遍。此外,从你提供的链接来看,你不能从Java中创建命名的管道,而只能连接到现有的管道,而且他们只考虑进程间的连接,而不是网络解决方案(可能兼容也可能不兼容,不知道)。

 
jjc:

我对Java几乎没有经验,但是,如果两台电脑在同一个本地网络上,那么命名管道--MQL4通过FileOpen()支持--可能是可能的,而且更简单。

http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java


最初,两台计算机将在同一个局域网上,虽然通过互联网也能工作是很有趣的。但是,现在在同一个局域网上就足够了。


奥沃
从Java连接MT4的最简单(虽然不容易)的方法是使用套接字,在代码库和文章中有MQL的示例代码。


是的。我发现最好的解决方案似乎是使用mt4-zeromq,但仍然找不到一个例子显示如何使用它来执行交易。我认为这可能是最好的方法,因为它不会有任何延迟(?),而且它可以在Linux环境下使用,所以任何关于它的简单示例代码都会受到欢迎。

然而,我看到的主要问题仍然是延迟。当我开发了类似的东西,但方向相反(MT4与外部服务器互动),没有这样的问题,因为MT4市场点之间没有新的信息,但在这种情况下,我不知道MT4将如何能够在点之间接收订单(并执行它们)。这不会是一个问题吗?或者我错过了什么,这不会是一个问题?

 
Ovo:

实际上,我对Java中的命名管道没有经验,但套接字在Java中非常普遍。另外,从你提供的链接来看,你不能从Java中创建命名管道,只能连接到现有的管道,而且他们只考虑进程间的连接,而不是联网的解决方案(可能兼容也可能不兼容,不知道)。

"命名管道 "必须首先由MT4终端通过调用WinAPI函数来创建。只有这样,它才能被 JAVA 作为标准文件使用。这应该不是问题,因为这正是 OP 所希望的,但这只是局域网解决方案的理想选择。

另一方面,套接字是局域网和广域网解决方案的理想选择,但需要一个带有额外支持功能的WinAPI的DLL封装器,以使MT4更容易处理事情。

然而,操作者只需要 "让他的手指来操作",因为外面有大量可能的解决方案的信息。他只需选择最适合他的方法,无论是命名的点,映射的文件,套接字,或其他。
 
Mariop: 然而,我看到的主要问题仍然是延迟。当我开发类似的东西,但方向相反(MT4与外部服务器互动),没有这样的问题,因为在MT4市场点之间没有新的信息,但在这种情况下,我想不出MT4将如何能够在点之间接收订单(并执行它们)。这不会是一个问题吗?或者我错过了什么,这不会是一个问题?

通过使用OnTimer() 事件处理程序,它不依赖于传入的ticks!

Mariop:我发现最好的解决方案似乎是使用mt4-zeromq,但仍然找不到一个例子显示如何使用它来执行交易。

尽量不要依赖第三方库。只需编码你自己的DLL,并提供额外的支持功能,以方便处理MT4的事情。用C语言编写DLL,不要用C#,因为C#有依赖性,不如C语言高效。

同时设计出适合要求的自己的信息格式/协议。使其紧凑和高效,如果需要的话,你应该对其进行加密以保证安全。

 
FMIC:

尽量不要依赖第三方库。只需编码你自己的DLL,并提供额外的支持功能,以方便处理MT4的事情。用C语言编写DLL,不要用C#,因为C#有依赖性,不如C语言高效。

同时设计出适合要求的自己的信息格式/协议。使其紧凑和高效,如果需要的话,你应该对其进行加密以保证安全。

现在我们有了一个比你第一个答案更有趣的答案。我完全同意你的观点,这些都是非常好的建议。我几年前就放弃了MQL,因为我开发了自己的平台(我真的需要一些其他平台没有的特殊功能,这并不是因为我有心情花那么多时间去做)。现在我将开始与一个专门使用MT4的经纪商合作,所以我需要建立一个桥梁来连接到它。这就是为什么我急于让它尽快工作的原因。


FMIC

通过使用OnTimer() 事件处理程序,它不依赖于传入的ticks!


确实如此。谢谢。我不记得了。事实上,这并不能完全解决问题,因为我需要订单几乎立即执行(我想用这种方法我只能每秒钟检查一次,但至少不是每一个tick),但确实我可以用它轻松建立一个临时解决方案。

还是那句话,好建议;)