上个月我把一套跑了半年的镑美EA从伦敦节点迁到了东京节点,本来想着离经纪商服务器更近,结果当晚就出事了。止盈单在1.2650挂了6手,价格明明碰到了,MT5日志里却显示成交在1.2643,滑了7个点。一查VPS延迟,平均92ms,峰值冲到140ms。那晚我盯着屏幕到三点多,把最近三个月的成交记录全部导出来对比,才搞明白滑点不是EA逻辑问题,是延迟把止盈单的触发和实际成交撕开了一道口子。
先说我试过的第一种方案,也是最直接的:把止盈单的挂单方式从市价触发改成限价挂单。原来EA用的是StopLimit模式,延迟一高,价格穿越止盈位后订单才到服务器,自然吃滑点。改成直接挂SellLimit在止盈位,好处是成交价锁死,滑点归零。但缺点也明显,遇到跳空或者快速行情,限价单可能完全不成交,价格直接穿过去,你看着浮盈变成浮亏。我拿欧美1小时图回测了去年10月到今年3月的数据,限价模式在正常波动下成交率97%,但遇到类似非农那种瞬间20点的行情,成交率掉到六成左右。
第二种方案是在EA里加滑点补偿参数,也就是把止盈触发价往前挪。比如原本止盈设在1.2650,我改成1.2647触发,给延迟留3个点的缓冲。这个思路来自论坛里一位做黄金的汇友,他用的MT4,说在VPS延迟80ms时把补偿设成2到4个点效果最好。我照搬到镑美上,先设了3个点,跑了一周发现止盈单成交价基本能落在1.2649到1.2651之间,比之前强不少。但坑在于,这个补偿值不能一刀切。镑美亚盘波动小,3个点足够;美盘数据市的时候,3个点根本不够用,得临时调到5到6个点。我后来在EA里加了个判断,根据ATR动态调整补偿值,ATR大于20点时补偿自动放大到5点,小于10点时回到2点。
第三种方案是换VPS节点加EA参数组合优化。我同时开了两台VPS对比,一台东京延迟85ms左右,一台新加坡延迟110ms。东京那台用补偿3点加限价挂单混合模式,新加坡那台纯市价加补偿5点。跑了两周,东京组合的滑点均值0.8个点,新加坡组合2.3个点。但东京组合有个新问题,限价单在延迟波动时偶尔会卡在服务器队列里,成交回报慢半拍,导致EA以为单子没成交又补了一单。这个坑我踩了两次,后来在代码里加了订单去重逻辑,用魔术号加时间戳做唯一标识才解决。
具体操作我整理成几步,都是实盘验证过的:
最后说个心态上的事。滑点这东西,延迟80ms不可能完全消除,只能压缩。我现在的底线是单笔滑点不超过2个点,超过就说明参数该调了。你们平时VPS延迟多少?有没有试过用补偿参数把滑点压到1个点以内的?贴成交记录一起看看。
补充个细节:后来我用服务器Ping值的历史分位来动态决定用限价还是止损单,80ms以下走止损、以上切限价,实盘稳多了,你们可以试试这个思路。
先说我试过的第一种方案,也是最直接的:把止盈单的挂单方式从市价触发改成限价挂单。原来EA用的是StopLimit模式,延迟一高,价格穿越止盈位后订单才到服务器,自然吃滑点。改成直接挂SellLimit在止盈位,好处是成交价锁死,滑点归零。但缺点也明显,遇到跳空或者快速行情,限价单可能完全不成交,价格直接穿过去,你看着浮盈变成浮亏。我拿欧美1小时图回测了去年10月到今年3月的数据,限价模式在正常波动下成交率97%,但遇到类似非农那种瞬间20点的行情,成交率掉到六成左右。
第二种方案是在EA里加滑点补偿参数,也就是把止盈触发价往前挪。比如原本止盈设在1.2650,我改成1.2647触发,给延迟留3个点的缓冲。这个思路来自论坛里一位做黄金的汇友,他用的MT4,说在VPS延迟80ms时把补偿设成2到4个点效果最好。我照搬到镑美上,先设了3个点,跑了一周发现止盈单成交价基本能落在1.2649到1.2651之间,比之前强不少。但坑在于,这个补偿值不能一刀切。镑美亚盘波动小,3个点足够;美盘数据市的时候,3个点根本不够用,得临时调到5到6个点。我后来在EA里加了个判断,根据ATR动态调整补偿值,ATR大于20点时补偿自动放大到5点,小于10点时回到2点。
第三种方案是换VPS节点加EA参数组合优化。我同时开了两台VPS对比,一台东京延迟85ms左右,一台新加坡延迟110ms。东京那台用补偿3点加限价挂单混合模式,新加坡那台纯市价加补偿5点。跑了两周,东京组合的滑点均值0.8个点,新加坡组合2.3个点。但东京组合有个新问题,限价单在延迟波动时偶尔会卡在服务器队列里,成交回报慢半拍,导致EA以为单子没成交又补了一单。这个坑我踩了两次,后来在代码里加了订单去重逻辑,用魔术号加时间戳做唯一标识才解决。
具体操作我整理成几步,都是实盘验证过的:
- 第一步,先用MT5的成交历史导出功能,统计最近一个月止盈单的平均滑点值,做到心里有数。
- 第二步,在EA参数里找到止盈触发偏移量,先设2个点跑三天,观察成交价分布。
- 第三步,如果滑点仍然超过1.5个点,把挂单模式改成限价加市价混合,正常波动用限价,数据市前半小时切回市价。
- 第四步,在VPS上装个延迟监控脚本,每5分钟记录一次ping值,延迟超过100ms时EA自动降低仓位或者暂停开新单。
最后说个心态上的事。滑点这东西,延迟80ms不可能完全消除,只能压缩。我现在的底线是单笔滑点不超过2个点,超过就说明参数该调了。你们平时VPS延迟多少?有没有试过用补偿参数把滑点压到1个点以内的?贴成交记录一起看看。
补充个细节:后来我用服务器Ping值的历史分位来动态决定用限价还是止损单,80ms以下走止损、以上切限价,实盘稳多了,你们可以试试这个思路。
