上个月我把VPS从东京机房换到伦敦,ping值从38ms直接干到4.2ms,当时那个兴奋啊,心想这下挂的欧美和镑美对冲EA总算能起飞了。结果跑了一周复盘,滑点反而比之前大了将近一倍,有几笔镑美空单实际成交价比信号价差了2.3个点,我盯着日志看了半天才反应过来——延迟低不等于成交好,这俩事儿根本不是一回事。
先说我踩的第一个坑,也是新手最容易忽略的:MT5的VPS延迟测的是你到经纪商服务器的网络往返时间,但EA下单走的是另一条路。我当时用MT5自带的VPS延迟检测一看4ms,美滋滋,但那个数字测的是行情推送的延迟,不是交易指令的延迟。交易指令要经过EA逻辑运算、订单封装、桥接、撮合,中间任何一环卡一下,你那4ms就是个摆设。后来我在EA里加了
第二个坑更隐蔽,跟对冲账户的订单净额处理有关。我的策略是欧美和镑美做统计套利,相关性系数长期在0.72附近,对冲比率按1:0.85配。延迟降下来之后,EA触发频率明显变高,原来一秒可能就一两次报价跳动,现在一秒能跳五六次。问题来了,MT5默认是净额账户模式下,同一个品种的订单会合并,但我用的是
第三个坑是我调了三天才搞明白的:VPS延迟低于5ms时,MT5的报价刷新频率和EA的OnTick触发频率会脱节。正常网络下,报价来一次,EA跑一次,节奏是同步的。但延迟极低的时候,VPS从经纪商那里拿报价的速度远超EA处理速度,结果就是报价队列堆积,EA还在处理上一个tick,新的报价已经把买卖价差推走了。你看到的信号价是旧的,发出去的单子按新的价差成交,滑点能不大吗。我后来在EA里加了
还有个细节得提一嘴,VPS的CPU核心数和MT5的线程调度也有关。我原来那个VPS是2核的,延迟降到4ms后EA计算量上来,CPU占用直接飙到90%订单线程被挤得没脾气。换成4核之后同样的策略滑点又降了一截。所以别光看ping值,VPS的CPU、内存、以及你EA的复杂度要匹配,不然低延迟反而放大你本地的瓶颈。
最后说个验证方法,你可以在MT5的EA里加一段代码,把每次OrderSend的请求时间和成交时间都写进CSV,跑一天下来用Excel算一下平均滑点和延迟的相关系数。我当时算出来是负相关,-0.43,意思就是延迟越低滑点越大,跟直觉完全反着来。后来把下单频率压下来、加了报价过滤、换了4核VPS,这个系数才回到正0.2左右。
你们有没有遇到过类似的情况,VPS延迟明明很低但成交就是不对劲的?或者你们是怎么在EA里做延迟补偿的,评论区聊聊,我最近还在调镑美那个对冲组合的滑点模型。
先说我踩的第一个坑,也是新手最容易忽略的:MT5的VPS延迟测的是你到经纪商服务器的网络往返时间,但EA下单走的是另一条路。我当时用MT5自带的VPS延迟检测一看4ms,美滋滋,但那个数字测的是行情推送的延迟,不是交易指令的延迟。交易指令要经过EA逻辑运算、订单封装、桥接、撮合,中间任何一环卡一下,你那4ms就是个摆设。后来我在EA里加了
- OnTick入口打时间戳
- OrderSend前打时间戳
- 成交回报打时间戳
第二个坑更隐蔽,跟对冲账户的订单净额处理有关。我的策略是欧美和镑美做统计套利,相关性系数长期在0.72附近,对冲比率按1:0.85配。延迟降下来之后,EA触发频率明显变高,原来一秒可能就一两次报价跳动,现在一秒能跳五六次。问题来了,MT5默认是净额账户模式下,同一个品种的订单会合并,但我用的是
- hedging模式的对冲账户
- 每个货币对独立持仓
第三个坑是我调了三天才搞明白的:VPS延迟低于5ms时,MT5的报价刷新频率和EA的OnTick触发频率会脱节。正常网络下,报价来一次,EA跑一次,节奏是同步的。但延迟极低的时候,VPS从经纪商那里拿报价的速度远超EA处理速度,结果就是报价队列堆积,EA还在处理上一个tick,新的报价已经把买卖价差推走了。你看到的信号价是旧的,发出去的单子按新的价差成交,滑点能不大吗。我后来在EA里加了
- 报价时间戳过滤,超过80ms的旧报价直接丢弃
- 限制每秒最大下单次数为3次
- 用SymbolInfoTick替代MarketInfo取实时价
还有个细节得提一嘴,VPS的CPU核心数和MT5的线程调度也有关。我原来那个VPS是2核的,延迟降到4ms后EA计算量上来,CPU占用直接飙到90%订单线程被挤得没脾气。换成4核之后同样的策略滑点又降了一截。所以别光看ping值,VPS的CPU、内存、以及你EA的复杂度要匹配,不然低延迟反而放大你本地的瓶颈。
最后说个验证方法,你可以在MT5的EA里加一段代码,把每次OrderSend的请求时间和成交时间都写进CSV,跑一天下来用Excel算一下平均滑点和延迟的相关系数。我当时算出来是负相关,-0.43,意思就是延迟越低滑点越大,跟直觉完全反着来。后来把下单频率压下来、加了报价过滤、换了4核VPS,这个系数才回到正0.2左右。
你们有没有遇到过类似的情况,VPS延迟明明很低但成交就是不对劲的?或者你们是怎么在EA里做延迟补偿的,评论区聊聊,我最近还在调镑美那个对冲组合的滑点模型。
