2026年八月30日 · 统计学

回测需要多少笔交易,夏普比率才有意义?

回测需要多少笔交易,夏普比率才有意义?

这是我最常被问到的问题。通常是有人刚跑完第一个策略,就会问:需要多少笔交易,结果才算是真的? 通常问题里还带着一个数字。“我有 1,200 笔交易,够了吧?”说实话,答案总让人不满意,因为关键根本不是交易笔数。

先用一行公式概括,然后我会在本文剩下的篇幅里解释它为什么让人难受。

1/√T年化夏普比率的标准误,T 以年计
±0.88任何 5 年夏普比率的 95% 区间
1.4在同样 5 年里,100 个纯噪声策略中运气最好的那个能达到的夏普比率

夏普比率的标准误是多少?

对于基于 n 个周期收益计算的夏普比率,假设收益相互独立且大致服从正态分布,抽样误差为:

SE(s) ≈ √((1 + s²/2) / n)

其中 s 是按相同频率计算的夏普比率。把等式两边都年化后,会得到一个简洁的结果。若每年有 k 个观测值,数据覆盖 T 年,年化夏普比率 S 的标准误为:

SE(S) ≈ √((1 + S²/(2k)) / T)

看看分母里的 2k。日收益的 k = 252,因此即便夏普比率为 2,4/504 ≈ 0.008 对分子也没什么影响。整个公式最后简化为 1。年化夏普比率的标准误约为 1/√T,其中 T 是数据覆盖的日历年数。它几乎不受夏普比率本身影响,也不取决于采样频率,更完全不取决于你做了多少笔交易。

所以:

数据年数SE(夏普比率)若测得 1.5,对应的 95% CI
11.00−0.46 至 3.46
20.710.11 至 2.89
30.580.37 至 2.63
50.450.62 至 2.38
100.320.88 至 2.12

如果一份回测用 2 年历史数据测出夏普比率为 1.5,在 95% 置信水平下,统计上无法将它与抛硬币区分开来。这是大多数加密货币研究面临的基本处境,因为多数人手上干净、经过幸存者偏差校正且准确计入手续费的数据,大约从 2022 年才开始;而一半有意思的交易标的在 2023 年之前还不存在。

可我有 40,000 笔交易,这还不够吗?

不够。这是我最想纠正的误解。

交易笔数和样本长度是两个不同的量,公式里只出现了其中一个。如果你的策略在 6 个月里触发了 40,000 次,那么 T = 0.5,SE ≈ 1.41。若测得夏普比率为 2.0,95% 区间将是 −0.8 到 4.8。做了 40,000 笔交易,诚实的结论依然是:“可能不错,也可能是负收益。”

原因在于,这 40,000 笔交易并不是对 40,000 种不同市场状态做出的 40,000 次独立押注。它们只是大约 180 天市场行为中的 40,000 个样本,而这些日子彼此相关,各个市场机制也相互关联。一套高频均值回归组合连续 4 个月每天赚钱,实际上只押了一次:在当前流动性机制下,短周期均值回归仍然有效。它观察到这次押注得到验证,可能也就少数几次彼此独立的机会。

我会这样转换思路:数市场机制,不数成交。这个策略经受住了多少种真正不同的市场环境?一套资金费率套利策略如果只经历过一段长期基差为正的时期,那么不管它记录了多少次小时级调仓,n 都是 1。

快速诊断:用 20 天的区块长度对每日 P&L 做区块自助抽样,再观察重采样后夏普比率的分布。如果第 5 百分位低于零,交易笔数就无关紧要了。用 numpy 写下来大约只要 9 行代码;单这一项检查劝退我的策略,比其他任何检查都多。

这个公式适用于真实策略吗?

不完全适用,而且误差方向对你不利。1/√T 的结果假设收益是 IID 正态分布。真实策略收益存在自相关,也有偏度,而凡是看起来像套利、做空波动率或均值回归的策略,偏度通常为负。Mertens 的修正把这些矩纳入计算:

