上个月非农数据出来那晚,我EA跑的是黄金,挂了三单进去,结果回测里明明能拿到手的利润,实盘出来少了快三成。我一开始以为是策略逻辑写崩了,翻日志翻了两个小时,最后发现是滑点在作妖——报价跳空那几秒,我的单子成交价跟信号价差了一截,止损也被扫得莫名其妙。
后来我把那晚的成交记录导出来逐笔对,发现一个规律:数据公布前后15秒内,黄金点差能从平时的20多跳到我VPS上记录到的80甚至有过120。EA本身是市价单逻辑,滑点直接吃进成本里。我试过几种处理方案,这里拉出来对比一下,给同样跑非农的朋友一点参考。
我最后的做法是B加C混着来:数据前2分钟暂停新开仓,已有单子把deviation设到50同时止损放宽,等点差回落到40以内再恢复常规参数。实测下来,利润回撤从三成压到了一成出头,虽然还是漏一点,但至少不会像之前那样被滑点按在地上摩擦。
说到底这笔账真不好全算在EA头上,代码只是执行,真正的问题是我没把交易环境的波动性当回事。VPS延迟、经纪商报价质量、数据发布时的流动性缺口,这些都得提前算进去。你们跑非农的时候,滑点一般控制在多少?有没有更省心的处理方式,评论区聊聊。
补一句,后来我才发现VPS的时钟跟经纪商服务器时间差了快两秒,这玩意儿平时看不出来,一到非农这种拼毫秒的节点就是致命的。
后来我把那晚的成交记录导出来逐笔对,发现一个规律:数据公布前后15秒内,黄金点差能从平时的20多跳到我VPS上记录到的80甚至有过120。EA本身是市价单逻辑,滑点直接吃进成本里。我试过几种处理方案,这里拉出来对比一下,给同样跑非农的朋友一点参考。
- 方案A:硬扛不设限制。优点是不用改代码,信号触发就市价进。缺点是滑点完全不可控,那晚三单平均滑了4.7个点,按黄金每点1美元算,等于每单白丢4块多,利润直接被啃掉一块。更坑的是止损单,滑点导致实际止损位比设定值差出好几点,复盘时看着肉疼。
- 方案B:加最大滑点参数。MT5的order_send里有deviation字段,我设了30,意思是允许最多3个点的滑点。优点是有个刹车,超出就不成交。缺点是数据那几秒价格跳太快,直接拒单,信号等于废了,那晚有两单就这么错过的,利润没拿到但至少没亏。
- 方案C:避开数据窗口。我把EA的时间过滤器加上,非农公布前后各3分钟不接新信号,已有持仓的止损拉宽到80点防止被插针扫掉。优点是最稳,滑点基本归零,缺点是彻底放弃数据行情那波波动,吃不到大肉。
我最后的做法是B加C混着来:数据前2分钟暂停新开仓,已有单子把deviation设到50同时止损放宽,等点差回落到40以内再恢复常规参数。实测下来,利润回撤从三成压到了一成出头,虽然还是漏一点,但至少不会像之前那样被滑点按在地上摩擦。
说到底这笔账真不好全算在EA头上,代码只是执行,真正的问题是我没把交易环境的波动性当回事。VPS延迟、经纪商报价质量、数据发布时的流动性缺口,这些都得提前算进去。你们跑非农的时候,滑点一般控制在多少?有没有更省心的处理方式,评论区聊聊。
补一句,后来我才发现VPS的时钟跟经纪商服务器时间差了快两秒,这玩意儿平时看不出来,一到非农这种拼毫秒的节点就是致命的。
