← 返回目录
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
绩效评估:看懂数字不被骗
继续读下一节 →