Skip to content
All library documents

Simulating Stock Prices with GARCH Conditional Volatility

Article Quant Q&A · Author: miggety

Summary

The document distinguishes constant-volatility geometric Brownian motion from a model in which returns have time-varying conditional volatility. It explains that a GARCH model is fitted to historical returns, typically by estimating its parameters, and then generates future volatility recursively from prior shocks and variance. Each simulated step draws a random innovation, updates conditional volatility, and uses both to produce a return and price path.

Several answers outline variations: a simple mean equation, an autoregressive return mean, and a more specific discretized stochastic process. They agree that simulated volatility depends on the evolving simulated history, rather than being a fixed sequence taken from an unconditional term structure. The discussion supports use in Monte Carlo work, including option simulation, but notes that the return mean specification matters and that the proposed process may be unsuitable for studies requiring other mean terms or exogenous variables. No empirical validation or comparison of forecasts is provided.

Key ideas

  • Constant-volatility GBM holds volatility fixed, while GARCH models conditional volatility as changing over time.
  • A GARCH model is fitted to historical returns to estimate its parameters and conditional volatility.
  • Simulation updates volatility from prior shocks and variance, then combines it with a new random innovation to generate returns.
  • The mean equation must match the intended asset process and research use.
  • GARCH-based price paths can support Monte Carlo option analysis, subject to model assumptions.

Tags

Full text
# Stock Price Behavior and GARCH


# Stock Price Behavior and GARCH












In my (limited) understanding, the behavior of a stock price can be modeled using Geometric Brownian Motion (GBM). According to the Hull book I'm currently reading, the discrete-time version of this model is as follows:

$$\Delta S = \mu S \Delta t + \sigma S \varepsilon \sqrt{\Delta t}, \quad \varepsilon \sim N(0,1)$$.

If I'm performing a Monte Carlo simulation, could I use the term structure of a GARCH model to plug in a unique value for the volatility at each time step instead of using a constant value?

Is this a correct use of the GARCH model?

## Answer by Bob Jansen (score 6, accepted)

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

I'm guessing, and correct me if I'm wrong, you want to create a number of possible paths the stock price could follow with the local volatilty given by GARCH depending on the simulated history, or in pseudocode:

```
N <- numberOfPaths
T <- numberOfSteps
for (i in 1:N) {
    newSeries <- pastPrices
    for (t in 1:T) {
        epsilon <- normrnd(0,1)
        sigma <- calculateGARCHVol(pastPrices)
        newSeries.append(nextPrice(epsilon, sigma))
    }
    allSeries.append(newSeries)
}
```

Yes, you can do this and this is correct usage of GARCH.

## Answer by SRKX (score 12)

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

Okay just to wind things down here, I think an important clarification is needed if readers might come and seek to a similar solution.

The Geometric Brownian Motion (GBM) is a model of asset prices dynamics which is usually given as follows:

$$ dS_t = \mu S_t dt + \sigma S_t dB_t$$

where $B_t$ is a standard brownian motion which has several important characteristics, mainly that it is stationary and $B_t \sim N(0,t)$.

It is very famous because it is pretty simple to find a closed form solution to $S_t$ and because it was used in the derivation of the Black-Scholes formula.

What you state is a dicretization of the GBM:

$$S_{t+\Delta t}-S_t= \Delta S_t = \mu S_t \Delta t + \sigma S_t \epsilon \sqrt{\Delta t}$$

You just used the property from the Brownian motion (which is a random walk) and which says that $B_{t + \Delta t} - B_t = B_{\Delta t} \sim N(0,\Delta t)$ and created a similar variable $\underbrace{\epsilon}_{N(0,1)} \sqrt{\Delta t} \sim N(0,\Delta t)$

It this model, you assume volatility is constant $\sigma$.

Now GARCH(p,q) is different: the model tries to find a way to express the return at time $t+1$ given the the last returns. And it assumes that each new return is

$$r_t=a_0 + z_t$$

Where $z_t = \sigma_t \epsilon_t \sim N(0,\sigma_t^2)$

The local volatility is assumed in the model to be

$$\sigma_t^2 = \alpha_0 + \sum_{i=1}^q \alpha_i z_{t-i} + \sum_{i=1}^p \beta_i \sigma_{t-i}^2$$

