← 返回博客列表

量化投资从入门到精通

【量化投资从入门到精通 #27】回测怎么做才不骗自己样本内样本外与walk-forward

2026年08月22日 16:57 · 麦蕊智数 MyData

进入评价与风控层。前面教你怎么造策略,从这篇开始教你怎么不被自己造的策略骗

一、这个方法解决什么投资问题

你翻了 20 组参数,找到一组回测收益 +12.71% 的。然后你就相信它了。

问题是:这 12.71% 是用同一批数据挑出来的。挑的过程本身就已经把答案偷看了一遍。相当于先看完考卷再选复习范围——考多少分都不能说明你会。

二、核心思想:把数据切开,用没看过的部分打分

做法 说明 可信度
全样本最优 在全部历史上找最好参数,再报告全部历史的收益 ❌ 事后诸葛亮
样本内 / 样本外 前半段选参数,后半段验证 ✅ 及格线
walk-forward(前推) 滚动:用第 N 段选参数,跑第 N+1 段,再往前滚 ✅✅ 最接近实战

walk-forward 的精髓是:每一次决策,都只用它当时能看到的信息。 这正是实盘的样子——你今年年初选参数,只能看去年的数据。

三、实操演示

GRID = [(3,10),(5,20),(5,30),(10,30),(10,60),(20,60)]

# walk-forward:4 段滚动,每段用"上一段最优参数"跑下一段
size, wf = len(kl)//4, 1.0
for b in range(1, 4):
    train = kl[(b-1)*size : b*size]
    test  = kl[b*size : (b+1)*size]
    p = max(GRID, key=lambda q: ret(train, *q))   # 只用历史段选参
    wf *= (1 + ret(test, *p))                     # 在未来段兑现

真实输出(2026-08-06,600036,250 根 K 线):

方法 结果
全样本最优 (3,10),报全样本收益 +12.71%
样本内最优 (3,10),报样本外收益 样本内 −0.64% → 样本外 +12.10%
walk-forward 三次滚动 段2 −1.55%、段3 −1.23%、段4 +11.03% → 累计 +7.96%

四、结果解读

三个数字,一个比一个诚实:12.71% → 12.10% → 7.96%

最值得看的是 walk-forward 的分解:三段里两段是亏的,全部利润来自最后一段的 +11.03%。如果你只看"累计 +7.96%",会以为它稳定赚钱;看了分段才知道它是靠一波行情吃饭的。

这就是 walk-forward 的第二个价值:它不只给你一个更保守的数字,还告诉你收益的时间分布——是细水长流,还是全押在某一段。后者意味着你可能要忍受很长时间的亏损才等到那一波。

另外注意:样本内最优参数 (3,10) 的样本内收益其实是 −0.64%(负的)。也就是说这批参数在样本内全都不赚钱,你只是矮子里拔将军。这时候正确的动作不是"选出最好的那个",而是承认这个策略在这段数据上不成立

五、常见陷阱

  • 切完样本又回头调参:一旦你根据样本外结果改了策略,样本外就变成样本内了,得重新切。
  • 样本外太短:只留 30 根 K 线的"样本外"没有统计意义,至少留三分之一。
  • 只看累计不看分段:walk-forward 必须逐段看,全靠一段的策略风险极高。
  • 数据窗口太窄:250 根只有一年,跨不过牛熊。有条件应拉长到 3–5 年(麦蕊日线可回溯至 1990-01-01)。

六、小结 + 下篇预告

样本内选参、样本外验证、walk-forward 前推——三级台阶,越往上越接近实盘真相。记住:任何没有报告样本外结果的回测,都只是一张宣传图。

下篇 #28:参数优化的陷阱——为什么网格搜索越努力,样本外越差。

免责声明

本文为量化方法教学,标的为示例,不构成投资建议,不承诺收益。投资有风险,入市需谨慎。

标签: 股票行情API
QQ 客服 3826425416 咨询时请提供证书号或订单号,便于快速处理
咨询