繁体   English   中英

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

[英]How to send/receive data to/from MetaTrader Ternminal 4 with JAVA (or anything!)

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

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

我得到的最接近的是使用JavoNetMt4 Api

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

Q0:谁能指出我正确的方向?

我是自动外汇交易的新手,但据我所知,某处有一家经纪商拥有 MT4 服务器,我使用 windows 机器上的 MT4 客户端连接到该服务器。

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

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

我也一直在阅读 FIX-Protocol 和 ZeroMQ。

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

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

A1:嗯,不是典型的方式。 MetaTrader Server 是经纪商端的一套专有系统,他们的 API 未公开以允许某些 3rd 方集成。

在此处输入图片说明

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

ZeroMQ可能有助于您的进一步设计从 MQL4 限制中解放出来 可能喜欢阅读我关于分布式系统的其他文章,其中出现了 MQL4 / ZeroMQ / ML-AI 预测器 / GPU 处理基础设施。

反正:

享受MQL4/MQL5的狂野世界


感兴趣的? 可能还喜欢阅读其他MQL4ZeroMQ 分布式处理低延迟交易帖子

您可以尝试 MetaApi https://metaapi.cloud云服务,该服务提供对 MetaTrader 4 和 MetaTrader 5 账户的 REST API 和 WebSocket API 访问。

官方 REST API 文档: https : //metaapi.cloud/docs/client

SDK: https : //metaapi.cloud/sdks (javascript、python 和 Java SDK 于 2021 年 4 月提供)

它支持读取账户信息、头寸、订单、交易历史、接收报价和访问市场数据。

该服务还提供复制交易 API https://metaapi.cloud/docs/copyfactory和 API 来计算 MetaTrader 账户https://metaapi.cloud/docs/metastats上的外汇交易指标。

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

因此,在多次尝试用 MQL5 编写我的专家代码失败后(当然不是简单的一个),我决定采用一种激进的方法:编写应用程序、客户端 MQL5 和服务器端 Java,它提供了一个 Java 外观MT5平台。 相同的 API、相同的基本事件等等。 尽管我不止一次认为自己陷入了盲道,但我一直在编码,最终我成功了,获得了非常可靠的结果。 自然,REST 接口大大降低了性能,每个请求,即使 Tomcat 和 MT5 运行在同一个 localhost 中,也是以毫秒为单位,而不是微秒,但另一方面,这只会降低这种架构的适用性,它并没有让它变得毫无用处。

像手术刀和各种高频交易这样的策略不适合这种情况,反之,在较长时期内的所有其他策略,即使是日内策略,也可以成功实施而没有任何缺点。 最后但并非最不重要的一点是,没有必要使用 WebRequest() MQL5 方法来调用任何 Servlet 容器,可以从操作系统(谈到 Windows)导入 wininet.dll 并且策略测试器将像策略已在 MQL5 中编码,可能只是慢了一点。 总而言之,我不会对 FX 交易平台的 Java 外观方法如此讽刺,仅引用裸体表演而不将整体场景置于上下文中是一种面对争论的幼稚方法。

WebRequest 不是世界末日,您可以使用 API 从您的 EA 提交 http 请求,甚至可以使用 Strategy Tester。

如果您需要在 MT4 和 Java 应用程序之间发送/接收同步消息,REST 将是最好的方法,因为在这种情况下快速响应很重要。 像 ZeroMQ 这样的消息队列解决方案更适合异步解决方案,所以它不会帮助你。 一旦您选择了 REST 方法,您就可以使用 MQL4 WebRequest()来调用您的 Java 应用程序。

为了收集报价信息和开仓、更新或平仓订单,您可以使用mt4 server api。

请检查这个网址。

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

也许你会找到你想要的。

然后我还有mt4服务器api。 如果您有任何问题,请更新我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM