← 返回目录
p0.2方法⏱ 约 13 分钟

专业与业余的七个判据

拿到任何一份回测报告,先问这七个问题

🔎 最后验证 2026-07📚 来源: 成本死亡线于 2026-07 在 ECS 实测(沪深300 2005-04-08~2026-07-29)、判据来源:回测方法学通识(未来函数/PIT/样本外/多重检验)与本课全部实测🧰 Python 3.12、pandas 3.0.5
为什么学这个

上一节你看到同一条规则能给出四个天差地别的结论。那么问题来了:下次拿到一份别人做的回测,你怎么知道它是第几级?

这一节把标准写死:七个判据。它们是本课六十五节每一节的验收清单,也是你以后面对任何一份回测报告、任何一个"年化 30%"的说法时的照妖镜。

七条里最容易被跳过的是第四条——成本。这一节我们给它一个可以算出来的数:这个策略的死亡线在哪

💡 打个比方

判断一份体检报告靠不靠谱,内行不看结论,看采样过程:空腹了吗?哪家实验室?试剂批号?对照组是谁?

回测报告一样。结论那一栏(年化多少)信息量最低,过程那几栏信息量最高。这七个判据,全部是问过程的。

七个判据

#判据一句话检验不合格的典型症状本课哪节负责
1对账逐笔盈亏累加,等于账户市值算出来的结果吗?只有一条净值曲线,没人验证过它算得对p4.6
2PIT每个数字在"当时"真的拿得到吗?用财报报告期而不是披露日;用了事后调整过的数据p1.7
3样本外参数在完全没参与挑选的数据上验过吗?只报全样本成绩;或"验完发现不行,回头再调调"p5.5
4成本成本涨到多少,这个策略就不如躺平?零成本回测;或只算佣金不算滑点p5.7,本节演示
5容量放多少钱进去,它会失效?从不提资金规模;用日成交额很小的标的回测p5.7
6多重检验你一共试了多少组?夏普该打几折?"我调出了一组年化 26%"(不说试了 591 组)p3.4
7可复现换台机器,别人能跑出同一个数字吗?代码不给、数据不给、随机种子不固定贯穿全课

七条里任何一条不合格,那份报告的结论就不能用来做判断——不是"要打个折",是"不能用"

判据四实操:算出策略的死亡线

「要考虑交易成本」这句话人人会说,但它不是态度问题,是一个可以算出确切数字的问题。

做法很简单:把单边成本当自变量扫一遍,找出策略年化跌到买入持有以下的那个成本点。我把它叫做死亡线

数据:沪深300,2005-04-08 → 2026-07-29,21.3 年,买入持有年化 7.41%(死亡线的判定基准)。

MA5/20:年均 14.6 次成交

单边成本年化相对躺平
0 bp10.41%+3.00pp
5 bp9.60%+2.20pp
7.5 bp9.20%+1.79pp
15 bp8.01%+0.60pp
20 bp7.22%-0.19pp 输
50 bp2.60%-4.81pp

死亡线 ≈ 单边 18.8bp(0.188%)。

MA5/55:年均 6.2 次成交

单边成本年化相对躺平
0 bp13.54%+6.13pp
20 bp12.14%+4.73pp
50 bp10.07%+2.66pp

死亡线 ≈ 单边 89.2bp(0.892%)。

这两个数字放在一起说明什么

同一个标的、同一类规则,只因为换手率差了一倍多(14.6 次/年 vs 6.2 次/年),能承受的成本差了近 5 倍。

于是有了一条可以直接用的经验:看到一个高频交易的策略在吹超额收益,先算它的死亡线。换手越高,它的超额就越可能只是纸面上的——你的真实成本(佣金 + 滑点 + 冲击成本)只要越过那条线,超额立刻变成倒亏。

⚠️ 避坑

别把 MA5/55 的 89.2bp 当成"这个策略更好"的证据。

MA5/55 这组参数,正是上一节在 591 组里挑出来的样本内冠军。它在全样本上好看,一部分原因就是它被挑出来的方式。死亡线本身也会被参数偏差污染——判据四合格,不代表判据三、判据六合格。

七条判据是同时成立才算过关,不能挑着用。

怎么用这七条

