Take the 2-minute tour ×
Quantitative Finance Stack Exchange is a question and answer site for finance professionals and academics. It's 100% free, no registration required.

In the context of mutual funds the KID directive forces us to calculate 5 year ex-post volatility of a (market) fund (weekly returns). Thus each week we look back in the past and calculate volatility (annualized) using the last $5*52 = 260$ weekly returns.

Given a $5$ year history and thus a recent ex-post volatility how can we set an ex-ante limit for a market fund in order not to breach a certain level of ex-post volatility in the next period?

To start a chain of thoughts: We are given returns $r_1,\ldots, r_{260}$ now and one week later we are given returns $r_2\ldots r_{260}$ and a new return which we assume ex-ante to be normally distributed with volatility $\sigma$ then the future ex-post variance is given by (assume an average return of $0$ for simplicity) $$ 1/259 \sum_{i=2}^{260} r_i^2 + 1/259 X^2 \sigma^2/52, $$ where $X^2$ is chi-squared distributed with $1$ df (the factor $1/259$ is the usual factor for the variance estimator and $1/52$ scales annualized variance to weekly). Thus if we want that the ex-post vol is below a threshold $t$ we need that $$ 1/259 \sum_{i=2}^{260} r_i^2 + 1/259 X^2 \sigma^2/52 \le t^2 $$ and thus $$ X^2 \sigma^2/52 \le 259*t^2-\sum_{i=2}^{260} r_i^2, $$ and we could use this equation to set a limit on ex-ante vol.

share|improve this question

1 Answer 1

up vote 0 down vote accepted

The chain of thoughts above seem to work. I post some R code where I implemented this. Seems to work well. Comments are welcome!

r.hist = rnorm(5*52,0,0.18/sqrt(52)) ## 18% vola
limit.vol = 0.2 ## limit 20% vola

## next period 5% confidence

gap = 0.2^2/52*259-sum(r.hist[2:259]^2)
var.treshold = gap/qchisq(0.95, 1)
target.vol = sqrt(var.treshold*52)
cat("Target vola",round(target.vol*100),"%")
## simulate
ex.post.vol = NULL
N = 1000
new.ret = rnorm(N,0,target.vol/sqrt(52))
for (i in 1:N){
r.new = c(r.hist[2:259],new.ret[i])
ex.post.vol = c(ex.post.vol,sd(r.new)*sqrt(52))

plot(ex.post.vol,main="Sampled ex-post vol one week later")
share|improve this answer
What you're doing makes sense. I feel like I've done something similar before in my backtesting, but it seemed more complicated than just a regular constant ex ante limit, which works well enough. The bigger question is if there is an advantage to doing this or not. –  John Jun 13 at 19:43
@John I have done the above simulations with Gaussian returns and additionally with t-distributed retunrs in order to have fatter tails. The ex-ante limit in simulations seems to work. In the setting where I have to obey some ex-post limit .. what else could I do? I observe past variance and then ex-ante I try to control the near future. Any other idea? Thanks! –  Richard Jun 20 at 12:49
If people ask, I just tell them that the tracking error limit is a ex ante guideline, rather than an ex post objective. Maybe not the best solution, but no one has complained. Also, what I referring to was whether the portfolio would have better performance with the ex post rule vs. the ex ante rule, not necessarily whether the ex post tracking bound would be contained (as I believed you that it would work as I had tried something similar before). –  John Jun 20 at 13:44

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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