找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 11|回复: 0

不同的MT4客户端和不同的MT5客户端如何相互通信-基于文件篇

[复制链接]

4万

主题

54

回帖

4万

积分

管理员

积分
45954
发表于 2026-8-26 21:49:00 | 显示全部楼层 |阅读模式
最后由 EaCode小胖李 于 2023-11-7 23:16 编辑

在交易中,我们经常会有一些跨平台的需求,比如跨平台跟单,多平台套利等。达到这个功能,就得实现不同客户端的通信。


无论是MT4的客户端,还是MT5的客户端(MT4与MT4互通,MT5与MT5互通,MT4与MT5互通),都可以很简单的进行相互通信。

原理也很简单,主要是两步:


1.利用所有客户端(MT4和MT5)共享的文件夹MetaQuotes\Terminal\Common\Files。这个文件夹还是挺重要的,就是因为有个这个共享文件夹,我们可以很方便地把它作为一个中转。


一个客户端,往这个文件夹写数据;一个客户端从这个文件夹读数据;那这两个客户端就能实现基础的通信了。




2.MT4和MT5提供了丰富的文件操作函数,我们也就是利用这些函数,来往共享文件夹写数据,和读取数据。




虽然这些文件函数很强大,但是它只能操作两个文件夹里面的文件,其他地方的文件是没有权限的,这样做也是为了安全考虑,不然EA就会对你的电脑安全产生影响了。


1. 单个客户端独享的数据文件夹:MQL4\Files




2.所有客户端共享的数据文件夹:MetaQuotes\Terminal\Common\Files



一、如何往共享文件夹写入一个数据




以上为我实例的一个脚本,执行后将会生成一个:eacode.csv文件




通过excel打开文件后,发现我们写入数据成功。




需要重点解释一下FileOpen函数




FILE_CSV:表示以表格文本方式写入数据;于此对应的也可以写入二进制数据;

FILE_READ:这个是为了读取数据,移动指针,写入数据时是从尾部写入;否者就是覆盖写入,之前的数据都没了。

FILE_WRITE:写入数据,必须得有。

FILE_COMMON:定位文件夹为所有客户端共享文件夹MetaQuotes\Terminal\Common\Files。不写默认为:数据文件夹

二、如何往共享文件夹读取数据




以上为对应的一个实例脚本,双击执行后程序会找到客户端共享文件夹MetaQuotes\Terminal\Common\Files中的eacode.csv文件。


然后把eacode.csv文件中的数据,解析到数组中,再然后执行数组中保存的指令。


执行后开了两个多单,一个0.01手,一个是0.02手。和我们保存在eacode.csv中的指令是对应的。




读取文件和解析文件,并执行指令,这个没有太多可讲的。你写入文件按照什么规则写入的,读取的时候,就按照什么规则读取就行。

三、如何更进一步


1. 以上我讲的其实是单方向通信,一个客户端发信号,一个客户端接收信号。


如果我们需要双方向通信呢?我们可能会需要两个文件。实际操作的时候,需要更多的细节处理,这里需要大家自己研究。


2. 如何进一步提升速度,和数据处理能力。


当前文章,我讲到的中转介质是文件。其实我们也可以使用数据库。在MT5上,已经内置了数据库功能,我们可以方便的进行数据库操作。




MT4中虽然没有提供数据库函数,但是我们可以借助第三方的数据库(Sqlite)dll来操作数据库。详情可以查看我的下一篇帖子。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-10-10 19:49 , Processed in 0.105775 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表