随期而动的期货/期权投资笔记

回测与样本外:如何证伪一个“看起来能赚钱”的策略

内容持续修订,过时部分会及时剔除

一条漂亮的回测曲线,可能只是上千组参数里挑出来的“噪音冠军”。回测不是证据,是假设;真正专业的做法,是先设计好怎么证明自己错了,再决定要不要上线。

三句话记住这篇

1. 回测是证伪工具,不是盈利承诺。

2. 样本外只测一次;反复偷看调参,样本外也会被污染。

3. 参数一换就亏、成本一加就亏的策略,不是策略,是拟合。

承接上文:上一篇用期望值给系统定了验收指标;这一篇检验这些指标是不是回测拟合出来的。指标好看、但一换参数就崩,说明好看的是曲线,不是优势。

一、回测的正确角色:证伪工具,不是盈利承诺

一个回测能说明的事情很有限:在特定数据、特定成本假设、特定执行规则下,这套逻辑曾经产生过某种收益路径。它不能说明未来一定有效,也不能说明你有能力执行。

把回测当成科学实验:先写假设(规则)、再写证伪条件(什么情况下算失败)、最后才看结果。顺序反了,你就会不自觉地挑参数、挑区间、挑品种,直到曲线好看为止。

二、六个最常见的回测陷阱

曲线漂亮,实盘亏钱,通常栽在这六处

1. 前视偏差(Look-ahead Bias):用了当时还拿不到的数据,比如用收盘价信号在同一根 K 线收盘价成交、用后来修订过的宏观数据、用未来才知道的主力合约。

2. 幸存者偏差(Survivorship Bias):只回测今天还活着的品种/合约,忽略了退市、到期、流动性枯竭的样本。

3. 过拟合与数据窥探:参数组合试了几百上千组,挑出样本内最好的那组。它不是“发现规律”,而是“记住噪音”。

4. 成本与滑点低估:手续费、买卖价差、冲击成本、保证金占用都没算够,尤其在高频与低流动性品种上。

5. 成交假设不现实:假设限价单一定成交、止损一定在设定价成交、跳空时还能全身而退。

6. 市场结构变化:政策、参与者、合约规则、波动率 regime 变了,历史参数自然失效。

这六条里,最致命的是过拟合。你试的参数越多,样本内最优结果越可能是运气。一个粗略的直觉:试 1,000 组参数,哪怕全是随机噪音,也总能挑出一组“看起来很棒”的曲线。

三、样本内、样本外与滚动检验

正确的验证顺序不是“全样本回测→挑最好→上线”,而是:

  1. 样本内(In-sample):用来提出假设、粗调规则。不要在这里追求极致收益。
  2. 样本外(Out-of-sample):锁起来不用,最后只测一次。样本外崩掉,说明样本内是拟合。
  3. 滚动/前进分析(Walk-forward):用过去 N 年优化,紧接着用未来 M 个月检验,然后窗口向前滚动。它更接近真实交易中“只能利用历史”的处境。
  4. 参数稳定性:好策略不是“某一个参数点很赚钱”,而是参数在小范围内移动时,收益与回撤没有剧烈跳变。孤峰式的参数,通常是过拟合。
  5. 蒙特卡洛/自助法:对交易顺序、滑点、缺失数据做重采样,看最大回撤和破产概率的分布,而不是只看一条净值曲线。

如果参数一换、起点一换、品种一换,策略就从暴利变亏损,那它不是策略,是曲线拟合。

过拟合长什么样:一张参数表

拿双均线举例,测九组“快线 / 慢线”参数,样本内挑最好的上线,结果是(示例数据,仅作示意):

参数(快线/慢线) 样本内年化 样本外年化 样本外最大回撤
8 / 24(样本内第一) 28% 3% 35%
10 / 30 22% 9% 22%
20 / 60(样本内中游) 18% 12% 16%

样本内的冠军,样本外几乎归零;样本内只排中游的参数,样本外反而最稳。这不是运气差,而是样本内排名本来就被噪音主导:你测的组数越多,越容易挑到“刚好记住这段行情”的那一组。

所以选参数要看平台,不看尖峰:把参数往左、往右各挪一格,收益和回撤都只是平缓变化,说明这个区域有真实逻辑;只有某一个点特别亮,旁边立刻塌陷,那多半是拟合出来的孤峰。

