Skip to content

Haircut Sharpe: Correcting for Autocorrelation

Reported Sharpes overstate true Sharpes when returns are autocorrelated. The Haircut Sharpe correction adjusts for this. Full derivation of the formula, including how to estimate effective sample size from the autocorrelation function.

4 of 12 ~16 min

If your daily returns have autocorrelation ρ1=0.10\rho_1 = 0.10, your reported Sharpe overstates the true Sharpe by about 20%. Most quant strategies have positive return autocorrelation: trend-following, mean-reversion at slow horizons, even some market-making strategies. If you do not correct for it, your backtest lies to you.

This article derives the Haircut Sharpe correction from first principles. We will derive the effective sample size, compute the haircut factor, and show how autocorrelation in returns translates into inflation of the Sharpe ratio.

The Autocorrelation Problem

Suppose returns rtr_t are stationary with mean μ\mu, variance σ2\sigma^2, and autocorrelation function ρk=Corr(rt,rt−k)\rho_k = \text{Corr}(r_t, r_{t-k}). If ρ1>0\rho_1 > 0 (positive autocorrelation), successive returns are similar to each other. The sample mean rˉ\bar{r} has variance:

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)

For independent returns, ρk=0\rho_k = 0 for k≥1k \ge 1, and we recover Var(rˉ)=σ2/T\text{Var}(\bar{r}) = \sigma^2 / T. For autocorrelated returns, the variance is larger. The factor in parentheses is the ratio of actual variance to i.i.d. variance. Call this the variance inflation factor, or 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

For TT large and ρk\rho_k decaying exponentially with rate ϕ\phi (so ρk=ρ1k\rho_k = \rho_1^k roughly), the VIF approaches 1/(1−ρ1)1 / (1 - \rho_1). Wait, that’s only for an AR(1) process. More precisely, for an AR(1) with coefficient ϕ\phi:

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

So:

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

For ϕ=0.1\phi = 0.1: VIF=1.1/0.9=1.222VIF = 1.1 / 0.9 = 1.222. So a 10% AR(1) coefficient inflates the variance of the mean by 22%.

The Effective Sample Size

Define the effective sample size as the i.i.d. sample size that would produce the same variance:

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

Equating:

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}

For AR(1) returns:

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

For ϕ=0.1\phi = 0.1: Teff≈T⋅0.9/1.1=0.818TT_{eff} \approx T \cdot 0.9 / 1.1 = 0.818 T. So 5 years of daily data (T=1260T = 1260) has effective sample size 1260⋅0.818=10311260 \cdot 0.818 = 1031, roughly equivalent to 4.1 years of independent data.

The Sharpe ratio uses the standard deviation of returns in the denominator, not the standard error of the mean. So far we have only shown that the standard error of the mean is larger under autocorrelation. We have not yet derived the haircut on the Sharpe itself.

Deriving the Sharpe Haircut

The reported Sharpe is SR^=rˉ/σ^\widehat{SR} = \bar{r} / \hat{\sigma}. The standard deviation σ^\hat{\sigma} is also affected by autocorrelation, but to a much smaller extent than the mean.

For an AR(1) process with coefficient ϕ\phi and innovation variance σϵ2\sigma_\epsilon^2, the unconditional variance of rtr_t is:

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

The sample variance σ^2\hat{\sigma}^2 converges to σ2\sigma^2. Autocorrelation affects the estimation of σ2\sigma^2 but not its expectation. So to first order, σ^\hat{\sigma} is unchanged by autocorrelation, but rˉ\bar{r} has larger variance. The Sharpe estimate is inflated.

To derive the haircut, work in large samples. Define the “true” Sharpe as SR=μ/σSR = \mu / \sigma. The reported Sharpe is SR^=rˉ/σ^\widehat{SR} = \bar{r} / \hat{\sigma}. Asymptotically, SR^→SR\widehat{SR} \to SR in probability, but the finite-sample distribution has a larger spread under autocorrelation.

Specifically:

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

The variance of SR^\widehat{SR} is:

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

