2
$\begingroup$

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.

$\endgroup$
3
  • 1
    $\begingroup$ Autocorrelation does not bias the Sharpe ratio statistic, but it will affect the standard error, if you are interested in inference. See Section 4.1 of "Short Sharpe Course". However, if you are computing the Sharpe on relative returns, instead of log returns, there can be an issue. The simplest fix is to use log returns. $\endgroup$
    – shabbychef
    Apr 19, 2022 at 20:23
  • $\begingroup$ @shabbychef Thank you for your comment. I am using log returns, annualize them with a time scaling factor, and then convert them back with exp()-1. Of course, assuming very small autocorrelations, they do not bias the Sharpe Ratio. That assumption however clashes with my observation of statistically significant autocorrelation in the time series, and thus does not hold for my case. Maybe I am missing something, but I do not understand how your statement "Autocorrelation does not bias the Sharpe ratio statistic" would apply for statistically significant autocorrelations that are not very small. $\endgroup$
    – DavidAJ
    Apr 19, 2022 at 21:27
  • $\begingroup$ @shabbychef My rationale is that statistically significant and 'not very small' positive (negative) autocorrelation would increase (decrease) the annualized Sigma of the time series, and accordingly decrease (increase) the annualized Sharpe Ratio. It is obvious to me that autocorrelation only would come into play when annualizing the monthly estimators. $\endgroup$
    – DavidAJ
    Apr 19, 2022 at 21:30

2 Answers 2

1
$\begingroup$

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.

$\endgroup$
0
$\begingroup$

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

$\endgroup$
1
  • $\begingroup$ Full disclosure: I wrote those notes and the book, so maybe you'll want to seek a second opinion. $\endgroup$
    – shabbychef
    Apr 20, 2022 at 16:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.