跳到正文

Haircut Sharpe:修正自相关

收益率存在自相关时,报告出来的夏普会高于真实夏普。Haircut Sharpe 修正了这部分偏差。本文完整推导公式,并说明如何从自相关函数估计有效样本量。

第 9 篇 · 共 12 篇 约 14 分钟

如果你的日收益率有 ρ1=0.10\rho_1 = 0.10 的自相关,报告出来的夏普大约会比真实夏普高 20%。大多数量化策略都有正收益自相关:趋势跟踪、慢周期的均值回归,甚至某些做市策略。如果不修正,回测就会骗你。

本文从有效样本量开始推导 Haircut Sharpe 修正。我们先说明有效样本量,再计算 haircut 因子,最后说明收益率中的自相关如何转化成夏普比率的膨胀。

自相关问题

假设收益率 rtr_t 平稳,均值为 μ\mu,方差为 σ2\sigma^2,自相关函数为 ρk=Corr(rt,rt−k)\rho_k = \text{Corr}(r_t, r_{t-k})。如果 ρ1>0\rho_1 > 0(正自相关),相邻收益率会比较相似。样本均值 rˉ\bar{r} 的方差为:

Var(rˉ)=σ2T(1+2∑k=1T−1(1−kT)ρk)\text{Var}(\bar{r}) = \frac{\sigma^2}{T}\left(1 + 2 \sum_{k=1}^{T-1} \left(1 - \frac{k}{T}\right) \rho_k\right)

对独立收益率,ρk=0\rho_k = 0(k≥1k \ge 1),于是恢复为 Var(rˉ)=σ2/T\text{Var}(\bar{r}) = \sigma^2 / T。对有自相关的收益率,方差会更大。括号中的因子是实际方差与独立同分布方差的比值。把它称为方差膨胀因子(VIF):

VIF=1+2∑k=1T−1(1−kT)ρkVIF = 1 + 2 \sum_{k=1}^{T-1} \left(1 - \frac{k}{T}\right) \rho_k

当 TT 很大,且 ρk\rho_k 以 ϕ\phi 的速率指数衰减(大致有 ρk=ρ1k\rho_k = \rho_1^k)时,VIF 会接近 1/(1−ρ1)1 / (1 - \rho_1)。等等,这只对 AR(1) 过程成立。更准确地说,对系数为 ϕ\phi 的 AR(1):

∑k=1∞ρk=ϕ1−ϕ\sum_{k=1}^{\infty} \rho_k = \frac{\phi}{1 - \phi}

所以:

VIFAR(1)≈1+2ϕ1−ϕ=1+ϕ1−ϕVIF_{AR(1)} \approx 1 + \frac{2\phi}{1 - \phi} = \frac{1 + \phi}{1 - \phi}

当 ϕ=0.1\phi = 0.1 时:VIF=1.1/0.9=1.222VIF = 1.1 / 0.9 = 1.222。因此,10% 的 AR(1) 系数会让均值的方差增加 22%。

有效样本量

把有效样本量定义为:能产生相同方差的独立同分布样本量:

Var(rˉ)=σ2Teff\text{Var}(\bar{r}) = \frac{\sigma^2}{T_{eff}}

令两边相等:

Teff=TVIF=T1+2∑k=1T−1(1−k/T)ρkT_{eff} = \frac{T}{VIF} = \frac{T}{1 + 2 \sum_{k=1}^{T-1} (1 - k/T) \rho_k}

对 AR(1) 收益率:

Teff≈T⋅1−ϕ1+ϕT_{eff} \approx T \cdot \frac{1 - \phi}{1 + \phi}

当 ϕ=0.1\phi = 0.1 时:Teff≈T⋅0.9/1.1=0.818TT_{eff} \approx T \cdot 0.9 / 1.1 = 0.818 T。所以 5 年日频数据(T=1260T = 1260)的有效样本量是 1260⋅0.818=10311260 \cdot 0.818 = 1031,大约相当于 4.1 年的独立数据。

夏普比率的分母是收益率标准差,不是均值标准误。到目前为止,我们只说明了自相关会让均值的标准误变大,还没有推导夏普本身该打多少 haircut。

推导夏普 Haircut

