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.
If your daily returns have autocorrelation , 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 are stationary with mean , variance , and autocorrelation function . If (positive autocorrelation), successive returns are similar to each other. The sample mean has variance:
For independent returns, for , and we recover . 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:
For large and decaying exponentially with rate (so roughly), the VIF approaches . Wait, that’s only for an AR(1) process. More precisely, for an AR(1) with coefficient :
So:
For : . 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:
Equating:
For AR(1) returns:
For : . So 5 years of daily data () has effective sample size , 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 . The standard deviation is also affected by autocorrelation, but to a much smaller extent than the mean.
For an AR(1) process with coefficient and innovation variance , the unconditional variance of is:
The sample variance converges to . Autocorrelation affects the estimation of but not its expectation. So to first order, is unchanged by autocorrelation, but has larger variance. The Sharpe estimate is inflated.
To derive the haircut, work in large samples. Define the “true” Sharpe as . The reported Sharpe is . Asymptotically, in probability, but the finite-sample distribution has a larger spread under autocorrelation.
Specifically:
The variance of is:
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 instead of :
For AR(1) returns:
For : . So a reported Sharpe of 2.0 becomes a haircut Sharpe of 1.81. About 10% reduction.
For : . Reported Sharpe 2.0 becomes 1.63.
For (negative autocorrelation, mean-reverting): . 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:
The second square root simplifies to 1, so the formula reduces to:
The summation cutoff matters. In practice, you truncate the autocorrelation function at the first where becomes statistically indistinguishable from zero, or at some heuristic like .
A subtle point: the Lo formula uses , not . The latter is more accurate for finite but the former is the limit as for stationary processes. For and exponentially decaying , the difference is small.
Estimating the Autocorrelation Function
The practical question: how do you estimate in a backtest? The standard estimator:
This is the sample autocorrelation at lag . For daily returns over several years, the first 20 lags are usually estimable with reasonable precision.
A common mistake: using directly without testing whether it is significantly different from zero. Sample autocorrelations have non-trivial sampling variability. For and true , the standard error of is approximately . 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:
where is a kernel weight (Bartlett kernel: ). The resulting standard error accounts for autocorrelation. The Haircut Sharpe is then:
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 :
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 (mild positive autocorrelation, consistent with momentum signals having slow decay). 5 years of data: . Reported annualized Sharpe: 1.5.
Step 1: Compute the VIF:
Step 2: Compute the haircut factor:
Step 3: Compute the Haircut Sharpe:
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 :
13.7% reduction. Larger.
For a mean-reverting stat-arb strategy with :
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 is correlated with the P&L on day 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:
Under the null of no autocorrelation up to lag , . Reject if exceeds the chi-squared critical value.
For daily returns over 5 years with lags, the critical value at is . A test statistic above 31.4 indicates significant autocorrelation.
Sample autocorrelation with confidence bands. Compute for . The 95% confidence band under the null is . For , this is . Autocorrelations outside this band are statistically significant.
Variance ratio test. Compare the variance of -period returns to times the variance of 1-period returns. Under the null of no autocorrelation, the ratio is 1. For :
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:
For : .
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 has sampling variability. Bootstrap confidence intervals capture this.
Procedure:
- Resample the returns with replacement (or use a block bootstrap) to get a bootstrap sample of length .
- Compute the bootstrap Haircut Sharpe on this sample.
- Repeat times.
- 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 where is the number of periods per year. The Haircut scales by . 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:
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:
- Multiple testing. Use Deflated Sharpe for that.
- Non-normality of returns. The PSR standard error formula handles this.
- Look-ahead bias. If your backtest uses information not available at trade time, no statistical correction recovers it.
- 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:
For and : . Very tight.
The autocorrelation-adjusted confidence interval:
For VIF = 1.174 (AR(1) with ): . Slightly wider.
For VIF = 1.5 (more persistent autocorrelation): . Noticeably wider.
For VIF = 2 (very persistent autocorrelation): . 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: .
For an autocorrelated strategy: .
The two formulas differ. The autocorrelation-adjusted formula gives a smaller annualized Sharpe.
A common error: compute , haircut it by , then annualize by . This is correct. The error is to annualize first, then haircut:
This double-counts the autocorrelation effect. The correct formula is:
The factor is , not . 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 , the AR(1) coefficient at weekly frequency is approximately , 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:
- The reported Sharpe with sample size and frequency.
- The estimated autocorrelation function (or at least the first 5 lags).
- The Newey-West truncation lag used.
- The VIF estimate.
- 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.