如何使用JAVA(或其他任何东西!)向MetaTrader Ternminal 4发送/接收数据

时间:2016-09-20 11:20:05

标签: java api algorithmic-trading mql4 metatrader4

我一直在研究算法(不是我的,我只是修改它),预测何时在外汇市场上买卖。我需要能够打开和关闭订单,动态更新订单参数(例如止损,最大停止等)并接收实时定时数据。

我已经研究了一个多星期,并没有成功。

我最接近的是使用JavoNetMt4 Api

我设法将DLL导入java并使用MQL4函数AccountBalance(),但是这已经返回0.0,这不是帐户余额,我搞乱了代码和MT4客户端上的设置,但仍然没有运气。

Q0:任何人都可以指出我正确的方向吗?

我是自动外汇交易的新手,但据我所知,有一个MT4服务器的经纪人,我在我的Windows机器上使用我的MT4客户端连接到该服务器。

Q1:如果是这种情况,我是否需要让API与服务器端而不是客户端一起工作?

到目前为止,我所尝试的所有这些DLL都已在我的机器上与MT4客户端软件一起使用。

我也在阅读FIX-Protocol和ZeroMQ。

Q2:这些可以帮助我以任何方式实现我的目标(而不是在JAVA和MT4 DLL之间建立一些桥梁)吗?

5 个答案:

答案 0 :(得分:5)

A0:是的,直接忘记REST和同步,阻止外汇交易领域的链

A1:好吧,不是一种典型的方式。 MetaTrader Server是Broker端的专有系统套件,他们的API未公开允许某些第三方集成。

enter image description here

A2: FIX-Protocol 是行业标准的LP接口通用语言。如果您与您的机构贸易提供商签订了合同关系,包括通过FIX协议GWY端口,这可以为您提供A级访问市场并集成您的交易工具。如果是这种情况,请忘记MT4工具,因为黄金时段节奏远远超出MT4终端本地主机处理架构(具有亚毫秒 TimeDOMAIN分辨率的多个事件是常见的,而MQL4不提供任何直接支持多线程并发/更好的并行程序调度设计)。 FIX-Protocol事件简单地偏离上图,远离左边,“之前”图表从第1 [ms]列开始。

ZeroMQ 可以帮助从MQL4限制中解放您的进一步设计。我想在分布式系统上阅读我的其他帖子,其中出现MQL4 / ZeroMQ / ML-AI预测器/ GPU处理基础设施。

反正:

  

享受 MQL4/MQL5

的狂野世界


感兴趣? May also like reading other MQL4ZeroMQ distributed processinglow-latency trading posts

答案 1 :(得分:0)

如果您需要在MT4和Java应用程序之间发送/接收同步消息,REST将是最佳方法,因为在这种情况下快速响应很重要。 ZeroMQ等Message Queue解决方案更适合异步解决方案,因此无法为您提供帮助。选择REST方法后,可以使用MQL4 WebRequest()来调用Java应用程序。

答案 2 :(得分:0)

我很自然地就在MT5平台上开始使用MQL5编写专家,并且我必须承认,随着应用程序复杂性的增加,管理该应用程序的难度很高。这不仅是由于缺少垃圾收集器而造成的,这当然会导致删除新实例,还因为Java提供了MQL5自然没有的一组强大的数据结构和语法。最后但并非最不重要的一点是,在谈论社区和可用的第三方库时,Java与MQL5之间的距离还很短。即如果我需要在Java端找到一个用于JSON转换的库,那么我会找到数十个正式和稳定的版本,在MQL5社区中,我只发现了自己需要修改的垃圾。

因此,在无数次尝试用MQL5编码我的专家(当然不是一个简单的尝试)之后,我决定采用一种根本的方法:对应用程序,客户端MQL5和服务器端Java进行编码,从而提供了MT5平台的Java门面。相同的API,相同的基本事件,等等。即使我不止一次地认为自己陷入了一条盲路,但我还是继续编码,最终做到了,获得了非常可靠的结果。 自然,REST接口会极大地降低性能,并且即使在同一本地主机上运行Tomcat和MT5的情况下,每个请求也都以毫秒为单位,而不是micros,但是另一方面,这仅降低了该体系结构的适用性,完全没有用。

诸如拼写法和各种高频交易之类的策略不适用于这种情况,反之,较长时期内的所有其他策略(即使是盘中策略)也可以成功实施而没有任何弊端。 最后但并非最不重要的一点是,不必使用WebRequest()MQL5方法来调用任何Servlet容器,可以从OS导入wininet.dll(谈论Windows),并且策略测试器将像策略已在MQL5中进行了编码,可能稍慢一些。 综上所述,我不会对外汇交易平台的Java Facade方法抱有讽刺意味,只引用裸露的表演而不对整个场景进行上下文描述是一种天真的方法。

答案 3 :(得分:0)

为了收集报价信息并打开,更新或关闭订单,您可以使用mt4服务器api。

请检查此网址。

http://mtapi.online/#overlappable-4

也许您会找到想要的东西。

然后我还有mt4服务器api。如有任何疑问,请及时更新。

答案 4 :(得分:0)

我自己寻找了类似的解决方案一段时间后,我知道从流行的编程语言访问MetaTrader的问题还没有以开发人员友好的方式解决。

因此,我们的团队向前迈了一步,为MetaTrader 5和MetaTrader 4平台创建了基于标准的MetaApi REST和websocket API。

我知道有些开发人员仍在寻找这样的解决方案,因此决定发布上述问题的答案。尽管问题很旧,但仍然没有发布合理的答案。

您可以在此处阅读MetaApi API文档:MetaAPI API documentation

MetaApi为某些流行的编程语言提供了SDKs,您可以为所选的编程语言轻松实现类似的API客户端/ SDK。

API旨在在交易终端(MT4和MT5具有相同的api)之间统一,并且易于使用。

MetaApi引入的延迟比典型的MetaTrader经纪人延迟低大约两个数量级。尽管您仍然必须考虑网络通信延迟。