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!


3 Answers 3


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.

Addition of GARCH edit

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.

  • $\begingroup$ 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. $\endgroup$
    – abu
    Oct 19, 2018 at 8:06
  • $\begingroup$ 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. $\endgroup$ Oct 19, 2018 at 8:22
  • $\begingroup$ 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. $\endgroup$
    – abu
    Oct 19, 2018 at 9:09
  • $\begingroup$ 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 $\endgroup$ Oct 19, 2018 at 9:55
  • 1
    $\begingroup$ 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. $\endgroup$ Oct 19, 2018 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.


Expected returns or returns forecasts are not better using GARCH than ARIMA. GARCH is usefull only to predict expected return variance or future return squared. For this reason you don't find guides to compute return forecasts. You usually define your random number to have a zero mean for this reason you should only use the mean that you have. This is equivalent of not using the GARCH model in the first place but directly using ARIMA. Or in your case just using the mean of the past returns.

(This was allready kind of explained in the other answers but I hope I made it more evident to someone.)


Your Answer

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

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