报告出来的夏普是 SR^=rˉ/σ^\widehat{SR} = \bar{r} / \hat{\sigma}。自相关也会影响标准差 σ^\hat{\sigma},但影响程度远小于对均值的影响。

对系数为 ϕ\phi、创新方差为 σϵ2\sigma_\epsilon^2 的 AR(1) 过程,rtr_t 的无条件方差为:

σ2=σϵ21−ϕ2\sigma^2 = \frac{\sigma_\epsilon^2}{1 - \phi^2}

样本方差 σ^2\hat{\sigma}^2 会收敛到 σ2\sigma^2。自相关会影响 σ2\sigma^2 的估计,但不会改变它的期望。因此在首阶近似下,σ^\hat{\sigma} 不会因为自相关而改变,但 rˉ\bar{r} 的方差变大了,于是夏普估计会膨胀。

要推导 haircut,在大样本下工作。定义“真实”夏普为 SR=μ/σSR = \mu / \sigma。报告夏普为 SR^=rˉ/σ^\widehat{SR} = \bar{r} / \hat{\sigma}。渐近地,SR^\widehat{SR} 依概率收敛到 SRSR,但在有限样本下,有自相关时分布会更分散。

具体来说:

SR^≈SR+rˉ−μσ\widehat{SR} \approx SR + \frac{\bar{r} - \mu}{\sigma}

SR^\widehat{SR} 的方差是:

Var(SR^)=1σ2Var(rˉ)=VIFT\text{Var}(\widehat{SR}) = \frac{1}{\sigma^2} \text{Var}(\bar{r}) = \frac{VIF}{T}

Haircut Sharpe 是一个缩放,把有自相关的夏普映射到等效独立同分布夏普。如果你希望有效独立观测数是 TeffT_{eff} 而不是 TT:

SR^haircut=SR^⋅TeffT=SR^⋅1VIF\widehat{SR}_{haircut} = \widehat{SR} \cdot \sqrt{\frac{T_{eff}}{T}} = \widehat{SR} \cdot \sqrt{\frac{1}{VIF}}

对 AR(1) 收益率:

SR^haircut=SR^⋅1−ϕ1+ϕ\widehat{SR}_{haircut} = \widehat{SR} \cdot \sqrt{\frac{1 - \phi}{1 + \phi}}

当 ϕ=0.1\phi = 0.1 时:0.9/1.1=0.818=0.904\sqrt{0.9 / 1.1} = \sqrt{0.818} = 0.904。所以报告夏普 2.0 会变成 Haircut Sharpe 1.81,减少约 10%。

当 ϕ=0.2\phi = 0.2 时:0.8/1.2=0.667=0.816\sqrt{0.8 / 1.2} = \sqrt{0.667} = 0.816。报告夏普 2.0 会变成 1.63。

当 ϕ=−0.1\phi = -0.1(负自相关,均值回归)时:1.1/0.9=1.105\sqrt{1.1/0.9} = 1.105。haircut 因子大于 1,说明报告出来的夏普反而低估了真实优势。均值回归策略会从自相关中受益:它的有效样本量大于名义样本量。

AFML / Lo(2002)形式

Haircut Sharpe 最常引用的版本来自 Andrew Lo 2002 年的论文,并在 AFML 中重现。公式是:

SR^adj=SR^⋅11+2∑k=1Kρk⋅1−γ^3SR^+γ^4−14SR^21−γ^3SR^+γ^4−14SR^2\widehat{SR}_{adj} = \widehat{SR} \cdot \sqrt{\frac{1}{1 + 2 \sum_{k=1}^{K} \rho_k}} \cdot \sqrt{\frac{1 - \hat{\gamma}_3 \widehat{SR} + \frac{\hat{\gamma}_4 - 1}{4} \widehat{SR}^2}{1 - \hat{\gamma}_3 \widehat{SR} + \frac{\hat{\gamma}_4 - 1}{4} \widehat{SR}^2}}

第二个平方根会化简为 1,所以公式变成:

SR^adj=SR^⋅11+2∑k=1Kρk\widehat{SR}_{adj} = \widehat{SR} \cdot \sqrt{\frac{1}{1 + 2 \sum_{k=1}^{K} \rho_k}}

求和截断点 KK 很重要。实践中,你可以在 ρk\rho_k 变得无法在统计上与零区分时截断自相关函数,也可以使用 K=min⁡(T/4,50)K = \min(T/4, 50) 这样的经验规则。

