第 2 章 · 04 验证工具与回测陷阱 本节摘要:回测跑出一个漂亮的净值曲线,远远不够——你还得问「这份表现有多脆弱」。本节讲清 Vibe-Trading 在 Validate 阶段可挂载的验证工具:基准对比(benchmark)、蒙特卡洛(Monte Carlo)、Bootstrap 置信区间、Walk-Forward、run card,它们各自检验什么、局限在哪。然后是回测的两大陷阱—— (偷看未来)与违反 PIT(点在时间),一旦违反,回测结果会彻底失真,实盘必然失效。读完本节,你能判断一个回测结果到底可不可信,并识别最常见的作弊式错误。 内容来源:英文文档 的 Validation 部分汉化,补充原项目中文入门教程第 5 章与术语表的陷阱说明。
本节摘要:回测跑出一个漂亮的净值曲线,远远不够——你还得问「这份表现有多脆弱」。本节讲清 Vibe-Trading 在 Validate 阶段可挂载的验证工具:基准对比(benchmark)、蒙特卡洛(Monte Carlo)、Bootstrap 置信区间、Walk-Forward、run card,它们各自检验什么、局限在哪。然后是回测的两大陷阱——
lookahead(偷看未来)与违反 PIT(点在时间),一旦违反,回测结果会彻底失真,实盘必然失效。读完本节,你能判断一个回测结果到底可不可信,并识别最常见的作弊式错误。
内容来源:英文文档
core-concepts/backtesting的 Validation 部分汉化,补充原项目中文入门教程第 5 章与术语表的陷阱说明。
阅读完本节,你应当能够:
lookahead(偷看未来),并说出 Vibe-Trading 在哪几处设防。run card 为什么是「可复查」的关键产物。新手看回测,最爱看的就是那条「一路向右上」的净值曲线。但这条曲线本身说明不了太多——因为它可能是:
所以一个可信的回测,不能只给一条曲线,而要在结果上挂载多角度的验证证据。这正是第 2 章 01 五步工作流里 Validate 阶段做的事。
💡 验证的目的:不是证明「这个策略一定能赚钱」,而是回答「这份历史表现有多脆弱」「换一种扰动还能不能成立」「是不是只在特定条件下好看」。验证降低不确定性,但不能消除。
策略不是只看「赚不赚钱」,而是看「有没有跑赢一个简单的参照物」。如果你费尽心机做策略,一年收益 8%,但同期 SPY 涨了 15%,那这个策略其实没给你带来超额收益——你直接买 SPY 就好。
常见的 benchmark:
💡 选 benchmark 的原则:选一个「你不用努力就能拿到的被动收益」作为参照。如果你的复杂策略跑不赢简单的指数 ETF,它的价值就要打问号。
蒙特卡洛的思路是:对回测里的某些不确定成分(成交价、成交顺序、参数微扰)做大量随机扰动,看结果是否稳定。如果换几十种随机场景策略都赚钱,说明它对噪声不敏感;如果稍有扰动就亏,说明它很脆弱、可能过拟合。
原始回测: 净值 1.5 扰动 1: 净值 1.4 扰动 2: 净值 1.6 扰动 3: 净值 0.9 ← 警惕!某些扰动下大幅亏损 ... 扰动 N: 净值 1.5
⚠️ 蒙特卡洛的边界:它能检验「对随机噪声稳不稳」,但检验不了「市场结构变化」。如果市场风格整个切换(比如从动量市变成反转市),蒙特卡洛再稳健也无济于事。
Bootstrap 是一种重采样方法:从历史收益序列里有放回地反复抽样,得到大量「替代历史」,从而给出收益估计的分布。它的价值是让你不只看到「年化 12%」这个点估计,而是看到「年化大概率落在 8%~16%」这样的区间——区间越窄,估计越可信;区间宽到包含 0,说明这个收益可能只是运气。
💡 Bootstrap vs 蒙特卡洛:蒙特卡洛是「给模型加随机扰动」,Bootstrap 是「对历史样本重采样」。两者都用来评估稳健性,但思路不同。
Walk-Forward(前推验证)是检验过拟合最有力的工具。它的做法是把历史切成多段,每段「用前一段拟合参数,在下一段(样本外)测试」,然后滚动前进:
时段 1: [训练] → [测试] 时段 2: [训练 训练] → [测试] 时段 3: [训练 训练 训练] → [测试] ... 汇总所有「测试」段的表现,看样本外是否稳定。
如果一个策略在所有 Walk-Forward 的样本外段都赚钱,说明它不是单纯「背下了历史」;如果样本内很好看、样本外一塌糊涂,那就是过拟合。
⚠️ 过拟合是回测的头号敌人:参数越多、调优越细,过拟合风险越高。一个朴素的、参数少的策略,即使历史表现稍逊,往往比一个高度优化的复杂策略更可信。
run card 是一次研究运行的「身份证」。它记录:
signal_engine.py。有了 run card,三个月后你想复盘「当时那个回测到底怎么跑的」,就有据可查;想用同样的设定重跑验证复现,也能精确复原。
💡 run card 与 artifact:run card 是 artifact 体系的一部分。第 2 章 01 讲过,artifact 痕迹是「研究工作台」区别于「问答机器人」的根本,run card 是其中最关键的一类痕迹。
讲完验证工具,来讲陷阱。第一个、也是最致命的陷阱叫 lookahead(偷看未来)——用了「当时还不知道的信息」假装提前知道。
典型场景:
一旦偷看未来,回测会给出虚假的优异表现,而这套规则在真实交易里必然失效——因为真实交易里你根本拿不到那些「未来信息」。
⚠️ lookahead 是回测第一大忌。Vibe-Trading 在多处设防:
- 因子算子禁止负向 shift:不允许用未来的数据算当前信号。
- 回测用下一根 bar 执行:今天生成的信号,在下一根 bar 的开盘价成交,降低偷看风险。
- 财务字段强调 PIT:只用当时已公开的财报数据。
PIT(Point-in-time,点在时间) 的原则是:在任意时刻,只使用当时已经公开、已经可获得的数据。
PIT 和 lookahead 是一对相关但侧重点不同的概念:
最容易违反 PIT 的是财务数据。比如某公司 2023 年 Q3 的财报,描述的是 7-9 月的经营情况,但这些数据要到 10 月底才公开。如果你在 8 月的回测里就用了「Q3 财报数据」,虽然数据描述的是 7-9 月(看起来是「过去」),但它在 8 月根本不可用——这就是违反 PIT。
Vibe-Trading 在三处强调 PIT 边界:
💡 怎么自查 PIT:对每个用到的数据,问自己「在回测的那个时刻,这个数据已经公开了吗?」如果答不上来或答「没有」,就是违反 PIT。
除了 lookahead 和 PIT,还有几个新手容易踩的坑:
把本节的工具和陷阱汇总,给你一个「体检清单」:
| 检查项 | 通过标准 |
|---|---|
| benchmark 对比 | 跑赢简单的被动参照(如 SPY/沪深 300) |
| 蒙特卡洛 | 对随机扰动稳健,不存在某扰动下大幅亏损 |
| Bootstrap 置信区间 | 收益区间窄且不含 0(或远离 0) |
| Walk-Forward | 样本外段稳定,不是只在样本内好看 |
| lookahead 自查 | 信号只用到当时已知信息,执行在下一根 bar |
| PIT 自查 | 财务等数据只用当时已公开部分 |
| 成本扣除 | 扣全手续费、滑点、印花税 |
| run card | 完整记录参数/数据/时间/引擎,可复查复现 |
⚠️ 即使全部通过,也不构成投资建议。验证工具降低不确定性,但市场结构变化、黑天鹅事件、流动性枯竭都可能让历史验证失效。实盘前仍需经过你自己的判断和模拟盘测试。
⚠️ 所有验证工具都是「证据助手」而非「保证」。本节及整个教程不构成投资建议,实盘前必须经过你自己的判断、券商确认、模拟盘验证和风险控制。
至此第 2 章结束。你已经掌握了研究工作流五步、策略与 Signal Engine、回测如何工作、验证工具与陷阱。下一章我们将进入数据源与券商连接——先把市场、数据源、券商账户三个最易混淆的概念彻底分开,再讲数据路由与券商连接器的安全分级。