So what you do is that you choose 2 parameters $p$ and $q$, you fit the model to your historical data to get the parameters $a_0, \alpha_i, \beta_i$ (using a maximum likelihood estimator) and hence you can compute you estimated past $\sigma_i$ for $i \leq t$.

You can then simulate different path of the stock in the future by using the equation of the models to generate the futures $\sigma_t$ and $r_t$ and it will differ on each generation because you need to generate an $\epsilon_t$ at each step. This is useful for Monte-Carlo simulation of options for example when you do not want to use the constant volatility of the discretized GBM.

## Answer by Jase (score 6)

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

I am going to supply an answer that is quite similar to SRKX's (which is very very good) because I want to discuss in more detail a few important things. First, you cannot use a stochastic volatility model for the SDE that you've provided as that's GBM with constant diffusion. However, based on what you've said it's obvious you wish to model a discretized version of the following process:

$$\boxed{dS(t) = S(t)(\mu dt + \sigma(t)dW(t))}$$

where $W(t)$ is a standard scalar Brownian motion under the real-world probability measure, $\mu$ is its constant drift and $\sigma(t)$ is its volatility process which we assume to follow GARCH dynamics.

Doing what we always do most of the time in finance research, I'm going to define returns as $R(t):= \ln{\frac{S(t)}{S(t-1)}}$. In the univariate setting, the mean equation of a ARCH/GARCH type model generally follows:

$$\boxed{R(t) = \mu + \sum_{i=1}^N a_i R(t-i) + b \sigma(t) + \mathbf{c}\mathbf{X(t)} + \sigma(t) (W(t)-W(t-1))}$$

where $a_i$ are the AR(i) coefficients, $b$ is the coefficient of the garch-in-mean, $\mathbf{c}$ is a row vector of coefficients to some exogenous variables represented by column vector $\mathbf{X(t)}$. However, given the process that you've specified, we are restricted to a very specific mean equation:

$$\boxed{R(t) = \mu + \sigma(t)(W(t)-W(t-1)) }$$

where $W(t)-W(t-1) \overset{d}{=} W(1) \sim N(0,1)$. This restriction is not automatically troubling as it is prevalent when modelling DCC-fGARCH (time-varying correlations with family GARCH). However most studies that look to things such as bivariate variance spillovers (e.g., contagion research) or that are doing a study where univariate GARCH is involed (e.g., exchange rate exposure research where market returns and exchange rate returns are exogenous variables in the mean equation) will find this process to be inappropriate for their usage.

Ignoring the empirical issues with the mean equation that follow from the proposed SDE, we can see that the mean equation representation follows from the fact that, at $\mathcal{F}_{0}$ and under real-world $\mathbb{P}$:

$S(t) = e^{\mu t + \sigma(t) W(t)}$

$\therefore \ln{\frac{S(t)}{S(t-1)}} = \mu + \sigma(t) (W(t) - W(t-1))$

$\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\, \overset{d}{=}\mu + \sigma(t) W(1) $

Luckily, the variance equation is unconstrained, and we can use the GARCH model whose process is defined here. For a discretized econometric representation of GARCH(1,1) we have, as SRKX lays out;

$$\boxed{\sigma_t^2 = \omega + \alpha (W(t-1)-W(t-2))^2\sigma(t-1)^2 + \beta \sigma(t-1)^2}$$

So you should then proceed with your plan of discretization while using the correct mean equation that I boxed. This is the default in R packages `ccgarch`, `rugarch` and `fGarch`, so it's your lucky day!

## Answer by John (score 3)

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

For the univariate case, consider X which is the log prices of some stock. First, fit X with an AR(p) model and collect the residuals. Next, fit a Garch(p,q) model and collect the conditional standard deviations. Scale the initial residuals by the conditional standard deviations to produce a new series that has mean of 0 and variance 1. For the sake of simplicity, assume this is normally distributed.

For the simulation a generic step would look like: 1) simulate from N(0,1) and collect that in a vector, 2) create a vector that would be the result of using the Garch model above to find the conditional standard deviation in each simulation, 3) Hadamard product the N(0,1) vector by the new vector of condition standard deviations, 4) add that to what you would get from the conditional mean from the AR(p) equation, 5) take the exp() of the vector to convert back to stock prices. If you do this each period and collect them to one matrix, then you will have the distribution of the prices over time.

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.