怎么判断一次回测结果可不可信
拿到一份回测报告,先别急着看收益曲线。曲线好看不代表结论可信。下面几个检查点,按顺序过一遍,基本能筛掉大部分不靠谱的结果。
先看数据划分是否干净
最关键的一步是确认:用来调参的数据,和用来出结果的数据,是不是同一段。
- 如果所有参数都是在一段历史上试出来的,最后又用这段历史展示表现,那这个结果没有参考价值。
- 正确做法是留出一段从未参与任何决策的数据做样本外验证。样本外数据一旦被看过并据此改过参数,它就变成了样本内数据,需要重新划分。
- 判断标准很简单:问一句「这个参数是怎么定下来的」。如果答案是「试了几组,这组最好」,那这段数据就已经被污染了。
还有一种隐蔽的污染:先看整体数据找规律,再回头划定回测区间。区间的起点和终点本身就包含了信息,这也会让结果偏乐观。
成本有没有真的算进去
很多回测的差距,不在策略逻辑,而在成本假设。
- 手续费、滑点、冲击成本,至少要有明确的设置,而不是默认 0。
- 换手率高的策略对成本极其敏感。一个每次调仓都换掉大半持仓的策略,成本稍微调高一点,结果可能就从正变负。
- 可以做一个简单测试:把成本假设提高 50%,看结果衰减多少。如果衰减剧烈,说明这个结果高度依赖一个你无法控制的假设。
另外注意成交假设。用收盘价成交、用次日开盘价成交、还是用均价成交,对结果影响很大。报告里没写清楚成交规则的,先打一个问号。
参数是不是被过度拟合了
参数越多、调得越细,越容易拟合噪声。
- 看参数邻域:把最优参数稍微挪动一点,比如周期从 20 改成 18 或 22,结果是否还稳定。如果只有 20 这一组好,前后都崩,基本可以判定是拟合。
- 看参数数量:一个策略有七八个可调参数,且每个都调到「刚好」。这种结果在样本外大概率失效。
- 看逻辑约束:参数应该有业务或逻辑上的理由,而不是纯粹试出来的数字。比如均线周期选 20,是因为一个月约 20 个交易日,这比「试出来 20 最好」可靠得多。
一个实用的做法是:把参数固定在某个合理值,不再优化,直接看样本外表现。放弃一点样本内的好看,换来判断的可靠性。
结果本身稳不稳定
单看一条净值曲线不够,要看分布。
- 分年度或分阶段看表现。如果收益全部集中在某一小段时间,其余时间长期横盘或回撤,说明结果由少数几笔交易决定。
- 看交易笔数。样本太少时,任何统计指标都不稳定。几十笔交易的胜率和盈亏比,几乎说明不了问题。
- 看最大回撤发生的位置和持续时间。如果回撤期长到超出你的承受范围,即使最终收益为正,这个策略在实际执行中也很可能被中途放弃。
可以做一个扰动测试:随机剔除 10% 的交易,或者把交易顺序打乱,看整体结论是否还成立。结论对个别交易高度敏感,就不是一个稳健的结果。
逻辑能不能讲清楚
最后一步,回归常识。
- 这个策略赚的是什么钱?是承担了某种风险,利用了某种结构性行为偏差,还是仅仅在拟合历史噪声?
- 如果讲不出一个合理的机制,只能说「数据上就是这样」,那它更可能是一个巧合。
- 反过来,逻辑清晰但回测一般的结果,往往比逻辑模糊但回测漂亮的结果更值得继续研究。
把这几步连起来用:先确认数据干净,再确认成本真实,然后检查参数、稳定性和逻辑。任何一步过不了,后面的数字都不必细看。养成这个顺序,能省下大量在不可信结果上继续投入的时间。
相关文章
动手前先建个基准线
这篇讲怎么在开始优化数据流程之前,先建立一个可比较的基准线。内容包括选指标、定口径、留出对照样本,以及基准线失效时怎么判断,让后续每次改动都有据可查。
试得越多越容易碰巧成功
本文讲多重检验下的过拟合问题:为什么试的策略越多,越容易撞上一个看似有效的结果。给出回测中识别与处理这类假阳性的具体做法,包括记录试错次数、样本切分、参数敏感度检查与效应量估计。
回测里的幸存者偏差怎么避免
回测中最隐蔽的误差往往来自数据本身。这篇讲清楚幸存者偏差是怎么混进样本的,给出检查数据集、重建历史成分、设定对照组的可操作方法,尽量在动手之前就把这类误差挡在外面。