Serial Correlation and Sharpe Ratio Annualization
Summary
The document asks how to annualize a Sharpe ratio calculated from monthly returns when those returns are serially correlated. It notes that the usual square-root-of-time scaling assumes uncorrelated returns and raises a specific question about estimating the autocorrelations used in the adjustment: whether to use the full available sample for each lag or fixed one-year windows.
The replies give competing context rather than a definitive answer to that estimation question. One describes how return autocorrelation affects the distribution of ending prices and points to volatility scaling that accounts for dependence. Another presents a simulation in which a strongly autocorrelated return process produces an estimated Sharpe close to its population signal-to-noise ratio, suggesting little bias in that setup. These examples are limited: they do not establish a universal correction or resolve the precise autocorrelation calculation for a short sample. The document also distinguishes volatility of returns from volatility of ending prices, which can behave differently under serial dependence.
Key ideas
- The square-root-of-time Sharpe scaling relies on returns being uncorrelated.
- Serial dependence can affect the volatility of ending prices even when return volatility is unchanged.
- A simulation in the discussion finds little Sharpe bias for its particular autocorrelated process.
- The replies do not settle how to estimate lag correlations for annualization in a short sample.
Tags
Full text
# How to annualize Sharpe Ratio if monthly returns are serially correlated? Calculation of autocorrelations
# How to annualize Sharpe Ratio if monthly returns are serially correlated? Calculation of autocorrelations
I am looking at a data set of 60 monthly returns (last 5 years) and want to calculate an annualized Sharpe Ratio.
The usual way of doing this is to calculate the monthly Sharpe Ratio first, and then multiply it by a scaling factor. This scaling factor is the square root of 12 if returns are not serially correlated.
In my data set however, the returns exhibit statistically significant autocorrelations. I am aware that Lo (2002) suggests to use a scaling factor which accounts for the first 11 autocorrelations (specifically, autocorrelations for time lags 1 to 11).
My question revolves around the calculation of the autocorrelations for the purpose of annualization: Do I calculate the first 11 autocorrelations for the biggest possible periods (in my case it would be 60 - 11 = 49 months)? Or do I calculate autocorrelations for 12 month periods?
I tried to retrieve the correct way to do this from Lo (2002), but this uncertainty remains for me after reading through the paper and similar Q&A threads I found.
## Answer by Newquant (score 1)
https://quant.stackexchange.com/a/72246
Whilst autocorrelation does not affect the sharpe ratio when using purely returns, positive autocorrelation does reduce the sharpe ratio when considering the price space - all else equal.
Autocorrelation affects the ending distribution of the asset price. Higher autocorrelation = higher volatility in ending prices. An example to illustrate this: with -1 autocorrelation, all returns are followed by a return of equal and opposite size & direction. So the returns will have the same volatility as the I.I.D process, but the price will be fixed at s_0 - hence 0 volatility.
Carol Alexander writes about this in her second book on market risk analysis. The channel bionic turtle has a video on the change in scaling factor from just sqrt(t).
Here is the link to the video: https://youtu.be/Ms3uu9TKcgA
Then it is a matter of multiplying the volatility in the denominator by the scale factor.
Hope it helps.
## Answer by shabbychef (score 0)
https://quant.stackexchange.com/a/70591
The following simulations indicate that autocorrelation does not bias the Sharpe ratio:
```
ope <- 252 # (trading) days per year
mu <- 0.001
sg <- 0.0130
zeta <- sqrt(ope) * mu / sg
print(paste0("Annualized Sharpe is around ",zeta,"\n"))
n <- 3*ope # simulate 3 years of data
simit <- function(n,mu,sg,rho=0.0) {
# compute y which have mean mu, whose marginals have standard deviation sg, and autocorrelation rho
y <- mu + sg * sqrt(1-rho^2) * arima.sim(model=list(ar=c(rho)),n=n,rand.gen=rnorm)
# return the sharpe of the same
mean(y)/sd(y)
}
set.seed(1234)
vals <- replicate(100000,simit(n,mu,sg,rho=0.9))
print(paste0("empirical Sharpe and population SNR are: ",round(mean(vals),5)," and ",round(mu/sg,5),"\n"))
```
I get results:
```
[1] "empirical Sharpe and population SNR are: 0.07744 and 0.07692\n"
```
Corresponding to a bias of less than 1%.
The calculations for why this is the case are detailed in Short Sharpe Course linked above (and the very expensive book form of the same).Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.