After reading some more of Volatility Trading, I decided to try to make a simple volatility model using daily log returns of an ETF I follow. It turns out "simple" is sort of relative. Unfortunately, it seems most literature is hopelessly vague on how exactly to do such a thing.

So I started by taking the log of closing prices, and differencing them to detrend the data and get the log return series. I showed it was stationary by running ADF (p-value < 0.01).

Now this is where the trouble starts. Since this is a univariate GARCH model, I decided to run with the rugarch package in R. I initially spec it as GARCH(1,1). The solver fails to converge. Ok - so I run a bootstrapper and try to get more data to see if I can at least get some form of convergence - it fails. Turning up the iterations also seems to make it fail. So I couldn't really explain how good or bad the data was.

After reading Eric Zivot's Practical Issues in the Analysis of Univariate GARCH Models it strikes me that I should be using some sort of transformed data. I noticed he mentions squaring the log returns, so I blindly try that and the GARCH solver converges without issue. Reading more into this I find another paper - Volatility Forecasting I: GARCH Models - that discusses that squared returns are positively autocorrelated. So I ask myself - what is this squared return thing?

Enter a post from here titled Squared and Absolute returns. This post unfortunately isn't so helpful, but it sent me down the rabbit hole reading Volatility Estimation from the CME group. Section 1.1 highlights that squared returns are a proxy for volatility, however it is extremely imprecise. This leads me to a handful of questions I'm hoping you guys can help me with:

  1. If squared returns are an imprecise proxy for volatility, why is it suggested we build GARCH volatility models using them? Won't this reduce the effectiveness of the model's predictions?

  2. Eric Zivots paper makes mention of GARCH effects of a time series. One of the ways you can check for the is the Ljung-Box test. However, I don't quite understand how to set this up, especially in R. My inclination is to think that my log return series does not have GARCH effects, however the squared log return series does.

  3. Can we use a different, more precise, volatility estimator and build a GARCH model on that? (ex Garman-Klass)

I apologize if these are trivial questions - I just can't seem to find a single resource that answers my exact question. I'd really appreciate any help or direction to resources where I can figure this stuff out. I really would like to fully understand this before I put it to practical use. Thanks in advance!

  • 1
    $\begingroup$ This question could be better suited for Cross Validated as it is not really finance-specific, but since it already got a nice answer, perhaps it's OK to leave it here. $\endgroup$ Commented Jun 23, 2016 at 16:20

1 Answer 1


Assume that your stationary time series (here a daily close-to-close log-returns' series) is modelled as follows $\forall t \in \mathcal{T}=\{1,...,N\}$ \begin{align} r_t &= E_{t-1}[r_t] + \epsilon_t \\ &= E_{t-1}[r_t] + \sigma_t z_t \end{align} with $z_t \sim N(0,1)$ and $\{z_t\}_{t \in \mathcal{T}}$ are IID.

The above equations suggest that, knowing the information available at $t-1$ (i.e. given the filtration $\mathcal{F}_{t-1}$), the conditional mean and variance of $r_t$ are respectively given by \begin{align} E_{t-1}[r_t] \text{ and } \sigma^2_t \end{align} Now we can further specify a conditional mean model e.g. an ARMA(p,q) $$ E_{t-1}[r_t] = \omega_1 + \sum_{i=1}^p \alpha_i r_{t-i} + \sum_{j=1}^q \beta_j z_{t-j} $$ and/or a conditional variance model e.g. a GARCH(r,s) $$ \sigma_t^2 = \omega_2 + \sum_{k=1}^r \gamma_k r^2_{t-k} + \sum_{l=1}^s \delta_l \sigma_{t-l}^2 $$ Notice that these two models can be specified independently of one another. It is crucial not to confuse the two, especially when using third-party libraries.

Now, let us forget about the conditional mean in the remainder of this answer and assume $E_{t-1}[y_t]=0$ which is often a reasonable approximation in practice, at least as far as daily log-returns are concerned. Further assuming a GARCH (1,1) one gets: $$ r_t = \sigma_t z_t\ \ \text{ along with }\ \ \sigma_t^2 = \omega + a r_{t-1}^2 + b \sigma_{t-1}^2 $$

From the above specification it is clear that: $$ E_{t-1}[r_t^2] = E_{t-1}[\sigma_t^2 z_t^2] = \sigma_t^2 \underbrace{E_{t-1}[z_t^2]}_{=1} $$ because $z_t \perp \sigma^2_t$ and $\sigma_t^2$ is $\mathcal{F}_{t-1}$-measurable. The above equation shows that squared returns are an unbiased proxy of conditional volatility. Yet because $z_t^2 \sim \chi_{(1)}^2$ this is a very imprecise proxy, see CME paper page 5 or Triacca, 2007 page 256 in Applied Financial Economics Letters, 3.

Now back to your application, you would like to estimate historical volatility right? You have different possibilities. Let's take a look at what you propose:

  • GARCH(1,1): Assuming no conditional mean model is superimposed, the parameters you need to estimate are $\omega, a$ and $b$ reading those posts here and here may help you in your endeavour. There is no reason why you should use transformed returns except if: (1) the function you're using is specifically designed to take transformed returns in input, but I find this weird (you seem to have read that we use squared returns somewhere could you exactly point out where?) (2) Transformations such as taking the square root (or the natural logarithm etc.) maybe to useful to stabilise variance (i.e. make the series stationary), but you have already checked that this was OK via an ADF test. In other words, the function you use should return you an answer. Even if there is no GARCH effect as you seem to imply, in which case $a=b=0$ and you'll have a constant variance (homoskedastic returns). You should further investigate why this step fails IMHO, identify the reason while there is no convergence. Maybe use variance targeting to reduce the complexity of the numerical optimisation step (see the linked posts above)?

  • Garman-Klass volatility estimator or any other volatility estimator for that matter e.g. Yang-Zhang or sample realised volatility over rolling windows. As the name indicates, these are estimators not models (although they do require underlying modelling assumptions). They are purely descriptive: you apply a formula and get a volatility estimate. I don't see why would one ever want to build a GARCH model on top of such an estimator. Remember that GARCH is a conditional variance model. Why would you model the conditional variance of a volatility estimator?!

PS: I'm neither an expert in statistical tests nor in R so I can't really comment on how to set up the Ljung-Box test. Still, I would say that your inclination is not right, although I guess you could claim that, in general, returns are not autcorrelated while squared returns are, see this seminal paper on market stylised facts.

  • $\begingroup$ Yes, that was my mistake. It appears that volatility clustering (an indicator you should use GARCH) manifests itself as autocorrelation the squared returns, which you can test with Ljung-Box. Since we're just looking for autocorrelation, the accuracy of the numbers doesnt matter as long as they preserve the autocorrelation. As you said, I should the log returns as input to the GARCH model. One thing I have tried was 98% winsorization, which seems to help the data converge more regularly. GARCH seems very sensitive to outliers. $\endgroup$
    – user20664
    Commented Jun 23, 2016 at 15:55
  • $\begingroup$ Numerical optimisation problems, although seemingly trivial, always hide some complexity. Don't forget to accept this answer if it helped. $\endgroup$
    – Quantuple
    Commented Jun 23, 2016 at 17:15

Your Answer

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