一次 walk-forward 的具体做法

  1. 切窗口:比如用前 3 年做训练,紧接 6 个月做检验。
  2. 只在训练段调参:训练段之外的数据,一格都不许看。
  3. 冻结参数:进入检验段后,不许再改任何规则。
  4. 向前滚动:窗口整体后移,重复上述过程,记录每一段样本外结果。
  5. 看整体:多少段样本外为正?最差一段回撤多少?如果一半以上为负,直接淘汰。

这比“全样本回测一次”麻烦,但它更接近真实交易:你永远只能利用过去,不能偷看未来。

四、看哪些指标:别只盯年化收益

指标 看什么 容易掩盖什么
年化收益 / 几何平均 长期复利速度 路径中的深回撤与长恢复期
最大回撤 最坏情况下账户有多痛 回撤持续时间、恢复难度
Calmar / MAR 年化收益 ÷ 最大回撤 尾部风险与杠杆结构
Sharpe / Sortino 单位波动的超额收益 肥尾、偏度、非线性亏损
胜率 / 盈亏比 / 期望值 交易层面的优势来源 连亏序列与样本量不足
换手率 / 成本占比 策略对成本和容量的敏感度 规模放大后的冲击成本
暴露度 / 相关性 收益来自哪里、是否集中 隐藏的 beta、拥挤交易

本站的最终标尺仍是几何平均与最大回撤:年化 30%、最大回撤 60% 的策略,长期复利未必赢过年化 15%、最大回撤 15% 的策略。回撤越深,恢复需要的涨幅越非线性。

五、成本、容量与执行

回测里最容易“作弊”的地方是成本。真实交易至少有:

还要算容量:一个策略在 100 万资金上有效,不代表在 1 亿资金上有效。容量受合约流动性、持仓限额、冲击成本和市场深度约束。回测不写容量,等于假设自己是市场里唯一的人。

回测要跑多少笔、覆盖几段行情

“样本够不够”不是看年份,而是看两件事:

一个实用的检查:把回测切成三段,分别看每段的期望值和最大回撤。如果只有一段赚钱,另外两段持平或亏损,那这套策略更像“行情适配器”,而不是稳定优势。

六、上线前的证伪清单

先写死,再上线

1. 规则是否在回测前就写清楚?有没有事后改参数?

2. 样本外结果是否独立?还是反复偷看、反复调参?

3. 参数在小范围内是否稳定?起点/终点换一换还成立吗?

4. 成本、滑点、保证金、容量是否按保守值计入?

5. 最大回撤与恢复期,按当前真实仓位能不能扛住?

6. 失效条件是什么:滚动几何平均转负、回撤超限、连续亏损超阈值?

7. 是否经过模拟盘/小资金实盘验证?执行偏差有多大?

三个常见问题

“样本外要留多长?”至少留一段完整的不同行情,比如 1–2 年或总样本的 20%–30%。只留三个月,可能刚好撞上同一种行情,测不出问题。

“试多少组参数算过度拟合?”没有绝对数字,但试得越多,挑到“噪音冠军”的概率越大。更稳的做法是看参数稳定性:参数在小范围内移动,收益和回撤不能剧烈跳变。

“回测赚钱、实盘亏钱,先查什么?”先查四件事:成本算够没有、成交假设现不现实、有没有前视偏差、市场结构是不是变了。四项都排除,再怀疑策略。

七、和本站体系怎么接上

  1. 证伪先行:回测的目的不是证明策略能赚,而是找出它在什么条件下会失效。
  2. 几何平均验收:不看单次暴利,看长期几何平均、最大回撤、恢复期。
  3. 刚性止损:回测必须包含止损与跳空假设;没有止损的回测,是在假设自己永远能扛。
  4. 仓位按最坏情况:回测的最大回撤只是样本内历史,真实仓位要按“更坏一次”来压。
  5. 优势会衰减:上线后持续监控滚动期望值与回撤,失效就停机,不把“长期会回来”当理由。

“回测的任务不是让你相信策略,而是让你知道它在什么情况下不值得相信。写不出这个条件,曲线越漂亮越危险。”

— 本站体系札记
下一步

继续读:执行与复盘:把规则变成习惯;策略失效:什么时候该停,怎么停。

如果这篇让你少踩一次坑,转给那个回测曲线很漂亮、正准备加杠杆上实盘的朋友。

← 返回首页