I should preface this by saying I am an undergraduate physics student, this is more of a side interest to me, so I apologise if I am missing something obvious. I am not following a formal class or taught guide, just going based off internet research.

I want to demonstrate the difference in the predicted stock options prices from The standard Black-Scholes European Call option formula (assuming constant volatility) compared with what the GARCH(1, 1), ARCH(1) and EGARCH(1, 1) models predict the options price to be (and finally compared to the actual options prices). I have used python to do the following:

  1. Acquire log returns data as a time series using yfinance on two stocks, e.g. yf.download("GOOGL", start="2010-01-01", end="2022-03-25") and yf.download("AMZN", start="2010-01-01", end="2022-03-25")

  2. Split the log returns data into two sets, a training set made up of the first 80% of the data, and a testing set made up of the remaining 20% of the data.

  3. Use a maximum likelihood estimation method (Scipy Minimise) to acquire the parameters for each model ARCH(1), GARCH(1, 1) and EGARCH(1, 1).

  4. Use these model parameters to forecast volatility in the date range of the testing set, and compare it to the "actual" volatility in this range. The actual volatility is calculated using the standard deviation of the returns in the testing set over a 30 day rolling window (pandas method).

  5. Plot the rolling standard deviations against the ARCH, GARCH and EGARCH forecasts as a visual representation

But this only shows me the volatility movements within the time range of the testing set time series. How would I acquire a volatility value from each model, to input into the Black-Scholes equation to calculate an options price (with all other variables in B-S held constant except for strike price and stock price which are varied to get prices for in the money and out of the money options)? In the case of the Black-Scholes constant volatility assumption, I could use a single volatility value right, but for ARCH, GARCH and EGARCH since they assume volatility is a function of time, would I let the volatility parameter in B-S become a function of time and therefore the $d_1$ parameter in B-S becomes: $$d_1 = \frac{\ln\left(\frac{S}{K}\right)+rT-\frac{1}{2}\int^T_0\sigma^2(t) \,\text{d}t}{\sqrt{\int^T_0\sigma^2(t) \,\text{d}t}}$$

where $S$ is the stock price, $K$ is the strike price, $T$ is the time to expiration and $r$ is the risk-free interest rate. I thought if I did this integration, it would give me the cumulative volatility predicted by the GARCH, ARCH and EGARCH model within the time range of the testing set, which I'm not sure would be the right input into the B-S.

  • $\begingroup$ GARCH-type models might not do great at long-horizon forecasting. If there was a need to predict a month ahead, I would probably run a GARCH model on monthly data and predict 1 step (that is, one month) ahead rather than run the model on daily data and predict 30 steps (that is, 30 days) ahead. On the other hand, I am not so familiar with options; perhaps you need daily data for them even if the option expires in a month. $\endgroup$ Apr 18, 2023 at 8:30


Your Answer

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