有一个细节:Lo 公式使用的是 1+2∑ρk1 + 2 \sum \rho_k,而不是 1+2∑(1−k/T)ρk1 + 2 \sum (1 - k/T) \rho_k。后者在有限 TT 时更准确,前者则是平稳过程在 T→∞T \to \infty 时的极限。当 T=1260T = 1260 且 ρk\rho_k 指数衰减时,两者差异很小。

估计自相关函数

实际问题是:回测中怎么估计 ρk\rho_k?标准估计量是:

ρ^k=∑t=k+1T(rt−rˉ)(rt−k−rˉ)∑t=1T(rt−rˉ)2\hat{\rho}_k = \frac{\sum_{t=k+1}^{T} (r_t - \bar{r})(r_{t-k} - \bar{r})}{\sum_{t=1}^{T} (r_t - \bar{r})^2}

这是滞后 kk 的样本自相关。对几年日频收益率,前 20 个滞后通常可以较精确地估计。

一个常见错误是:直接使用 ρ^k\hat{\rho}_k,不检验它是否显著偏离零。样本自相关的抽样波动并不小。对 T=1260T = 1260、真实 ρ1=0\rho_1 = 0 的情况,ρ^1\hat{\rho}_1 的标准误约为 1/T≈0.0281/\sqrt{T} \approx 0.028。所以样本自相关 0.05 只能算勉强显著。如果你不加判断地把它放进 haircut,就会过度修正。

有两个实用修正。第一,使用 Bartlett 类型的置信区间,把统计上无法与零区分的自相关设为零。第二,拟合 AR(p) 模型,使用模型隐含的自相关函数,这样可以让估计更稳定。

AFML 的建议(第 14 章,Advances in Financial Machine Learning,ISBN 978-1-119-48208-6)是使用 Newey-West 类型的 HAC 估计量,直接得到均值的标准误,避免逐个滞后估计自相关函数。它的形式是:

Var^(rˉ)=σ^2T(1+2∑k=1Kwkρ^k)\widehat{\text{Var}}(\bar{r}) = \frac{\hat{\sigma}^2}{T} \left(1 + 2 \sum_{k=1}^{K} w_k \hat{\rho}_k\right)

其中 wkw_k 是核权重(Bartlett 核:wk=1−k/(K+1)w_k = 1 - k/(K+1))。得到的标准误已经考虑了自相关。Haircut Sharpe 于是是:

SR^haircut=SR^⋅σ^T⋅SE^HAC(rˉ)⋅1T\widehat{SR}_{haircut} = \widehat{SR} \cdot \frac{\hat{\sigma}}{\sqrt{T} \cdot \widehat{SE}_{HAC}(\bar{r})} \cdot \frac{1}{\sqrt{T}}

好,这个化简写得有点乱。重新清楚地写一遍:

Haircut Sharpe 是报告夏普乘以“收益率标准差与均值 HAC 标准误之比”,再乘以 T\sqrt{T}:

SR^haircut=rˉSE^HAC(rˉ)=rˉσ^/T⋅VIF\widehat{SR}_{haircut} = \frac{\bar{r}}{\widehat{SE}_{HAC}(\bar{r})} = \frac{\bar{r}}{\hat{\sigma}/\sqrt{T} \cdot \sqrt{VIF}} =rˉ⋅Tσ^⋅VIF=SR^VIF= \frac{\bar{r} \cdot \sqrt{T}}{\hat{\sigma} \cdot \sqrt{VIF}} = \frac{\widehat{SR}}{\sqrt{VIF}}

所以,简单形式是对的。HAC 估计量只是给了你一个更稳健的 VIF 估计。

完整例子

考虑一个交易股指期货的趋势跟踪策略。收益率有 ϕ≈0.08\phi \approx 0.08 的轻微正自相关,这和动量信号缓慢衰减的特征一致。数据有 5 年:T=1260T = 1260。报告的年化夏普是 1.5。

第一步:计算 VIF:

VIF=1+ϕ1−ϕ=1.080.92=1.174VIF = \frac{1 + \phi}{1 - \phi} = \frac{1.08}{0.92} = 1.174

第二步:计算 haircut 因子:

