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.