策略写了止损,为什么回测里从没触发过
发布时间:2小时前阅读:6
代码里明明有止损,回测跑完一看,一次都没触发。这种情况不是止损没写,而是它根本没机会生效。
最常见的原因是判断位置错了。止损写在了买入函数里面,只有买入那一刻会检查一次,之后再也不看。行情跌下去的时候,没有代码在盯着它。
第二种原因是数据频率不匹配。你用日线的收盘价判断止损,那么只有收盘价跌破线才触发,盘中的深跌完全看不到。真实交易里你可能会在盘中就被动出局,回测里却一直拿着。
第三种是条件写反了。比如判断写成当前价格高于成本价乘以零点九就卖,逻辑上等于涨了才卖,跌了反而不动。这种错误看代码容易看漏,看结果才明显。
第四种是止损价被后续的逻辑覆盖。加仓、调仓、重新计算持仓成本的代码在后面执行,把止损基准改了。
验证方法很直接:在止损判断那行加一句日志,把每次比较的两个数字打出来。跑一遍回测,看日志里有没有出现比较动作。一次都没有,说明那段代码没被执行;有比较但没触发,说明阈值算错了。
还有一类隐蔽的问题:止损用了当天的最高价或者最低价做判断。这两个价格只有收盘后才知道,用在盘中判断里同样是未来信息。回测里它会让止损看起来很灵敏,实盘完全无法复现。
验证止损是否真的在工作,有个简单办法:故意把止损线设得很靠近成本价,跑一段回测,看是不是频繁触发。如果几乎不触发,说明那段代码确定没被执行;触发过于频繁,说明阈值和手续费的关系没算清楚。
最后一句提醒:止损的阈值要和品种的波动幅度匹配。给一只日波动百分之二的票设百分之三的止损,等于每次正常回调都被打掉,止损变成了交易的噪声。
还有一种情形值得留意:止损被设置成了只在收盘时检查。这在趋势行情里没有大问题,但在跳空开盘时会直接跳过错损价位,实际亏损远超预设。做隔夜持仓的策略,必须把跳空这条纳入假设。
股票/量化开户找我!股票佣金万0.854(满足条件)!无门槛国债逆回购一折 (百万分之一)!ETF佣金万0.5!ETF申赎一折!优惠多多!免费量化使用量化软件QMT+ptrade!资金靓号:888、999、等定制!
温馨提示:投资有风险,选择需谨慎。



问一问
从业认证

+微信
分享该文章
