发布 2026-10-14 · 更新 2026-10-25

验证一条交易规则,而不骗自己

回测是评估规则的标准方法 —— 也是骗自己的标准方法。三个检查把「结果」和「截图」分开:前视偏差防护、成本、幸存者偏差。


本页目录

这篇讲什么

第一篇教程把循环闭上了:Agent 拉数、代码计算、模型解释。这一篇讲下一步 —— 你有了规则,怎么知道它行不行?

多数回测的问题不是统计问题,是三个具体的错误,而且三个都能在几分钟内查。

任何一条不达标的回测,都不是结果,是一张截图。


检查一 —— 前视偏差防护

前视偏差,指规则用了在当时那个时点根本不可能拿到的信息。 这是“漂亮回测经不起实盘”最常见的原因。

AI 让它更严重,不是更轻。 一个在历史数据上训练过的模型,等于已经见过未来。

常见形态:

形态 长什么样
训练数据泄漏 让大模型「分析」一段它训练时见过的时期
重述财报 用后来修正过的数字,而不是首次披露的
指数成分 用今天的成分股做测试 —— 里面已经剔掉了失败的
同一根 K 线成交 用收盘价做决策,又在同一个收盘价成交

怎么查:对规则用到的每一个输入,问一句 —— 在这个决策作出的那一刻,这个数字真的拿得到吗? 如果你给不出来源,这个结果就不是结果。


检查二 —— 成本

一条频繁交易的规则,看起来免费时其实不免费。

失败模式几乎永远一样:回测假设了很薄的成本 —— 比如 0.1% 滑点 —— 而实盘在你最需要流动性的时刻给你 3%。

查法是把假设写出来:

# 任何结果都必须声明它的成本模型。
COST = {
    "commission": 0.0003,   # 单边
    "slippage": 0.0010,     # 假设值,单边
    "note": "滑点是假设 —— 写出来,别藏起来",
}

回测里没有成本,那它测的不是规则,是「交易免费」时的规则。

上面这个模型还藏了一件事:A 股印花税只在卖出时收。所以一个对称的 commission 数字本身就已经错了 —— 每一次出场都比入场贵。


检查三 —— 幸存者偏差

幸存者偏差,指数据集里只剩下了「活下来」的东西。

放到市场上:退市的公司从历史里消失了。 一个跑在「全部股票」上、却悄悄排除了那些归零股票的回测,测的是一个从没存在过的市场。

怎么查:问这个数据集包不包含退市标的。如果答案是「不含」,或者根本没人问过,那结果就带着一个没被量化的向上偏差 —— 而失败者恰恰是关键。


合起来看

一条规则值得被认真对待,是当这三条你都能说清:

问题 通过的标准
前视 每个输入在决策时刻都拿得到,且你能说出出处
成本 成本模型写明了,包括把滑点作为假设
幸存者 股票池包含了那些失败的标的

三条都不达标,不等于规则是错的。它等于你还不知道它对不对 —— 这是两个非常不同的状态。


数据从哪来

这三个检查都要求:你能带着写明的参数(窗口、股票池、复权口径)重新查一次数据。

如果你无法重跑取数、拿到同一条序列,你就做不了这三个检查中的任何一个。 这就是为什么实际中要用一个有稳定、有文档的结构的数据源,而不是抓来的网页。

# 可复现的取数:同一个请求,任何时候都拿到同一条序列。
curl "https://api.ashareapi.com/v1/kline?code=sh600519&period=day&count=250"

下一步

出处