Skip to content
All library documents

Approximating Cumulative Simple-Return Volatility Over Time

Article Quant Q&A · Author: Vim

Summary

The document studies how the volatility of compounded simple returns changes with horizon when period returns are independent and identically distributed normal variables. It notes that the exact variance can be derived from the first two moments of a single-period return, while the familiar square-root-of-time approximation is useful only over shorter horizons. The answer also discusses approximating log growth with a Taylor expansion and presents a volatility relationship involving average annualized return and an empirical adjustment factor for skewness and kurtosis.

A simulation of daily returns is used to illustrate nonlinear growth in cumulative-return volatility, and a power-law curve is fitted to the resulting series. This is an example rather than a general calibration: the fitted parameters depend on the simulated return assumptions and fitting setup. The answer cautions that the Taylor approximation degrades for large annualized returns and may be biased when returns are negatively skewed and heavy-tailed. The simulation procedure and reported fit do not establish out-of-sample predictive accuracy.

Key ideas

  • Compounding independent simple returns produces cumulative volatility that need not grow with the square root of time over long horizons.
  • The exact cumulative variance can be calculated from the single-period return moments under the stated independence assumption.
  • A Taylor expansion links log growth to annualized simple return and its volatility, but accuracy weakens for larger returns.
  • An empirical adjustment factor is proposed to account for skewness and heavy tails.
  • A simulated example fits a power-law curve, but its parameters are specific to the simulation and fitting choices.

Tags

Full text
# In search of nice (approx) function forms of the volatility of cumulative simple returns


# In search of nice (approx) function forms of the volatility of cumulative simple returns












Let's consider a period $t\in[0,T]$, and let the simple return over year $t$ ($1\le t\le T$) be $r_t$. Assume $r_t$ are iid normal. The cumualative simple return over the whole period $[0,T]$ is $$R_T=\Pi_{t=1}^T(1+r_t)-1.$$ Question Is there a nice function form $f(T)$ that can approximately capture the volatility of $R_T$?

Thoughts Assuming iid, it's not hard to obtain the explicit formula of $\sigma^2(R_T)$ as follows $$ \begin{align} \sigma^2(R_T) &=\Bbb E((\Pi_{t=1}^T(1+r_t))^2)-(\Bbb E(\Pi_{t=1}^T(1+r_t)))^2\\ &=(1+\Bbb E(r_1^2)+2\Bbb E(r_1))^T-(1+\Bbb E(r_1)^2+2\Bbb E(r_1))^T\\ \end{align} $$ Obvously, if you know the mean and the variance of $r_t$ then you are able to completely determine $\sigma(R_T)$ given any $T$. However, what I want is a more or less "easier" form (perhaps approximate) that we can easily fit a curve against, like $\sigma(R_T)\sim aT+b$ or $\sigma(R_T)\sim aT^\alpha + b$ etc.

So far I only know that when $T$ is small, we should expect $\sigma(R_T)\sim \sqrt{T}\sigma(r_1)$, but this approximation fails badly when $T$ is large.

## Answer by skoestlmeier (score 2, accepted)

https://quant.stackexchange.com/a/43434

Note:

It is computationally simple to determine the volatility of any given return series, so in fact there may be no need for this approximation.

Let's start with the annualized return $r_a$, which is $$r_a = \sqrt[T]{1+R_t}-1$$

where $R_t$ is the cumulative return over the whole period $[0,T]$. Consider the Taylor-approximation $$log(1+y) = y - \frac{1}{2}y^2 + \frac{1}{3}y^3 - \frac{1}{4}y^4 +...$$

Taking the first two terms, you obtain: $$log(1+r_a) \approx r_a - \frac{1}{2}\sigma_{r_a}^2$$

However, if $r_a$ is not approximately zero, the error becomes great. The following image shows this error $log(1+y) - y$ within the interval $y \in [-0.8,0.8]$:

If any annualized return $r_a$ is smaller than -39% or greater than 52%, the error from the approximation exceeds 10%!

Further, most financial asset returns have negative skewness and leptokurtosis, so the approximation above is biased upwards. In fact, you may adjust for this and use the formula $$log(1+r_a) \approx r_a - k\frac{1}{2}\sigma_{r_a}^2$$ ,where $k$ is an empirical factor (often between 5 and 10), see here.

Re-arranging gives you an approximation for the volatility of the return series: $$\sigma_{r_a} \approx \sqrt{\frac{2r_a - 2log(1+r_a)}{k}}$$

### EDIT

OP is asking on how to fit a curve of $\sigma(R_T)$ in terms of $T$. Let me provide you the results of a simulation run in R. I use 100,000 daily returns following a normal distribution $N(0.01/252, 0.005)$, so i assume a mean return of one percent per year with a standard deviation of 7,94% ($0.005 \cdot \sqrt{252}$):

```
set.seed(100)
r = rnorm(100000, .01/252, .005)

## Vector containing the cumulative simple return up to T
cum <- vector(mode = "numeric", length = 100000)

## Vector containing the volatility up to T
vola <- vector(mode = "numeric", length = 100000)

for(i in 1:100000){cum[i] <- prod(1+r[1:i])}
for(i in 1:100000){vola[i] <- sd(cum[1:i])}

## vola[1] is NA due to vola[1] <- sd(cum[1:1]),
## so we set it to zero
vola[1] <- 0

summary(cum)
Min.    1st Qu.  Median   Mean    3rd Qu.  Max. 
0.8405  1.2581   2.1961   5.1116  5.0303   36.2721

summary(vola)
Min.    1st Qu.  Median   Mean    3rd Qu.  Max. 
0.0000  0.1775   0.4096   1.1516  1.1164   6.3274
```

The following image shows the variable `vola`, i.e. $\sigma (R_T)$ for $T \in [0; 100,000]$:

We see, that $\sigma (R_T)$ is non-linear and increasing in time. I implement your suggested regression $$\sigma(R_T)\sim aT^\alpha + b$$ using time $T$ with single steps of $\frac{1}{100,000}$, which results in:

```
## set up variable time
time <- seq(0, 1, 0.00001)

## eliminate first value of time which is zero,
## so we have single time steps of 1/100,000
time <- time[-1]

reg <- nls(vola ~ a*(time^alpha)+b, start = list(a=1, alpha=1, b=1))
summary(reg)

Parameters:
       Estimate  Std. Error t value  Pr(>|t|)
a      5.914458   0.003736  1582.9   <2e-16 ***  
b      0.208985   0.001096   190.7   <2e-16 ***
alpha  5.274693   0.006115   862.6   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.245 on 99997 degrees of freedom

Number of iterations to convergence: 7 
Achieved convergence tolerance: 1.396e-06
```

In summary, your suggested non-linear regression model seems to be useful. However, my starting values were chosen randomly, so you might try to evaluate if other configurations don't affect the results to heavily. You might want to try the glmulti R-package which implements this Automated Model Selection with (Generalized) Linear Models.

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.