上个月出金后顺便把MT5的日志翻了一遍,发现我这组多品种EA(欧美、镑美、黄金三个品种同时挂)有个规律性问题:每到整点或半小时的K线开盘节点,总有那么一单会比另外两单慢进场,慢的幅度不固定,有时候差几百毫秒,有时候直接差出1.5秒我一开始想着是不是VPS带宽不够,但测下来延迟都在10ms以内啊。
目前已经做过的排查大概是这些:
现在比较困惑的是时区这块,我的MT5是GMT+3的服务器时区,但三款EA用的趋势计算模板里写的是UTC偏移自己调整的。是不是因为原子钟对齐到服务器整点后,市场报价的tick流不是同步刷新导致每单的计算起点不同?按理说同一根K线收线后新报价应该统一推送吧。
代码逻辑上我也试着给三单加了互相调用的信号确认机制(就是等另外两单状态确认后才允许第三单发单),结果反而把原本快的单拖慢了,慢的那个是压不下去。所以现在左右为难,不知道是该把ea改成多品种在同一策略里用market watch统一扫单,还是干脆把时区相关参数改成服务器时间做个对照验证。有没有懂得这块的朋友给个调试方向 😅
目前已经做过的排查大概是这些:
- 把三款EA的start时间都改成OnTick触发了,但黄金那单还是偶尔掉队
- 用Print函数在OrderSend前后加了时间戳,差的几百毫秒似乎都发生在下单前的计算环节而不是下单本身
- 日志里偶发这样的报错 2025.05.07 14:00:03.152 'Open #1' failed [Off quote] 但重试一次又能成交
现在比较困惑的是时区这块,我的MT5是GMT+3的服务器时区,但三款EA用的趋势计算模板里写的是UTC偏移自己调整的。是不是因为原子钟对齐到服务器整点后,市场报价的tick流不是同步刷新导致每单的计算起点不同?按理说同一根K线收线后新报价应该统一推送吧。
代码逻辑上我也试着给三单加了互相调用的信号确认机制(就是等另外两单状态确认后才允许第三单发单),结果反而把原本快的单拖慢了,慢的那个是压不下去。所以现在左右为难,不知道是该把ea改成多品种在同一策略里用market watch统一扫单,还是干脆把时区相关参数改成服务器时间做个对照验证。有没有懂得这块的朋友给个调试方向 😅
