A reader’s comment on my ARMA Models for Trading post asked about different aspects of my experience with ARMA+GARCH for trading forecasting. The more I thought about it, the more it looked like a full post. So here we go.

Starting with the high level – what packages did I try? I have tried a few, the functions from the standard distribution, the *fArma* and the *fGarch* packages, the *forecast* package and the *rugarch* package. It’s clear from the posts that my preference is for the *fGarch* and *fArma*. Both feature good APIs, but most importantly, are very stable. What do I mean by that? I have run functions from these packages millions (no joking) times, and I never hit an *unexpected* error (a crash in other words) or noticed weird behaviour. The only complain I can file against them is that they don’t support rolling forecasts, a feature supported by the other packages (this older post of mine illustrates this feature using the *rugarch* package).

Moving to the parameters, it makes sense to start with the rolling window. Lately I have been using a window of 500 points, which is equivalent to about two trading years on daily data. This time span makes a good sense in terms of length – not too long, not too short, less than half of a normal business cycle.

How often to re-fit the model – daily? Weekly? Or even monthly? The more often the better, but I didn’t go shorter than daily.

While I don’t have a problem using longer windows, shorter once definitely have issues – the models fail to converge more often. In other words, 250-500 points is the shortest window size that works generally well.

Another parameter is the distribution for the residuals. As expected, the default normal distribution does not work well. My default choice is the *SGED* (Skewed Generalized Error Distribution) distribution, with *SSTD* (Skewed Student-T Distribution) distribution showing very similar results (last time I looked at it).

What models to look at? I don’t like varying the *GARCH* components, I usually stay with *(1,1)*. From my experience the big difference is whether the volatility is modelled or not, not how precisely it’s modelled. My default range for the ARMA components is *(0,0)* to *(5,5)*. Longer models may perform slightly better but add too much overhead and in general I decided to stay away from them.

Not much difference between using different metrics (*AIC*, *BIC*, *SIC*, etc), thus, I stay with the default *AIC*.

For the rest, I tend to use the defaults. Avoiding over-fitting is one reason, but the main reason is that every parameter increases the number of tests I need to perform before committing real money.

Last, one needs to find the financial instruments to apply these methods to. Besides my post, check this paper for applications of a very similar approach to FOREX trading.

So, that’s all. Leave a comment if I left out something important, or if you want to share feedback.

{ 2 comments… read them below or add one }

In choosing ARMA(p,q) the theory of difference equations suggests that

we should choose ARMA(p+1,p), which gives rise to a solution of the difference

equation with p+1 terms. You can of course have some zero orders

This is explained in my book H. D. Vinod,

“Hands-On Intermediate Econometrics Using R: Templates for Extending Dozens of Practical Examples.” (2008) World Scientific Publishers: Hackensack, NJ.

(http://www.worldscibooks.com/economics/6895.html)

I wish I heard of your work earlier. Thanks for the feedback.