# 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?

-
Generally, yes. But I'm not shure about your formulation of the geometric brownian motion, I'd say your formula describes a standard brownian motion. The formula I know and use is something along the lines of $\Delta S= S\cdot e^{\mu \Delta t + \sigma \epsilon \delta t}$. – Owe Jessen Apr 30 '12 at 8:16

1
miggety: "at each time step": Is that for each path and each time step, so maybe 100,000 GARCH recalculations per time step? Does the GARCH-result depend that much on 1 additional time step? I mean you add 1 data point each time step. @Owe Jessen miggety's GBM formula is the Euler-Maruyama discretisation of the SDE which yields an analytic solution like the one you are using, Owe. See GBM as well. – Konsta Apr 30 '12 at 10:53
– SRKX♦ Apr 30 '12 at 11:52

1
@SRKX - I don't think this community would benefit from a very narrow definition of quant. – Owe Jessen Apr 30 '12 at 13:36
@OweJessen : this meta post discussed the point you're making. Fell free to participate in Quantitative Finance Meta. As for this post, I believe it's borderline to what we can accept, so we can just wait and see how the community and the mods react to that, there is no need to do anything else. – SRKX♦ Apr 30 '12 at 14:23
show 1 more comment

## 4 Answers

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.

-

Bob, your assumption is correct. That is exactly what I was asking! Thanks! – miggety Apr 30 '12 at 14:22
Yeah but then you're not using a GBM anymore... it's just not the same. – SRKX♦ Apr 30 '12 at 14:29

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 $q$ last returns. And it assumes that each new return is

$$r_t=a_0 + \sum_{i=0}^q a_i r_{t-i} + 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}^q \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, \alpha, \beta$ (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.

-

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!

-

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.

-
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 32, "mathjax_display_tex": 9, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0}, "config": {"markdown_headings": true, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 10, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "plain"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "english_confidence": 0.9336698651313782, "perplexity_flag": "middle"}