1/VIF=1/1.174=0.852=0.923\sqrt{1/VIF} = \sqrt{1/1.174} = \sqrt{0.852} = 0.923

第三步:计算 Haircut Sharpe:

SR^haircut=1.5⋅0.923=1.385\widehat{SR}_{haircut} = 1.5 \cdot 0.923 = 1.385

所以,报告夏普 1.5 会变成 Haircut Sharpe 1.39,减少约 7.7%。幅度不算大,但不能忽略。

对更激进的趋势跟踪策略,假设 ϕ=0.15\phi = 0.15:

VIF=1.15/0.85=1.353,1/VIF=0.860VIF = 1.15/0.85 = 1.353, \quad \sqrt{1/VIF} = 0.860 SR^haircut=1.5⋅0.860=1.29\widehat{SR}_{haircut} = 1.5 \cdot 0.860 = 1.29

减少 13.7%,幅度就明显了。

对 ϕ=−0.10\phi = -0.10 的均值回归统计套利策略:

VIF=0.9/1.1=0.818,1/VIF=1.106VIF = 0.9/1.1 = 0.818, \quad \sqrt{1/VIF} = 1.106 SR^haircut=1.5⋅1.106=1.66\widehat{SR}_{haircut} = 1.5 \cdot 1.106 = 1.66

均值回归策略得到了一个加成。haircut 因子大于 1,是因为负自相关让每次观测包含了更多独立信息。

import numpy as np
import pandas as pd

def haircut_sharpe(returns, max_lag=20):
    """Compute the Haircut Sharpe ratio adjusted for autocorrelation.
    Uses Bartlett kernel weights on the autocorrelation function."""
    T = len(returns)
    sr = returns.mean() / returns.std() * np.sqrt(252)
    
    # Compute autocorrelations
    acf = []
    for k in range(1, max_lag + 1):
        rho_k = np.corrcoef(returns[:-k], returns[k:])[0, 1]
        acf.append(rho_k)
    
    # Bartlett kernel VIF
    vif = 1.0
    for k, rho_k in enumerate(acf, start=1):
        weight = 1.0 - k / (max_lag + 1)
        vif += 2 * weight * rho_k
    
    return sr / np.sqrt(vif)

# Example
np.random.seed(42)
phi = 0.08
eps = np.random.normal(0, 0.01, 1260)
returns = np.zeros(1260)
for t in range(1, 1260):
    returns[t] = phi * returns[t-1] + eps[t]

print(f"Reported Sharpe: {returns.mean()/returns.std()*np.sqrt(252):.3f}")
print(f"Haircut Sharpe:  {haircut_sharpe(returns):.3f}")

这在实务中为什么重要

报告夏普是回测系统输出的数字,是幻灯片上的数字。Haircut Sharpe 才是在其他条件不变时,策略在生产环境中更可能实现的夏普。对收益率有正自相关的策略来说,几乎所有趋势跟踪或动量策略都属于这一类,差别不小。

一个从 1.5 变成 1.29 的夏普,是完全不同的投资命题。夏普 1.5 支持的资本配置,用 1.29 可能就不合理。夏普 1.5 支持的容量假设,在 1.29 下也可能不成立。说策略做出了 1.5 的夏普,在技术上没错,但实际会误导人。

策略为什么会有自相关

大多数量化策略都有收益自相关。主要有三个来源:

信号惯性。 趋势跟踪和动量信号依赖移动平均线或突破。信号会持续几天到几周,所以即使中间有噪声,策略仍然会继续持有同一方向。这会在收益率中形成正自相关。连续多天持有多头仓位,会产生相关的盈亏。

仓位管理。 很多策略会持仓数日。第 t+1t+1 天的盯市盈亏和第 tt 天相关,因为仓位大体相同。持仓周期越长,自相关通常越强。

波动率聚集。 即使收益率在条件上不相关,波动率也会聚集:高波动期之后通常还是高波动期。平方收益率会有自相关,这会通过高阶矩影响夏普标准误。

对做市策略来说,自相关往往是负的,也就是盈亏均值回归:大幅盈利之后通常会出现均值回归。因此,做市策略的 Haircut Sharpe 经常高于报告夏普。

如何检测自相关

在应用 Haircut 之前,应该先检查收益率是否有自相关。常用的有三种检验:

