MT4警报推送到手机 - 同一台电脑运行多个MT4平台账户的实操方法_MT4软件的多账户支持原理_2

MT4软件的多账户支持原理
MT4软MT4十字光标测量价格与时间差值完全操作_方法二:在交易日志中查找实时执行记录件从诞生那天起就不是为单一账户设计的。它的核心架构允许用户在一个客户端里添加无数个交易服务器,每个服务器对应一个经纪商。你只需要拿到每个平台商的服务器地址,就能轻松把它们加进去。比如你有A平台的标准账户和B平台的ECN账户,完全可以在一台电脑上同时登录这两个账户。
我自己的电脑上就挂了三个不同平台商的MT4账户,一个做对冲,一个做趋势,还有一个专门测试EA。说实话刚开始我也担心会不会冲突,但用下来发现MT4处理得相当好。每个账户的数据流是独立的,不会互相干扰,图表加载和订单执行也互不影响。
这里有个小细节要提醒大家:虽然MT4可以添加多个服务器,但如果你要同时登录多个账户,需要把MT4软件打开多次。也就是说,你要在桌面上创建多个MT4快捷方式,每个快捷方式指向不同的账户文件。这个后面会详细说。
有些新手可能会担心安全问题,其实完全不用担心。MT4每个账户的数据都是加密传输的,不同平台商的服务器之间根本不会互通。你把A平台和B平台的账户放在同一个软件里,就跟你在手机上同时装微信和支付宝一样,各自独立运行。
编写均线金叉死叉的报警条件表达式
右键点击“警报”选项卡空白处,选择“创建”后,会弹出一个设置窗口。关键字段是“条件”这一栏,这里需要输入MQL4表达式。以常见的MA5和MA20为例,金叉意味着MA5大于MA20,且之前一根K线时MA5小于MA20。表达式可以写成:iMA(NULL,0,5,0,MODE_SMA,PRICE_CLOSE,0) > iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0) && iMA(NULL,0,5,0,MODE_SMA,PRICE_CLOSE,1) < iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1)。
这个表达式看着复杂,其实拆开看很简单。iMA函数获取移动平均线数值,参数依次是:品种(NULL表示当前图表)、时间周期、均线周期、偏移量、平滑类型(MODE_SMA简单移动平均)、价格类型、K线索引(0是最新K线,1是上一根)。金叉的条件就是最新K线上快线大于慢线,而上一根K线上快线小于慢线。死叉则反过来,把大于号小于号互换就行。
设置时要注意,条件栏里不能有空格,逗号必须是英文半角。写完表达式后,在“播放声音”栏里选择一个.wav文件。MT4自带了一些提示音,你也可以放自己的音频文件进去。建议选一个清脆但不刺耳的声音,比如鸟鸣或短促的叮咚声。太长的音乐会耽误判断时机,太小声又容易听不见。
有个技巧值得分享:如果你同时监控多个周期,可以设置不同的声音。比如15分钟金叉用短促提示,1小时金叉用长音提示。这样听到声音就知道是哪个周期出了信号。不过别设置太多,否则声音乱响反而影响判断。刚开始建议只监控一个周期,MT4下载等熟悉了再慢慢增加。
结合时间判断实现自动结算
有了平仓函数,接下来就是把它和定时逻辑结合起来。
在EA的OnTick()或OnTimer()函数里,先判断当前时间是否达到设定的收盘时间。
如果达到,就调用CloseAllPositions()函数。这里有个细节:判断条件要写成“大于等于”而不是“等于”,因为如果网络延迟导致错过精确时间点,等于条件就永远不会触发。我通常这样写:if (Hour() >= closeHour && Minute() >= closeMinute),这样只要时间超过设定值,就会触发。
为了更精确,还可以加入秒的判断。比如在收盘前5秒开始准备,先打印日志记录当前状态,然后等待时间到达再执行。我个人喜欢在收盘前30秒就发送一条通知到手机,提醒用户即将自动平仓。这个功能可以通过SendNotification()函数实现,配合MT4的移动端推送,非常实用。不过要注意,推送功能需要用户在MT4设置里开启,并且EA要获得推送权限。
实际部署时,我建议先在模拟账户上测试一周。观察每天收盘时EA是否准时执行,有没有漏单或者重复平仓的情况。我遇到过一个问题:如果账户里有挂单,平仓函数会忽略它,因为挂单不是持仓订单。所以如果你希望同时也删除挂单,需要另外写一个删除挂单的函数,比如DeleteAllPendingOrders()。这个函数逻辑类似,只是把OrderClose()换成OrderDelete()。
常见误解和替代方案的深入探讨
有些交易者以为可以通过修改订单编号或者导出导入历史数据来绕过这个限制,这其实是个误区。MT4的订单编号是系统自动生成的,而且是唯一的,根本改不了。至于导出导入,虽然你可以把历史记录导出成CSV文件,但修改后再导入回去,平台会直接拒绝,因为数据签名不匹配。我曾经试过用十六进制编辑器修改CSV文件,结果导入时提示“无效的格式”,彻底没戏。
另一个常见的误解是,认为某些MT4的第三方插件或者EA可以修改平仓后的注释。说实话,我测试过好几个声称有这个功能的插件,结果要么是假的,要么只能修改本地显示,实际上数据库里的注释根本没变。因为MT4的API根本就没有提供修改平仓订单注释的接口,任何第三方工具都无法绕过这个限制。
如果你实在需要记录一些额外的信息,我建议在开仓时就把注释写得详细一些。比如不要只写“EURUSD”,而是写“EURUSD 1.1234空单 突破失败回调”。这样即使以后不能修改,注释本身已经包含了足够的信息。另外,你也可以利用MT4的“描述”字段,这个字段在开仓时可以填写,平仓后同样不能修改,但至少多了一个记录信息的位置。