The Haircut Sharpe is the rescaling that maps the autocorrelated Sharpe to an i.i.d.-equivalent Sharpe. If you want the effective number of independent observations to be TeffT_{eff} instead of 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}}

For AR(1) returns:

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

For ϕ=0.1\phi = 0.1: 0.9/1.1=0.818=0.904\sqrt{0.9 / 1.1} = \sqrt{0.818} = 0.904. So a reported Sharpe of 2.0 becomes a haircut Sharpe of 1.81. About 10% reduction.

For ϕ=0.2\phi = 0.2: 0.8/1.2=0.667=0.816\sqrt{0.8 / 1.2} = \sqrt{0.667} = 0.816. Reported Sharpe 2.0 becomes 1.63.

For ϕ=−0.1\phi = -0.1 (negative autocorrelation, mean-reverting): 1.1/0.9=1.105\sqrt{1.1/0.9} = 1.105. The haircut factor is greater than 1, meaning your reported Sharpe understates your true edge. Mean-reverting strategies benefit from autocorrelation: their effective sample size is larger than the nominal one.

The AFML / Lo (2002) Formulation

The most cited version of the Haircut Sharpe comes from Andrew Lo’s 2002 paper and is reproduced in AFML. The formula is:

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}}

The second square root simplifies to 1, so the formula reduces to:

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}}

The summation cutoff KK matters. In practice, you truncate the autocorrelation function at the first KK where ρk\rho_k becomes statistically indistinguishable from zero, or at some heuristic like K=min⁡(T/4,50)K = \min(T/4, 50).

A subtle point: the Lo formula uses 1+2∑ρk1 + 2 \sum \rho_k, not 1+2∑(1−k/T)ρk1 + 2 \sum (1 - k/T) \rho_k. The latter is more accurate for finite TT but the former is the limit as T→∞T \to \infty for stationary processes. For T=1260T = 1260 and exponentially decaying ρk\rho_k, the difference is small.

Estimating the Autocorrelation Function

The practical question: how do you estimate ρk\rho_k in a backtest? The standard estimator:

ρ^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}

This is the sample autocorrelation at lag kk. For daily returns over several years, the first 20 lags are usually estimable with reasonable precision.

A common mistake: using ρ^k\hat{\rho}_k directly without testing whether it is significantly different from zero. Sample autocorrelations have non-trivial sampling variability. For T=1260T = 1260 and true ρ1=0\rho_1 = 0, the standard error of ρ^1\hat{\rho}_1 is approximately 1/T≈0.0281/\sqrt{T} \approx 0.028. So a sample autocorrelation of 0.05 is barely significant. If you naively include this in your haircut, you will over-correct.

Two practical fixes. First, use a Bartlett-type confidence interval and zero out autocorrelations that are not statistically distinguishable from zero. Second, fit an AR(p) model and use the implied autocorrelation function, which regularizes the estimation.

The AFML recommendation (Ch. 14, Advances in Financial Machine Learning, ISBN 978-1-119-48208-6) is to use a Newey-West-type HAC estimator to get the standard error of the mean directly, bypassing the need to estimate the autocorrelation function lag-by-lag. This is implemented as:

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)

where wkw_k is a kernel weight (Bartlett kernel: wk=1−k/(K+1)w_k = 1 - k/(K+1)). The resulting standard error accounts for autocorrelation. The Haircut Sharpe is then:

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}}

OK that simplification got tangled. Let me restate cleanly:

The Haircut Sharpe is the reported Sharpe rescaled by the ratio of the standard deviation of returns to the HAC standard error of the mean, multiplied by 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}}

OK so the simple form is right. The HAC estimator just gives you a more robust estimate of VIF.

Worked Example

Consider a trend-following strategy on daily equity index futures. The returns have ϕ≈0.08\phi \approx 0.08 (mild positive autocorrelation, consistent with momentum signals having slow decay). 5 years of data: T=1260T = 1260. Reported annualized Sharpe: 1.5.

Step 1: Compute the VIF:

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

Step 2: Compute the haircut factor:

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

