I'm trying to forecast a time series of a stock option using ARMA-GARCH modelling in R. First I determine the ARMA order using AIC and I found (0,1) to be the best one.

But when I run


I get constant mean forecasts.

Whereas when I use ARMA(1,1):


I get variables mean forecasts. Does anyone know why is that?

How do I forecast the actual prices of the stock (not its variance)?


ARMA(0,1) (also known as MA(1)) will give a constant forecast beyond the time period $t+1$. More generally, MA($q$) will give a constant forecast beyond the time period $t+q$. This is nothing new; you may check any introductory time series textbook or lecture notes where forecasts from an MA(1) or MA($q$) model are discussed. Alternatively, you may check this post or search through other posts tagged with arima and forecasting.

On the other hand, ARMA(1,1) will give variable mean forecasts. Again, you may find that in any introductory time series textbook.

Edit: the following paragraph applies to stock returns and may be irrelevant with regards to stock options.

A side note regarding forecasts for stock returns: there is very little chance that an ARMA($p$,$q$) model will beat a naive no-change forecast. It would be more realistic to assume an ARMA(0,0) model for the conditional mean of the stock returns. I am not so sure about the option include.mean. In the medium run, the stock price could be going up together with inflation, then include.mean=TRUE could make sense (assuming that the inflation is constant). In the long run, the assumption of constant inflation may fail, so you could try disinflating the stock price before modelling it using the ARMA-GARCH model.

  • 1
    $\begingroup$ Thanks Richard for your answer. How can I then predict the actual values of the stock price using ARMA(0,1) for say the next month (n.ahead=30)? I am not understanding the relation between inflation and the presence of the mean, could you please expand on this? Thanks $\endgroup$ – user3384794 May 31 '15 at 8:09
  • $\begingroup$ The forecast 30 periods ahead (n.ahead=30) will equal the forecast 1 period ahead. That happens because you assume your model is ARMA(0,1), and such a model delivers a constant forecast beyond the period $t+1$. Oh, I noticed I missed the term option. If you are working on stock options rather than stock prices, then it may be a different story and the last paragraph in my answer may not be relevant. $\endgroup$ – Richard Hardy May 31 '15 at 8:24
  • $\begingroup$ The argument about inflation goes like this: if nominal prices in the economy rise by 0.01 percent per day due to inflation, then the stock prices should rise as well to reflect the increasing nominal value of the assets behind the shares of the companies. The two effects (rising nominal prices and rising share prices) cancel out so that the real value of the shares remains unchanged, ceteris paribus. $\endgroup$ – Richard Hardy May 31 '15 at 8:32
  • $\begingroup$ Thanks Richard. I know this argument but how does the mean affect this? Regarding the forecasting, I assumed an ARMA(0,1)-GARCH(1,1) model after performing AIC for different orders. But this means that I can't forecast for more than one day? unless I have at least ARMA(1,1)? thanks $\endgroup$ – user3384794 May 31 '15 at 10:52
  • $\begingroup$ If you allow for a constant effect of inflation, you would include an intercept in the model for stock returns. If not, you would exclude the intercept. Regarding this means that I can't forecast for more than one day, this is not true. You can forecast, and the forecast is constant starting from $t+1$. A constant forecast is still a forecast. Assuming the model is actually the true model (just as an example), this is even the best forecast you can get. The forecast being a constant does not mean it is inferior. $\endgroup$ – Richard Hardy May 31 '15 at 11:15

It is normal that you get a constant forecast: this follows from the properties of the model that you specified (MA).

Here's the but: you can use a moving window or expanding window to obtain variable estimates. That is, you reestimate the model for each forecast that you make using a different set of datapoints.

Edit: To expand on what I mean with a moving window or expanding window. A moving window or expanding window can be used if you want to test how good your forecasts are, but have actuals available for the data that you want to forecast (i.e. for backtesting). If you use a moving window of $T$ days it means that you estimate the forecast for $y_{t+1}$ only with the $T$ most recent datapoints that is, only with the data from time $t-T+1$ till $t$. An expanding window is similar but uses all the new data that becomes available. That is, if you forecast $y_{t+2}$, you also use the datapoint of $y_{t+1}$. Hope this gives you an idea.

  • $\begingroup$ you mean an updated set of datapoints with your forecast? $\endgroup$ – user3384794 May 31 '15 at 16:12
  • $\begingroup$ @user3384794 I edited my answer to show more details of what I mean :). $\endgroup$ – rbm May 31 '15 at 18:01
  • $\begingroup$ I believe the conditional mean equation in your answer is wrong. MA(1) should look like $$y_t=\mu+\epsilon_t+\theta \epsilon_{t-1}.$$ You have missed the $\theta \epsilon_{t-1}$ part. This will change the implications on forecasts etc. $\endgroup$ – Richard Hardy May 31 '15 at 19:36
  • $\begingroup$ @richardhardy Good point. I was confused with a GARCH(0,1) setup instead of ARMA(0,1) (w/ garch). Will edit. Thanks! $\endgroup$ – rbm May 31 '15 at 19:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.