前两天看了一则关于某经纪商被监管处罚的新闻,里面提到一个细节:监管方在核查交易执行质量时,专门调取了不同账户类型下的实际成交点差数据,发现某些时段实际点差比宣传的均值高出不少。这让我想起自己上个月复盘时踩的一个坑,正好跟点差成本的处理有关。
当时我在回测一套做欧美M15的EA,逻辑很简单,用ATR动态算止损,参数设的是ATR(14)乘以1.8。跑了一年数据,净利润曲线看着还行,最大回撤12%左右。但实盘跑了三周,发现止损被扫的频率明显比回测高,有几笔单子回测里明明能扛过去,实盘却被精准打损然后行情反转。一开始我以为是滑点或者VPS延迟的问题,换了台延迟更低的机器,情况没改善。
后来我把注意力放回到回测设置上,发现问题出在两个地方。第一个是回测时用的是“当前点差”模式,而实盘账户是浮动点差,欧美在北京时间下午四点以后经常从1.2个点跳到1.8甚至2.5个点。第二个更隐蔽:我的止损逻辑里,止损价是直接用开仓价加减ATR值算出来的,没有把点差成本计入。这意味着回测引擎在判断是否触发止损时,用的是中间价,而实盘经纪商是按卖价平多、买价平空来触发的。对于多单来说,实际需要的价格波动比回测多出一个点差的距离才能打掉止损。
解决方案其实不复杂,但需要改EA的代码逻辑。我做了这么几步:
改完之后曲线变化挺明显的。同样的参数,净利润从原来的年化18%掉到了11%左右,最大回撤反而扩大到17%。但实盘又跑了两周,止损被扫的频率降下来了,回测和实盘的偏差从之前的30%缩到10%以内。这才是我想要的结果——宁可回测难看一点,也要让模拟环境尽量逼近真实成交条件。
所以我现在养成的习惯是,每次调整止损逻辑或者换品种回测,先把点差成本手动塞进止损公式里跑一遍,再看去掉点差后的“理想曲线”做对比。两条曲线的差距,基本就是点差对这套策略的侵蚀程度。黄金和镑美这种点差波动大的品种,差距会更夸张。
不知道你们平时回测时是怎么处理点差和止损触发价之间关系的?有没有人试过用实际tick数据来回测,跟固定点差模式差别大不大?
当时我在回测一套做欧美M15的EA,逻辑很简单,用ATR动态算止损,参数设的是ATR(14)乘以1.8。跑了一年数据,净利润曲线看着还行,最大回撤12%左右。但实盘跑了三周,发现止损被扫的频率明显比回测高,有几笔单子回测里明明能扛过去,实盘却被精准打损然后行情反转。一开始我以为是滑点或者VPS延迟的问题,换了台延迟更低的机器,情况没改善。
后来我把注意力放回到回测设置上,发现问题出在两个地方。第一个是回测时用的是“当前点差”模式,而实盘账户是浮动点差,欧美在北京时间下午四点以后经常从1.2个点跳到1.8甚至2.5个点。第二个更隐蔽:我的止损逻辑里,止损价是直接用开仓价加减ATR值算出来的,没有把点差成本计入。这意味着回测引擎在判断是否触发止损时,用的是中间价,而实盘经纪商是按卖价平多、买价平空来触发的。对于多单来说,实际需要的价格波动比回测多出一个点差的距离才能打掉止损。
解决方案其实不复杂,但需要改EA的代码逻辑。我做了这么几步:
- 第一步,在回测设置里把点差模式改成固定点差加浮动模拟,我直接设了1.8个点的固定值,比历史均值略高,留一点安全边际。
- 第二步,修改止损价的计算公式。多单止损从“开仓价减去ATR”改成“开仓价减去ATR再减去当前点差”,空单反过来加。这样回测触发的条件就贴近实盘的bid/ask触发机制。
- 第三步,重新跑三年数据,同时把手续费和隔夜利息也加进去,之前偷懒只算了点差。
改完之后曲线变化挺明显的。同样的参数,净利润从原来的年化18%掉到了11%左右,最大回撤反而扩大到17%。但实盘又跑了两周,止损被扫的频率降下来了,回测和实盘的偏差从之前的30%缩到10%以内。这才是我想要的结果——宁可回测难看一点,也要让模拟环境尽量逼近真实成交条件。
所以我现在养成的习惯是,每次调整止损逻辑或者换品种回测,先把点差成本手动塞进止损公式里跑一遍,再看去掉点差后的“理想曲线”做对比。两条曲线的差距,基本就是点差对这套策略的侵蚀程度。黄金和镑美这种点差波动大的品种,差距会更夸张。
不知道你们平时回测时是怎么处理点差和止损触发价之间关系的?有没有人试过用实际tick数据来回测,跟固定点差模式差别大不大?