Step 3: Compute the Haircut Sharpe:

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

So a reported Sharpe of 1.5 becomes a haircut Sharpe of 1.39. About 7.7% reduction. Modest but not negligible.

For a more aggressive trend follower with ϕ=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% reduction. Larger.

For a mean-reverting stat-arb strategy with ϕ=−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

The mean-reverting strategy gets a bonus. The haircut factor is greater than 1 because negative autocorrelation gives you more independent information per observation.

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}")

Why This Matters in Practice

The reported Sharpe is what your backtest system outputs. It is the number on the slide. The Haircut Sharpe is what your production Sharpe is likely to be, all else equal. For a strategy with positive autocorrelation in returns, almost every trend-following or momentum strategy, the difference is non-trivial.

A 1.5 Sharpe that becomes a 1.29 Haircut Sharpe is a different proposition. The capital allocation that 1.5 justified may not be justified by 1.29. The capacity assumption that 1.5 supported may not hold at 1.29. The marketing claim that the strategy printed 1.5 is technically true but practically misleading.

Why Autocorrelation Happens in Strategies

Most quant strategies exhibit return autocorrelation. Three sources:

Signal inertia. Trend-following and momentum signals are based on moving averages or breakouts. The signal persists for days to weeks, so the strategy is long when the signal is long, regardless of intermediate noise. This creates positive autocorrelation in returns. Consecutive days of being long produce correlated P&L.

Position management. Many strategies hold positions for multiple days. The mark-to-market P&L on day t+1t+1 is correlated with the P&L on day tt because the position is similar. For longer holding periods, the autocorrelation is larger.

Volatility clustering. Even if returns are conditionally uncorrelated, volatility clusters: high-volatility periods follow high-volatility periods. The squared returns are autocorrelated. This affects the Sharpe standard error through the higher moments.

For market-making strategies, the autocorrelation is often negative (mean-reverting P&L): large gains are typically followed by mean-reversion. The Haircut Sharpe for market-making strategies is often higher than the reported Sharpe.

How to Detect Autocorrelation

Before applying the Haircut, you should check whether the returns are autocorrelated. Three standard tests:

Ljung-Box test. The test statistic:

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

Under the null of no autocorrelation up to lag mm, Q(m)∼χm2Q(m) \sim \chi^2_m. Reject if Q(m)Q(m) exceeds the chi-squared critical value.

For daily returns over 5 years with m=20m = 20 lags, the critical value at α=0.05\alpha = 0.05 is χ20,0.952≈31.4\chi^2_{20, 0.95} \approx 31.4. A test statistic above 31.4 indicates significant autocorrelation.

Sample autocorrelation with confidence bands. Compute ρ^k\hat{\rho}_k for k=1,2,…,Kk = 1, 2, \ldots, K. The 95% confidence band under the null is ±1.96/T\pm 1.96/\sqrt{T}. For T=1260T = 1260, this is ±0.055\pm 0.055. Autocorrelations outside this band are statistically significant.

Variance ratio test. Compare the variance of kk-period returns to kk times the variance of 1-period returns. Under the null of no autocorrelation, the ratio is 1. For 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)}

Values significantly above 1 indicate positive autocorrelation; significantly below 1 indicate negative autocorrelation.

The Newey-West Optimal Lag

The Newey-West (1994) automatic lag selection:

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

For 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.

So the optimal lag for daily returns over 5 years is 6 days. Use lags 1 through 6 in the Bartlett kernel. Beyond lag 6, the autocorrelation is too noisy to estimate reliably.

A common mistake is using too many lags. If you include 50 lags and the autocorrelations at lags 30-50 are pure noise (mean zero, large variance), the VIF estimator has higher variance. The Newey-West formula balances bias and variance.

Bootstrap Confidence Intervals for the Haircut

The point estimate SR^haircut\widehat{SR}_{haircut} has sampling variability. Bootstrap confidence intervals capture this.

