为什么回测赚钱≠实盘赚钱?四大杀手全解
我的掌握程度:
先掌握这个答案
四大杀手:①前视偏差(q-063):用了决策时点不可能有的信息→收益虚高;②成本乐观(q-056):零滑点/零冲击假设→净收益虚高;③幸存者偏差(q-067):漏掉退市股→风险低估;④过拟合(阶段3/6预告):反复调参挑出「历史上好看」的组合→样本外失效。次要杀手:执行时滞(信号到成交的延迟)、流动性假设(跌停/停牌可成交的幻觉,q-044/046)、数据偏差(复权错误、接口口径变化)。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
每一笔收益都要有可执行时间线
打印数据截止时间、信号时间、订单时间、成交时间和持仓收益区间。收盘信号不能乘当天完整收益;次日开盘成交也不能无条件拿到整个close-to-close收益。用原始价格判断可成交性,并纳入停牌与涨跌停。
用模拟盘先验证系统行为
先演练重复信号、网络超时、断线重连和部分成交,检查订单幂等与持仓对账。回测结果不验证交易通道、延迟与容量;启动、暂停和恢复都要有明确条件与记录。
本阶段实战方法 · 把行情数字变成可比较的收益
看股票、基金或策略业绩时,先对齐本金、起止日期、现金流与费用。
- 选一个固定区间,记录期初价值、期末价值、分红、出入金和交易费用。
- 没有中途出入金时,用(期末价值+已取出分红-期初价值-费用)÷期初价值计算收益;有出入金时先区分时间加权与资金加权。
- 用相同区间的基准作比较,同时记录最大亏损;不要单凭一次盈利评价能力。
使用边界
- 不同期限的收益不可直接排名;年化只是换算,不是未来收益承诺。
- 模拟价格不是实时行情。普通股票交易手数、T+1和费用应按具体市场规则核对。
背景 · 从一个困惑说起
阶段1里最贵的教训浓缩在一句话:回测收益是「历史数据+乐观假设」的产物。无数策略死在从回测到实盘的那一步——不是因为市场变了,而是因为回测里的世界从来不是真实世界。
由此产生的问题
回测与实盘的差距由哪些系统性来源构成?如何在设计阶段就把它们关进笼子?
核心概念
四大杀手:①前视偏差(q-063):用了决策时点不可能有的信息→收益虚高;②成本乐观(q-056):零滑点/零冲击假设→净收益虚高;③幸存者偏差(q-067):漏掉退市股→风险低估;④过拟合(阶段3/6预告):反复调参挑出「历史上好看」的组合→样本外失效。次要杀手:执行时滞(信号到成交的延迟)、流动性假设(跌停/停牌可成交的幻觉,q-044/046)、数据偏差(复权错误、接口口径变化)。
为什么需要它
①期望值管理:知道回测数字要打几折(经验:新手回测打5-7折,严格的打8折)才能用于决策;②防御性设计:回测框架的第一性原理不是「算收益」而是「诚实」——每个假设都问「实盘能做到吗」;③这个意识是量化研究者与「回测艺术家」的分水岭,也是面试最爱考的认知题。
实际应用场景
实操纪律:回测报告必附「假设清单」(成本/成交规则/股票池/样本内外);上线前走「模拟盘对照」(阶段10):跑2-3个月,统计实盘/回测偏差比;偏差>20%必须归因。
与之前知识的联系
阶段1埋下的所有种子在此汇合:q-063前视+q-056成本+q-067幸存者+阶段3将学的过拟合。下一题:新手最常见的三个错误(四大杀手的典型化身)。
⚠ 常见误解
- 回测收益打个折就安全了:折扣是经验估计不是保险;杀手们对不同策略的杀伤力不同(短线死于成本、小盘死于幸存者)
- 多回测几年能暴露问题:前视和幸存者偏差不会因样本变长而消失——它们是系统性方向性错误
- 实盘亏了=市场变了:先排查四大杀手(尤其过拟合),再谈市场变化——多数「失效」是从来就没真有效过
🛠 本题实践任务
把四大杀手写成四张便签(每个杀手:名字+一句话定义+一个自查问题),贴在显示器边缘。例如:前视——「我的信号,昨天的我知道吗?」
💡 提示(先自己想5分钟再看)
自查问题要能对任意代码快速回答;参考q-063的三保证书。
✅ 验收标准
四张便签上墙。每次回测跑完,先过一遍便签再看收益——这个顺序就是专业。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
Python · 独立工作线程 · 执行限时10秒
🤖 AI导师
导师会先检查你的前置知识(前视偏差、成本、幸存者偏差),再用案例、公式和代码帮助理解。此功能需要先启用服务。