MT5网络波动下EA断线保护设置

一般24.2
登录发帖
XM 推荐平台

覆盖品种全,新手友好,支持多种入金方式

CySEC(塞浦路斯) / ASIC(澳洲) / IFSC(伯利兹) · 最低入金 $5
暮色精
暮色精 楼主 3 天前 浏览 242 回复 0 阅读 1 分钟
新汇友(注册会员) 等级 Lv.1 主题 2 帖数 7 积分 1278 汇币 958
1楼
昨晚挂了个黄金的网格EA在VPS上跑,早上起来一看,好家伙,持仓状态和日志里的记录对不上。翻了半天日志才发现,凌晨三点多那会儿网络抖了一下,EA跟服务器断了大概四十秒,等重连上的时候,有几单已经滑点成交了,但EA这边还傻乎乎地按老价格在算。这个坑其实挺典型的,尤其做黄金这种波动大的品种,欧美盘交接那会儿网络一抽风,断线保护没做好的话,账户直接裸奔。今天就拿我踩过的坑,说说MT5下怎么给EA加断线保护,新手也能照着配。
先说最基础的一层,MT5本身有个连接状态检测。很多人写EA只盯着OnTick,觉得有行情来就会触发,但断线的时候根本没有tick进来,你的EA就是睡死状态。所以第一件事是在OnTimer里做心跳检测,别只依赖OnTick。我一般会在OnInit里加 EventSetTimer(5),也就是每5秒触发一次,然后在OnTimer里判断 TerminalInfoInteger(TERMINAL_CONNECTED) 这个返回值。如果是false,说明跟服务器断了,这时候要做的不是继续交易,而是立刻把状态标记下来。
具体我踩过的坑是,光判断断线还不够,你得知道断线前手里有什么。我现在的做法是在EA里维护一个持仓快照,每次成功开仓、平仓、改单之后,把订单号、方向、手数、开仓价、止损止盈这些写进全局变量或者本地文件。这样断线重连之后,第一件事是拿快照跟当前实际持仓做比对。比对逻辑我写在OnTimer里,检测到 TERMINAL_CONNECTED 从false变回true的那一刻,触发一次对账。对账不上的单子,要么是断线期间成交的,要么是被止损打掉的,得区别处理。
下面是我现在用的断线保护流程,新手可以照着搭:

  • OnInit里设置 EventSetTimer(5),同时把 TERMINAL_CONNECTED 的初始状态存下来
  • OnTimer里每5秒检测一次连接状态,状态变化时写日志,记录断线开始和恢复的时间点
  • 断线期间禁止任何新开仓操作,已经在跑的挂单要不要撤,看策略,我一般黄金网格会保留,但会把 OrderSend的滑点参数从30调到10,防止重连瞬间价格跳空导致大滑点
  • 重连后先做持仓对账,用快照跟OrdersTotal逐单比对,对不上的单子标记出来人工确认或者按预设规则处理
  • 对账完成后,重新计算网格的基准价,因为断线期间价格可能已经跑出去很远了,不能再用断线前的锚点

还有一个细节,很多人忽略VPS本身的网络质量。我一开始图便宜用的某家小厂的VPS,晚盘经常丢包,EA断线频率特别高。后来换了一家有 BGP多线接入 的,同样跑黄金,断线次数明显少了。另外MT5里有个 Network选项卡,能看到当前连接的延迟和丢包情况,新手可以定期看一眼,延迟超过200ms就要警惕了。我现在的习惯是每天开盘前看一眼,延迟稳定在50ms以内才放心让EA跑。
最后说个心态上的事。断线保护这东西,写起来不复杂,但真到了行情剧烈波动的时候,能不能按预期执行是另一回事。我建议新手先用模拟盘跑一遍,故意把VPS网线拔了再插上,看看EA的反应对不对。我自己就是这么测的,第一次测的时候发现重连后对账逻辑写反了,把没成交的单子当成已成交处理,差点在模拟盘上搞出乌龙。这种测试比看代码管用多了。
你们平时跑EA有没有遇到过断线后持仓对不上的情况?或者有没有更好的心跳检测思路,在下面聊聊。

补充个小细节:心跳检测里最好同时核对一下本地持仓和服务器端是否一致,光判断连接状态还不够,重连后要主动拉一次OrderTotal重新对账,不然滑点成交那几单还是会漏掉。
0 回复 众裁0 复制
#1
💬
暂无回复,来抢沙发吧!
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 少做单之后,账户反而开始涨 下一帖 → 关于做交易日记两年最大的收获,分享一个反常识的发现