Procedure:

  1. Resample the returns with replacement (or use a block bootstrap) to get a bootstrap sample of length TT.
  2. Compute the bootstrap Haircut Sharpe on this sample.
  3. Repeat BB times.
  4. The 95% confidence interval is the 2.5th and 97.5th percentiles of the bootstrap distribution.

For block bootstrap, use blocks of length equal to the Newey-West lag (e.g., 6 days). This preserves the within-block autocorrelation structure.

The bootstrap CI for the Haircut Sharpe is wider than the point estimate alone suggests. A reported Haircut Sharpe of 1.3 might have a 95% CI of [0.9, 1.7]. Reporting the point estimate without the CI is misleading.

The Haircut Sharpe vs Annualization

A common confusion: the Haircut Sharpe is not the same as the annualized Sharpe.

Annualization scales the period Sharpe by f\sqrt{f} where ff is the number of periods per year. The Haircut scales by 1/VIF1/\sqrt{VIF}. They are different operations:

  • Annualization accounts for the time horizon of the measurement.
  • Haircut accounts for the dependence structure of the observations.

For independent observations, VIF = 1 and the Haircut factor is 1 (no haircut). For dependent observations, VIF > 1 and the Haircut factor is less than 1.

In a backtest report, both should appear:

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

This is the right way to report. Most reporting systems omit the haircut, which is why this article exists.

What the Haircut Does Not Fix

The Haircut Sharpe corrects for autocorrelation. It does not correct for:

  1. Multiple testing. Use Deflated Sharpe for that.
  2. Non-normality of returns. The PSR standard error formula handles this.
  3. Look-ahead bias. If your backtest uses information not available at trade time, no statistical correction recovers it.
  4. Capacity constraints. A 1.5 Sharpe on $1M notional may be a 0.8 Sharpe on $100M. No statistical correction addresses this.

The Haircut Sharpe is one piece. The full diagnostic stack is: PSR (significance vs benchmark), Haircut Sharpe (autocorrelation), DSR (multiple testing), MBL (sample size), PBO (overfitting). Each layer addresses a different question.

The Overstated Confidence Interval

A subtle point: the standard 95% confidence interval for the Sharpe ratio assumes i.i.d. returns. Under autocorrelation, the confidence interval is too narrow.

The i.i.d. confidence interval:

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

For SR^=1.5\widehat{SR} = 1.5 and 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]. Very tight.

The autocorrelation-adjusted confidence interval:

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}}

For VIF = 1.174 (AR(1) with ϕ=0.1\phi = 0.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]. Slightly wider.

For VIF = 1.5 (more persistent autocorrelation): 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]. Noticeably wider.

For VIF = 2 (very persistent autocorrelation): 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]. Substantially wider.

The lesson: the i.i.d. confidence interval is too optimistic. For strategies with significant autocorrelation, the true confidence interval is wider. The Haircut Sharpe accounts for this in the point estimate; the confidence interval accounts for it in the precision.

The Dangers of Inappropriate Annualization

A common mistake: annualizing the haircut Sharpe using the wrong formula.

For an i.i.d. strategy: SRannual=SRdaily⋅252SR_{annual} = SR_{daily} \cdot \sqrt{252}.

For an autocorrelated strategy: SRannual,haircut=SRdaily⋅252/VIFSR_{annual,haircut} = SR_{daily} \cdot \sqrt{252} / \sqrt{VIF}.

The two formulas differ. The autocorrelation-adjusted formula gives a smaller annualized Sharpe.

A common error: compute SRdailySR_{daily}, haircut it by 1/VIF1/\sqrt{VIF}, then annualize by 252\sqrt{252}. This is correct. The error is to annualize first, then haircut:

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

This double-counts the autocorrelation effect. The correct formula is:

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

The factor is 252/VIF\sqrt{252/VIF}, not 252/VIF\sqrt{252}/\sqrt{VIF}. Same result; the order of operations matters.

The Time Aggregation Issue

A subtle issue: the autocorrelation of daily returns may not match the autocorrelation of weekly or monthly returns. For a strategy with ϕdaily=0.1\phi_{daily} = 0.1, the AR(1) coefficient at weekly frequency is approximately ϕweekly=ϕdaily5=10−5\phi_{weekly} = \phi_{daily}^5 = 10^{-5}, essentially zero.