Ljung-Box 检验。 检验统计量为:

Q(m)=T(T+2)∑k=1mρ^k2T−kQ(m) = T(T+2) \sum_{k=1}^{m} \frac{\hat{\rho}_k^2}{T-k}

在最多 mm 阶没有自相关的原假设下,Q(m)∼χm2Q(m) \sim \chi^2_m。如果 Q(m)Q(m) 超过卡方临界值,就拒绝原假设。

对 5 年日收益率、m=20m = 20 个滞后,在 α=0.05\alpha = 0.05 下临界值为 χ20,0.952≈31.4\chi^2_{20, 0.95} \approx 31.4。统计量超过 31.4,表示自相关显著。

样本自相关与置信带。 计算 ρ^k\hat{\rho}_k,其中 k=1,2,…,Kk = 1, 2, \ldots, K。在原假设下,95% 置信带为 ±1.96/T\pm 1.96/\sqrt{T}。当 T=1260T = 1260 时,这是 ±0.055\pm 0.055。落在置信带之外的自相关在统计上显著。

方差比检验。 比较 kk 期收益率的方差和 1 期收益率方差的 kk 倍。在无自相关原假设下,比值为 1。对 k=10k = 10:

VR(10)=Var(rt+rt+1+…+rt+9)10⋅Var(rt)VR(10) = \frac{\text{Var}(r_t + r_{t+1} + \ldots + r_{t+9})}{10 \cdot \text{Var}(r_t)}

显著高于 1 表示正自相关,显著低于 1 表示负自相关。

Newey-West 最优滞后阶数

Newey-West(1994)的自动滞后选择公式是:

q=⌊4⋅(T/100)2/9⌋q = \lfloor 4 \cdot (T/100)^{2/9} \rfloor

当 T=1260T = 1260 时:q=⌊4⋅12.62/9⌋=⌊4⋅1.59⌋=⌊6.36⌋=6q = \lfloor 4 \cdot 12.6^{2/9} \rfloor = \lfloor 4 \cdot 1.59 \rfloor = \lfloor 6.36 \rfloor = 6。

所以,5 年日频收益率的最优滞后是 6 天。在 Bartlett 核中使用第 1 到第 6 阶滞后。超过第 6 阶后,自相关太嘈杂,无法可靠估计。

一个常见错误是使用太多滞后。如果加入 50 个滞后,而第 30 到第 50 阶的自相关纯粹是噪声(均值为零、方差很大),VIF 估计量的方差就会变高。Newey-West 公式在偏差和方差之间做了平衡。

Haircut Sharpe 的 Bootstrap 置信区间

点估计 SR^haircut\widehat{SR}_{haircut} 本身也有抽样波动。Bootstrap 置信区间可以把这点反映出来。

步骤如下:

  1. 有放回地重采样收益率(或者使用 block bootstrap),得到长度为 TT 的 Bootstrap 样本。
  2. 在这个样本上计算 Haircut Sharpe。
  3. 重复 BB 次。
  4. 取 Bootstrap 分布的第 2.5 和第 97.5 百分位数,作为 95% 置信区间。

对 block bootstrap,块长度可以取 Newey-West 滞后阶数(例如 6 天)。这样能保留块内的自相关结构。

Haircut Sharpe 的 Bootstrap 置信区间会比单独看点估计宽得多。报告 Haircut Sharpe 为 1.3,可能对应 [0.9, 1.7] 的 95% 置信区间。只报告点估计会误导读者。

Haircut Sharpe 与年化的区别

一个容易混淆的地方:Haircut Sharpe 不等于年化夏普。

年化是把期间夏普乘以 f\sqrt{f},其中 ff 是每年的期间数。Haircut 则是乘以 1/VIF1/\sqrt{VIF}。这是两个不同的操作:

  • 年化处理的是测量的时间范围。
  • Haircut 处理的是观测值之间的依赖结构。

观测值相互独立时,VIF = 1,haircut 因子为 1(不需要 haircut)。观测值存在依赖时,VIF > 1,haircut 因子小于 1。

回测报告中应该同时给出两者:

SR^annual,haircut=SR^period⋅f⋅1VIF\widehat{SR}_{annual, haircut} = \widehat{SR}_{period} \cdot \sqrt{f} \cdot \frac{1}{\sqrt{VIF}}

