设为首页 收藏本站 切换语言

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

| 发表于 2023-11-7 23:07:25 | 显示全部楼层 |复制链接
最后由 EaCode小胖李 于 2023-11-7 23:16 编辑

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

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

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

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

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

image.png


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

image.png

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

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

image.png

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

image.png

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

image.png

以上为我实例的一个脚本,执行后将会生成一个:eacode.csv文件
image.png
通过excel打开文件后,发现我们写入数据成功。

image.png

需要重点解释一下FileOpen函数

image.png
FILE_CSV:表示以表格文本方式写入数据;于此对应的也可以写入二进制数据;
FILE_READ:这个是为了读取数据,移动指针,写入数据时是从尾部写入;否者就是覆盖写入,之前的数据都没了。
FILE_WRITE:写入数据,必须得有。
FILE_COMMON:定位文件夹为所有客户端共享文件夹MetaQuotes\Terminal\Common\Files。不写默认为:数据文件夹


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

image.png

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

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

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

image.png

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

三、如何更进一步

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

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

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

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

image.png

MT4中虽然没有提供数据库函数,但是我们可以借助第三方的数据库(Sqlite)dll来操作数据库。详情可以查看我的下一篇帖子。

ExeOrder.ex4

7.48 KB, 下载次数: 0, 下载积分: 活跃度 -5  [下载]

ExeOrder.mq4

3.8 KB, 下载次数: 0, 下载积分: 活跃度 -5 售价: 2 H币  [记录]  [购买]

SendOrder.ex4

6.34 KB, 下载次数: 0, 下载积分: 活跃度 -5  [下载]

SendOrder.mq4

2.77 KB, 下载次数: 0, 下载积分: 活跃度 -5 售价: 2 H币  [记录]  [购买]

评分
  • 1
  • 2
  • 3
  • 4
  • 5
平均分:NAN    参与人数:0    我的评分:未评 下载时遇到问题?
如果有帮助,就支持一下我呗
举报

评论 使用道具

精彩评论2

aimsb000
DD
| 发表于 2023-11-8 00:17:38 | 显示全部楼层
在MT5上,其实已经内置了数据库功能。
举报

点赞 1 评论 使用道具

河马编程
DDD
| 发表于 2023-11-8 09:36:25 | 显示全部楼层
数据库的效率会更高。但是MT4 无法直接使用数据库。MT5 可以。
可以通过C++写一个读写的DLL 文件来操作数据库,给MT4 用,这样就能解决。
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

天眼云VPS
简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)