The implication: a strategy with strong daily autocorrelation may have negligible weekly autocorrelation. The haircut at daily frequency is much larger than the haircut at weekly frequency.

For reporting, choose one frequency and stick with it. Mixing daily and weekly adjustments gives nonsense. The standard is to use daily returns and report annualized haircut Sharpe.

The Sharpe Under Multi-Period Rebalancing

Some strategies rebalance weekly or monthly, even when computed from daily signals. The realized returns have lower frequency than the signal frequency. The autocorrelation in the realized returns reflects the rebalancing frequency.

For a strategy that rebalances weekly with daily signals, the realized returns are weekly. The autocorrelation at weekly frequency is typically higher than at daily frequency (because the strategy holds positions for longer). The haircut at weekly frequency may be larger.

The standard practice is to compute the haircut on the realized return frequency (weekly or monthly), not the signal frequency (daily). This is the “honest” haircut.

The Bayesian Interpretation of the Haircut

The Haircut Sharpe can be interpreted as a Bayesian update with a skeptical prior. The prior: “Sharpe ratios in this strategy class are likely to be lower than what the data suggests, because of autocorrelation.” The likelihood: the data, accounting for autocorrelation. The posterior: the Haircut Sharpe.

For a strategy with strong autocorrelation, the prior pulls the posterior down. For a strategy with negative autocorrelation, the prior pulls the posterior up. The Haircut Sharpe is the Bayesian posterior under this specific prior.

This framing is useful for communication. “The reported Sharpe is 1.5, but our prior on this strategy class says to discount by 10% because of autocorrelation, so the Haircut Sharpe is 1.35” is intuitive.

For a research report, this framing is more accessible than the technical HAC derivation. The math is the same; the framing is different.

The Reporting Standard

A complete backtest report includes:

  1. The reported Sharpe with sample size and frequency.
  2. The estimated autocorrelation function (or at least the first 5 lags).
  3. The Newey-West truncation lag used.
  4. The VIF estimate.
  5. The Haircut Sharpe.

The Haircut Sharpe should be reported alongside (not instead of) the reported Sharpe. The reported Sharpe is what the strategy printed. The Haircut Sharpe is what is likely to persist.

For a research paper, both numbers plus the confidence intervals around each. For a marketing report, the choice depends on the audience. Institutional investors typically want both. Retail investors usually see only the higher number. The honest choice is to report both.

The Summary

The Haircut Sharpe is a correction for autocorrelation in returns. It uses the effective sample size (based on the autocorrelation function) to rescale the reported Sharpe. For positive autocorrelation (trend-following, momentum), the Haircut Sharpe is lower. For negative autocorrelation (mean-reverting), the Haircut Sharpe is higher.

The correction is implemented via the HAC estimator (Newey-West) or via direct estimation of the autocorrelation function. The standard error and confidence intervals should also use the HAC standard error, not the i.i.d. standard error.

The Haircut Sharpe is one diagnostic among many. It does not address multiple testing, capacity, regime shifts, or look-ahead bias. It addresses only the autocorrelation issue. Use it in combination with other diagnostics for a complete picture.

A Sharpe of 1.5 without the haircut is marketing. A Sharpe of 1.5 with a haircut of 0.2 (giving Haircut Sharpe 1.3) is research. The difference matters.

References

  • Lo, A. W. (2002). “The Statistics of Sharpe Ratios.” Financial Analysts Journal, 58(4), 36–52. Original derivation of the autocorrelation-adjusted Sharpe.
  • López de Prado, M. (2018). Advances in Financial Machine Learning, Ch. 14. Wiley. ISBN 978-1-119-48208-6. Implementation and HAC-based correction.
  • Newey, W. K. and West, K. D. (1987). “A Simple, Positive Semi-Definite, Heteroskedasticity and Autocorrelation Consistent Covariance Matrix.” Econometrica, 55(3), 703–708. The HAC estimator.
  • 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. The kernel.