这才是正确的报告方式。大多数报告系统会省略 haircut,所以才有了这篇文章。

Haircut 修正不了什么

Haircut Sharpe 修正的是自相关。它修正不了:

  1. 多重检验。 这要使用去膨胀夏普比率。
  2. 收益率的非正态性。 PSR 的标准误公式会处理这个问题。
  3. 前视偏差。 如果回测使用了交易时点不可获得的信息,任何统计修正都救不了它。
  4. 容量限制。 名义本金 100 万美元时夏普为 1.5,规模到 1 亿美元时可能只剩夏普 0.8。统计修正无法处理容量问题。

Haircut Sharpe 只是一块拼图。完整诊断体系是:PSR(相对于基准的显著性)、Haircut Sharpe(自相关)、DSR(多重检验)、MBL(样本量)和 PBO(过拟合)。每一层回答不同的问题。

被高估的置信区间

有个细节容易被忽略:夏普比率的标准 95% 置信区间假设收益率独立同分布。有自相关时,这个区间会过窄。

独立同分布下的置信区间:

CI95%=SR^±1.96⋅1TCI_{95\%} = \widehat{SR} \pm 1.96 \cdot \frac{1}{\sqrt{T}}

当 SR^=1.5\widehat{SR} = 1.5、T=1260T = 1260 时:CI=[1.5−0.055,1.5+0.055]=[1.445,1.555]CI = [1.5 - 0.055, 1.5 + 0.055] = [1.445, 1.555],非常窄。

考虑自相关后的置信区间:

CIautocorr,95%=SR^±1.96⋅1Teff=SR^±1.96⋅VIFTCI_{autocorr, 95\%} = \widehat{SR} \pm 1.96 \cdot \frac{1}{\sqrt{T_{eff}}} = \widehat{SR} \pm 1.96 \cdot \frac{\sqrt{VIF}}{\sqrt{T}}

当 VIF = 1.174(ϕ=0.1\phi = 0.1 的 AR(1))时:CI=[1.5−0.060,1.5+0.060]=[1.440,1.560]CI = [1.5 - 0.060, 1.5 + 0.060] = [1.440, 1.560],略宽一些。

当 VIF = 1.5(自相关更持久)时:CI=[1.5−0.070,1.5+0.070]=[1.430,1.570]CI = [1.5 - 0.070, 1.5 + 0.070] = [1.430, 1.570],宽度已经比较明显。

当 VIF = 2(自相关非常持久)时:CI=[1.5−0.078,1.5+0.078]=[1.422,1.578]CI = [1.5 - 0.078, 1.5 + 0.078] = [1.422, 1.578],明显变宽。

教训是:独立同分布置信区间过于乐观。对有显著自相关的策略,真实置信区间更宽。Haircut Sharpe 在点估计上处理这个问题,置信区间则在精度上处理它。

不当年化的风险

一个常见错误是用错公式年化 Haircut Sharpe。

对独立同分布策略:SRannual=SRdaily⋅252SR_{annual} = SR_{daily} \cdot \sqrt{252}。

对有自相关的策略:SRannual,haircut=SRdaily⋅252/VIFSR_{annual,haircut} = SR_{daily} \cdot \sqrt{252} / \sqrt{VIF}。

两条公式不同。考虑自相关的公式会给出更低的年化夏普。

常见的正确做法是:先计算 SRdailySR_{daily},再乘 1/VIF1/\sqrt{VIF} 做 haircut,最后乘 252\sqrt{252} 年化。错误做法是先年化,再 haircut:

SRannual=SRdaily⋅252SR_{annual} = SR_{daily} \cdot \sqrt{252} SRannual,haircut,wrong=SRannual/VIFSR_{annual,haircut, wrong} = SR_{annual} / \sqrt{VIF}

这会重复计算自相关效应。正确公式是:

SRannual,haircut=(SRdaily/VIF)⋅252=SRdaily⋅252/VIFSR_{annual,haircut} = (SR_{daily} / \sqrt{VIF}) \cdot \sqrt{252} = SR_{daily} \cdot \sqrt{252 / VIF}

因子是 252/VIF\sqrt{252/VIF},不是 252/VIF\sqrt{252}/\sqrt{VIF}。两者结果一样,但运算顺序要统一。

时间聚合问题

