Predicting stock returns with GARCH in Python

I have seen this post: Correctly applying GARCH in Python which shows how to correctly apply GARCH models in Python using the arch library. Now I am wondering how I can obtain one-step ahead returns forecast. All guides are referring to obtaining volatility forecasts, but not returns.

My intuition would be:

• Retrieve one-step ahead conditional mean and volatility forecasts
• Draw X random numbers from the distribution which was used for fitting the GARCH model.
• Calculate mean + volatility * random_number for all randomly drawn innovations.
• Take mean of the above to receive a point forecast of the return.

Is this approach sound? Thanks in advance!

First of all let me start by saying that I'm not used to using Python. Another thing is that you might want to think about your title again, more specific, the "correctly" term: There seems to be no evidence supporting that you can 100% accurately predict stock returns. Perhaps, you could look up the Efficient Market Hypothesis, more precise how the semi-strong form relates to GARCH models.

I guess you could use this method you're describing, however as far as I can see without actually calculating it myself, when you take the mean at the end you effectively kills the randomness of it. That is, when you generate X different point forecasts, they should in theory be distributed with the assumed distribution in the innovations (which are IID(0,1)), scaled with the (same) volatility forecast and mean, and thus, when taking the mean in the end, you simply obtain a number close to the forecasted conditional mean.

I would simply use a random generated value from the distribution you're assuming in the GARCH, for example a standard normal distribution. Remember that you assume $$e \sim IID(0,1)$$. You could look into a one-step ahead rolling forecast scheme and perhaps just check to see how your rolling forecast compare with real observed returns.

Another thing you could do is look up parametric density forecasting, in which you practically forecasts the volatility and then scale the assumed distribution of the innovations with this volatility.

The GARCH(1,1) process without mean looks like this:

$$r_t = \sigma_t \epsilon_t, ~~~~~~ \sigma_t^2 = \omega + \alpha r_{t-1}^2 + \beta\sigma_{t-1}^2,$$

When you assume that the return follows a GARCH process, you simply say that the return is given by the conditional volatility ($$\sigma_t$$) times a randomly generated number ($$\epsilon_t$$) from your specified distribution. In case you want to include a mean you simply add it to $$r_t$$.

EMH edit

I recommend that you take a look at how the efficient market hypothesis, and related implications on the innovations, corresponds to GARCH modeling. A good buzzword is martingale difference. A good reference on this subject is Fan & Yao, 2017 The Elements of Financial Econometrics.

• Thanks for your answer. Of course correctly did not refer to the accuracy of the potential forecast, but simply to the fact how to correctly retrieve the return forecast from the forecast object. I was wondering how to incorporate the conditional volatility forecast into the prediction, as the most straightforward way only accounts for the conditional mean. – abu Oct 19 '18 at 8:06
• I'm going to edit my answer to hopefully make it clear how to GARCH process used the volatility in the prediction of the return. – Morten Andersen Oct 19 '18 at 8:22
• Thanks for the edit. What still eludes me is that I can have the mean and volatility components from the model, however, I do not have the innovation. So to obtain the return following your equation, I still need to multiply the volatility by an innovation drawn from a certain distribution. – abu Oct 19 '18 at 9:09
• The thing is that even if the "true" return follows some already known distribution (which they probably don't) you still have to assume a distribution. The usual assumption is a Gaussian, however, this generally don't work so well in practice due to the stylized facts of financial returns. You could look into a skewed t distribution or a Johnson's SU distribution, as they seems to be quite complacent when you do a parametric density forecast – Morten Andersen Oct 19 '18 at 9:55
• Lastly, I will say that in order to use an ARMA-GARCH model for returns you probably want to test if there is indeed autocorrelation in them. If I remember correctly, the stylized facts of financial returns says that in theory returns should not be autocorrelated. I hope this helps. Fan & Yao also have a section for ARMA-GARCH, you might look into that. – Morten Andersen Oct 19 '18 at 12:01

Similar as Morten states it: if you have a forecast of the return (as conditional mean) then this is a sound forecast. GARCH error could tell you something about the risk but as a point forecast you usually take the conditional mean and you already have it.

Of course it would be a miracle if you could get tradeable forecasts of returns that are better than chance from an ARIMA (or similar) time series model.