当你是审阅者:按顺序问。经验上,一份来路不明的回测报告通常在第 3、4、6 条上倒下,而它们恰好是最容易被"不小心"跳过的三条。

当你是作者:本课每一节的代码都会把这七条中相关的几条落成机制——不是"记住要小心",而是让代码在你犯错时报错、让输出把假设打印出来。这就是 P4 章为什么要自己写引擎:外部库不会替你对账

🔧 动手做:算出你自己那条策略的死亡线(6 分钟)

cost_death_line.py,它做的事只有一件:把单边成本从 0 一路调到 50bp,看年化什么时候跌破买入持有的 7.41%

【MA5/20】年均 14.6 次成交
     5.0bp     9.60%     +2.20pp 赢
    15.0bp     8.01%     +0.60pp 赢
    20.0bp     7.22%     -0.19pp 输
→ 死亡线 ≈ 单边 18.8bp:成本高于此,该策略不如买入持有

三件事动手做:

  1. 把换手率调高:把 MA5/20 换成 MA3/10(改脚本顶部的参数),成交次数会从 312 涨上去,再算一次死亡线——看它怎么往下掉。换手越高的策略,死亡线越低,越经不起成本。
  2. 对照你自己的券商:佣金万 2.5(2.5bp)+ 印花税卖出万五(5bp,只收卖出,与后文各节引擎同口径)+ 滑点。把你的真实数字代进去,落在死亡线哪一侧?
  3. 拿一份你见过的"年化 30%"回测,问它一个问题:年均成交多少次? 答不上来,这个 30% 就没有意义——它可能整个建立在成本假设为 0 上。

做到这里你应该有:MA5/20 和 MA5/55 两条死亡线(18.8bp vs 更高)、你自己券商的真实单边成本、以及一个能立刻问出口的问题。

为什么:判据四(成本)是七条里最容易验证、也最常被跳过的一条。它不需要你懂统计,只需要你会做一次除法——而它一个人就能否掉大半的"高收益策略"。

❓ 测验
有人给你一份回测:沪深300 上跑双均线,年化 12%,买入持有 7.4%,代码开源、数据公开、随机种子固定。按七个判据,你下一步最该问什么?
✏️ 填空
把「成本涨到多少,策略就不如买入持有」的那个临界成本,本课称为策略的 ___ 线。

📌 免责:本课为技术教学,所有回测数字均为历史模拟,不构成任何投资建议;指数不可直接交易,文中仅作宽基标的的代理;投资有风险,盈亏自负。

✅ 小结

七个判据到手:对账、PIT、样本外、成本、容量、多重检验、可复现。你也拿到了判据四的算法——死亡线:MA5/20 是单边 18.8bp,MA5/55 是 89.2bp,换手率差一倍多,抗成本能力差近 5 倍。

同时记住那个警告:七条要同时成立。MA5/55 死亡线漂亮,但它本身是 591 组里挑出来的冠军,判据三和判据六仍然亮红灯。

下一节是工程地基:虚拟环境、依赖锁定、项目骨架、pytest。听起来最无聊,却是判据七(可复现)的唯一实现方式——一个连环境都锁不住的项目,谈不上任何"结论"。

下一节 → 工程地基:环境、依赖锁定与测试
🔎 来源与核验· 3 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「买入持有年化 7.41%(沪深300 2005-04-08~2026-07-29,21.3 年,5177 交易日)」
📚 本节 code/cost_death_line.py,2026-07 于 ECS 实测✓ 已核验 2026-07
「MA5/20 零成本年化 10.41%,年均 14.6 次成交,死亡线 ≈ 单边 18.8bp;MA5/55 零成本年化 13.54%,年均 6.2 次成交,死亡线 ≈ 单边 89.2bp」
📚 本节 code/cost_death_line.py 实测输出 outputs/stdout.txt(二分法定位死亡线,判定基准=买入持有年化)✓ 已核验 2026-07
「MA5/55 系上一节 591 组网格的样本内冠军,其全样本表现含参数选择偏差」
📚 本课 p0.1 实测✓ 已核验 2026-07
所有数字为教学用历史模拟,不构成收益暗示或投资建议。
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · p0.3
工程地基:让判据变成会报错的测试
继续读下一节 →