还有一个细节:日收益率的自相关,可能和周收益率或月收益率的自相关不同。假设策略的 ϕdaily=0.1\phi_{daily} = 0.1,周频 AR(1) 系数大约是 ϕweekly=ϕdaily5=10−5\phi_{weekly} = \phi_{daily}^5 = 10^{-5},基本可以视为零。

这意味着:一个日频自相关很强的策略,周频自相关可能已经很小。日频 haircut 会远大于周频 haircut。

报告时要选定一个频率,并始终保持一致。混用日频和周频的修正会得到毫无意义的结果。标准做法是使用日收益率,报告年化 Haircut Sharpe。

多期再平衡下的夏普

有些策略每周或每月再平衡,但信号是用日频数据计算的。实际实现的收益率频率低于信号频率,而实现收益率的自相关反映的是再平衡频率。

对一个使用日频信号、每周再平衡的策略,实际收益率是周频的。周频自相关通常高于日频自相关,因为策略持仓时间更长。因此,周频 haircut 可能更大。

标准做法是在实际收益率频率(周频或月频)上计算 haircut,而不是在信号频率(日频)上计算。这才是“诚实”的 haircut。

Haircut 的贝叶斯解释

Haircut Sharpe 可以解释为一次带有怀疑型先验的贝叶斯更新。先验是:“考虑到自相关,这类策略的夏普很可能低于数据直接显示的数值。”似然是考虑了自相关的数据。后验就是 Haircut Sharpe。

自相关很强时,先验会把后验向下拉。负自相关时,先验会把后验向上推。Haircut Sharpe 就是这个特定先验下的贝叶斯后验。

这个说法有助于沟通。“报告夏普是 1.5,但我们对这类策略的先验判断是,由于自相关要打 10% 的折扣,所以 Haircut Sharpe 是 1.35。”这样比讲 HAC 推导直观。

对研究报告来说,这种表述也比技术性的 HAC 推导更容易让人读懂。数学没变,只是说法变了。

报告标准

一份完整的回测报告应包括:

  1. 报告夏普,同时给出样本量和收益率频率。
  2. 估计出的自相关函数,至少给出前 5 个滞后。
  3. 使用的 Newey-West 截断滞后阶数。
  4. VIF 估计值。
  5. Haircut Sharpe。

Haircut Sharpe 应该和报告夏普一起给出,而不是替代它。报告夏普是策略实际打印出来的结果,Haircut Sharpe 是更可能持续的结果。

研究论文应同时给出两个数字及各自的置信区间。营销报告则取决于受众。机构投资者通常想看两个数字,零售投资者通常只会看到较高的那个。诚实的做法是两个都报告。

总结

Haircut Sharpe 是针对收益率自相关的修正。它根据自相关函数得到有效样本量,再用有效样本量重新缩放报告夏普。正自相关(趋势跟踪、动量)下,Haircut Sharpe 更低;负自相关(均值回归)下,Haircut Sharpe 更高。

这个修正可以通过 HAC 估计量(Newey-West)实现,也可以直接估计自相关函数。标准误和置信区间也应该使用 HAC 标准误,而不是独立同分布标准误。

Haircut Sharpe 只是多个诊断中的一个。它处理不了多重检验、容量、状态变化或前视偏差,只处理自相关问题。要得到完整判断,需要把它和其他诊断结合起来。

没有 haircut 的夏普 1.5 是营销。报告夏普 1.5、Haircut Sharpe 1.3,是研究。差别很大。

参考文献

  • Lo, A. W. (2002). “The Statistics of Sharpe Ratios.” Financial Analysts Journal, 58(4), 36–52。自相关修正夏普的原始推导。
  • López de Prado, M. (2018). Advances in Financial Machine Learning, 第 14 章。Wiley. ISBN 978-1-119-48208-6。实现与基于 HAC 的修正。
  • Newey, W. K. and West, K. D. (1987). “A Simple, Positive Semi-Definite, Heteroskedasticity and Autocorrelation Consistent Covariance Matrix.” Econometrica, 55(3), 703–708。HAC 估计量。
  • Bartlett, M. S. (1946). “On the Theoretical Specification and Sampling Properties of Autocorrelated Time-Series.” Journal of the Royal Statistical Society, 8(1), 27–41。核函数。