SE(s) ≈ √((1 + s²/2 − γ₃·s + (γ₄−3)·s²/4) / n)

其中 γ₃ 是偏度,γ₄ 是峰度。负偏度会使 −γ₃·s 项变成正值,从而扩大区间。超额峰度还会进一步扩大区间。对于偏度约为 −1.2、峰度约为 9 的典型加密货币套利 P&L,我见过修正后的标准误比朴素算法高出 30–40%。Lo 在 2002 年的论文处理了自相关的影响,结论方向相同:收益的正序列相关会抬高朴素夏普比率、缩小表面上的误差,这是个棘手的组合。

所以,把 1/√T 当作不确定性的下限。这已经是最乐观的情况。

如果我测试了 500 个变体,夏普比率得多高才够?

现在说说对任何运行自动化研究流水线的人都很重要的问题。这也是我们在 Stratmill 每天面对的情况:生成代理不会只产出一个候选策略,而是会产出数百个。

从标准正态分布中抽取 M 个样本,其最大值的期望大约是 √(2 ln M)。乘以标准误,就能得到 M 个毫无价值的策略中,运气最好的那个会呈现出的夏普比率。

测试策略数√(2 ln M)5 年下纯噪声策略的最高夏普比率(SE 0.45)2 年下纯噪声策略的最高夏普比率(SE 0.71)
102.150.961.52
1003.031.362.16
5003.531.582.50
5,0004.131.852.93

看倒数第 2 行。如果你用 2 年数据生成了 500 个候选策略,胜出策略的夏普比率为 2.4,那么你其实什么也没发现。这个结果还在噪声范围内。Bailey 和 López de Prado 提出的折减夏普比率,用试验夏普比率的方差取代粗略的 √(2 ln M),对这一问题进行了形式化处理。值得认真实现,但仅粗略计算就足以让你今天改变做法。

有两件事让实际情况比表格显示的更糟。第一,M 不是你保存的策略数,而是你评估过的策略数,其中包括每一次参数微调、每一次“我就试试 30 周期回看窗口吧”,以及每一次修复错误后的重跑。没人会诚实地把这些都数清。第二,你的候选策略并非独立抽样,因此 √(2 ln M) 会高估有效覆盖面;不过,试验之间的相关性也意味着,某个幸运的市场机制会同时抬高一整批策略的表现。

量化研究里最危险的数字,是那个从来没人记录的数字:你看过多少次结果。

那我实际该怎么做?

5 件事,按我的执行顺序排列。

  1. 记录每一次评估。每次运行回测,计数器就加 1;计数要持久保存,而且永不重置。如果说不出 M 是多少,就说不清门槛该设在哪里。这是整份清单里最值得投入 1 小时工程时间的一项。
  2. 始终报告夏普比率及其区间。不要只报一个裸数字。我们的回测报告会输出 1.72 ± 0.51 (2.9y, skew-adjusted),而 ± 绝不是可有可无的部分。它会改变整个团队讨论结果的方式。
  3. 先根据 M 和 T 设定门槛,再看结果。从上表查出数字并记下来。事后设定门槛,会让所有人都能说服自己接受过拟合曲线。
  4. 样本不足时,优先拓展覆盖面,而不是提高频率。你没法凭空增加日历时间,但可以把同一信号应用到 40 个互不相关的交易标的上。这样确实能提高有效 n,而提高交易频率做不到。要留意相关性:在风险规避时段,40 个加密货币永续合约其实就是 1 个标的。
  5. 然后做模拟交易。样本外时间每天只增加 1 天,没有捷径;正因如此,这也是唯一无法过拟合的样本。

这些做法都不能让短样本变得可靠。它们能让你诚实地看待短样本所能支持的结论,而这种结论远没有多数回测报告暗示的那么有力。2 年数据测得夏普比率为 1.5,足以成为一个值得用模拟交易检验的假设,但还算不上发现。

夏普比率过拟合回测统计显著性量化研究
← 全部文章