Continuing my exploration of time series modelling, I decided to research the autoregressive and conditionally heteroskedastic family of time series models. In particular, I wanted to understand the autogressive integrated moving average ARIMA and generalized autoregressive conditional heteroskedasticity GARCH models, since they are referenced frequently in the quantitative finance literature, and its about time I got up to speed.
What follows is a summary of what I learned about these models, a general fitting procedure and a simple trading strategy based on the forecasts of a fitted model. Several definitions are necessary to set the scene. Such a model, properly fitted, would have some predictive utility, assuming of course that the model remained a good fit for the underlying process for some time in the future. An ARMA model note: An MA model is structurally similar to an AR model, except the predictors are the noise terms.
A GARCH model uses an autoregressive process for the variance itself, that is, it uses past values of the variance to account for changes to the variance over time. If the prediction is the same as for the previous day, the existing position is maintained. For example, we could choose parameters that minimize the Bayesian Information Criterion, which may help to reduce overfitting by penalizing complex models that is, models with a large number of parameters.
There is a case for using as much data as possible in the rolling window, but this may fail to capture the evolving model parameters quickly enough to adapt to a changing market.
First, the directional predictions only: The results of this approach are shown below no allowance for transaction costs:. I want to investigate the predictive power of the magnitude of the forecast return value. Specifically, does filtering trades when the magnitude of the forecast return is below a certain threshold improve the performance of the strategy?
The code below performs this analysis for a small return threshold. For simplicity, I converted the forecast log returns to simple returns to enable manipulation of the sign of the forecast and easy implementation. Perhaps filtering trades when we have less confidence in our model would improve performance. There are a number of ways this could be accomplished. Firstly, we could visually examine the correlogram of the model residuals and make a judgement on the goodness of fit on that basis.
Ideally, the correlogram of the residuals would resemble a white noise process, showing no serial correlation. The correlogram of the residuals can be constructed in R as follows:. A better approach would be to examine the Ljung-Box statistics for the model fit. The Ljung-Box is a hypothesis test for evaluating whether the autocorrelations of the residuals of a fitted model differ significantly from zero.
In this test, the null hypothesis is that the autocorrelation of the residuals is zero; the alternate is that the series possesses serial correlation. Rejection of the null and confirmation of the alternate would imply that the model is not a good fit, as there is unexplained structure in the residuals. By way of explanation, the Ljung-Box test statistic X-squared in the code output above grows larger for increasing autocorrelation of the residuals.
The p-value is the probability of obtaining a value as large or larger than the test statistic under the null hypothesis. Therefore, a high p-value in this case is evidence for independence of the residuals.
Note that it applies to all lags up to the one specified in the Box. There are many other varieties of the GARCH model, for example exponential, integrated, quadratic, threshold, structural and switching to name a few. These may or may not provide a better representation of the underlying process than the simple GARCH 1,1 model used in this example.
An area of research that I have found highly interesting recently is time series forecasting through the intelligent combination of disparate models, for example by taking the average of the individual predictions of several models or seeking consensus or a majority vote on the sign of the prediction.
This is all pure speculation, potentially with some backing from this paper , but an interesting research avenue nevertheless. Finally, credit where credit is due: He starts from the beginning and works through various models of increasing complexity.
Handbook of Econometrics, Vol. Conditional Heteroscedastic Models , in Tsay, R. Here you can download the code and data used in this analysis: And then I realized you were also basing your work off Michaels writings.
Damn stuff hurts my head. Hey Matt, thanks for the comment! I hope my article was useful for you. I recently purchased the rough cut of his latest book and refer to it often. Very much looking forward to the final release. In my article, I was aiming to succinctly summarise the theory and focus on some trading ideas that seem a fairly natural extension.
Hopefully it was helpful! You could easily do this yourself by running the script available via the download link, along with the data I used and using the performanceAnalytics package in R. Hello, I am new to time series fitting and found your article very interesting. Is there not a random value involved in the prediction of the price per definition of a GARCH series?
If so, would it not make sense to calculate the probability for the forecast to be long or short by using the ARMA value as mean and the standard deviation and maybe apply a filter then by accepting only values above a certain threshold?
Hey, thanks for reading my blog. If a fixed transaction cost model would suffice, you could simply subtract this fixed transaction cost from each of your returns. Of course, in reality you would get variable spread and variable slippage depending on factors such as real-time volatility and liquidity, so this may or may not be accurate enough for your purposes.
A new model is constructed for each period in the simulation using the previous 1, periods. This assumption may or may not be valid. And if this assumption is valid, while time series modeling is super interesting from a theoretical perspective, it may or may not be of practical use in a trading strategy.
At the very least, there are certainly other considerations beyond the optimal model parameters. Your comment is actually very timely! I recently built a GARCH backtesting framework for a client that enables efficient experimentation with these and other parameters, such as exit conditions and capital allocation.
An efficient experimentation framework is really important for effective and practical research. If you are interested in something similar, ping me at kris[at]robotwealth. Regarding your code how did you handle negative values for the returns?
Because you are using the log for the ag. But yes, you are correct — it makes more sense to use log returns which are additive. Multiplying simple returns is problematic in creating an equity curve when you have neutral positions.
I feel kind of uneasy that all my efforts and sleepless nights were for nothing. But at least I know what the best approaches are. I agree, sometimes simpler can be better. Your email address will not be published. ROC can also be used: Test entering a trade only when prediction exceeds a threshold magnitude simp. Test entering a trade only when prediction exceeds a threshold magnitude. Box - Ljung test. Comments 16 Trackbacks 1 Pingbacks 4 Matt haines 4th February , 6: Kris Longmore 4th February , Beliavsky 5th February , 5: Thanks for your post.
Could you say what the Sharpe ratios of the tested strategies were? Kris Longmore 8th February , Kris Longmore 2nd August , Infinity 30th August , 1: Thanks for the tutorial. What line s of code would we need to account for transaction costs? Kris Longmore 31st August , 1: Kris Longmore 9th October , Ron 18th February , 9: After posting my question I saw the download link for the file.
Regis 22nd February , 1: Hello Regarding your code how did you handle negative values for the returns? Kris Longmore 5th April , 7: Regis 22nd February , 2: Kal Mal 27th June , 1: Kris Longmore 3rd July , 7: URL 1st June , Leave a Reply Cancel reply Your email address will not be published.
Open link in a new tab. No search term specified. Search or use up and down arrow keys to select an item.More...