q1.9动手⏱ 约 10 分钟
防三坑实操:亲手体验回测怎么骗人
故意犯规两次,让 q0.5 的坑在你自己的代码里现形
🔎 最后验证 2026-07📚 来源:承接 q0.5(回测三大骗术)、本节全部对比数字于 2026-07 实测(沪深300 2005-04-08 起)🧰 pandas
为什么学这个
q0.5 你听我讲了回测的三种骗术:偷看未来、背答案、只测活人。听懂是一回事——今天,我们亲手骗自己两次,再亲手拆穿。
预告两场车祸的数字:
- 第一场:同一个策略,一行代码之差,累计收益从 724% 膨胀成 5248%——7 倍的幻觉。
- 第二场:在前 14 年数据里精心调出的「最优参数」,年化 18.72%;拿到后 7 年一跑,年化 -3.24%,当场由正转负。
这是整个 Q1 的灵魂课。做完它,你对任何回测数字的免疫力,会超过绝大多数散户。
💡 打个比方
今天的两个实验,像魔术教学:先在你眼前把魔术完整变一遍(哇,收益 5248%!),再把手法拆给你看(哦,硬币早就藏在袖口里)。
见过手法的人,就再也不会为魔术尖叫了。满网的「回测暴利」截图,今天之后在你眼里全是袖口里的硬币。
实验一:偷看未来——一行代码的 7 倍幻觉
用 pandas 快速实现均线策略(向量化写法,不用 backtrader 也能算),注意那行 shift(1):
import pandas as pd
df = pd.read_csv("csi300.csv", parse_dates=[]).set_index().sort_index()
close = df[df.index >= ][]
ret = close.pct_change().fillna()
ma5, ma20 = close.rolling().mean(), close.rolling().mean()
signal = (ma5 > ma20).astype()
pos_cheat = signal
pos_honest = signal.shift().fillna()
cum = pos: ( + ret * pos).prod() -
(, (cum(pos_cheat) * , ), )
(, (cum(pos_honest) * , ), )

都看到这了,打个赏呗!
接下来 · q1.10
绩效评估:看懂数字不被骗
继续读下一节 →