We apply a (sequential) multivariate stochastic volatility model to five FX pairs. Using non-optimized settings our model beats a benchmark portfolio in terms of total return, but fails when you account for risk [note: we have edited the blog post to show results using mean-variance optimization rather than minimum-variance optimization].
Following an equity-centric start to our blog’s life with random portfolios (part 1 and part 2) and a monthly factor model, we now move on to foreign exchange (FX). We will investigate how a (sequential) multivariate stochastic volatility model can be used to potentially improve a FX portfolio by modelling not only the variances of the FX pairs but also the covariances. These can then for example be used to find mean-variance or minimum-variance portfolios. In this blog post we stick to a simple mean-variance approach, but we aim to add complexity later in an attempt to improve on the results.
The generalized autoregressive conditional heteroscedasticity (GARCH) and its many evolutions (EGARCH, NGARCH, GARCH-M, multivariate GARCH etc.) remains a staple of time series modelling, but we will dive into the stochastic volatility camp and more specifically we will look at a sequential time-varying vector autoregressive model with stochastic volatility, following closely the approach in Triantafyllopoulos (2008). This allows us to caste the model in state-space form providing us with sequential covariance predictions rather than having to re-estimate in batch constantly using a rolling or expanding window of observations. Furthermore, this model provides both the mean and covariance predictions and it is fast (though this is not important in this work as we use weekly data).
We will investigate the performance of a portfolio of five FX pairs (EURAUD, EURCAD, EURGBP, EURJPY, and EURUSD) on a weekly basis during the eleven-year period 2005-2015 and to keep things simple in the following we assume d = 0, beta = 0.99, and delta = 0.99 (see Triantafyllopoulos for details). This implies that we are estimating a multivariate stochastic volatility model with time-varying intercepts, but without any autoregressive terms (since d = 0), where the parameters are updated only gradually as the discount factors beta and delta are both close to one. The fact that beta is close to one implies that we are modelling the log-returns as normally distributed as the degrees of freedom is 99.
Every trading week the model is updated based on that week’s errors and a set of predictions for means and covariance is given. Based on these predictions we can update the weights of our mean-variance portfolio where we require an annualized return of 10% (similar for the benchmark). The data set used for portfolio evaluation is a (575 x 5) matrix of FX close prices (carry-adjusted) for the five FX pairs. As benchmark we run mean-variance optimization on historical data using a lookback window of 52 weeks. We take this approach to allow a comparison between the model’s ability to model portfolio volatility and the benchmark.
A closer look at EURUSD
Before we get to the performance evaluation we will take a look at the predictions of one of the five FX pairs, EURUSD. Despite the discount factor delta being close to one, the estimated mean return shows some quite large deviations from zero when momentum is high in either direction (see the chart below). During the autumn of 2008 EURUSD plunged from roughly 1.60 to 1.25 and then again in mid-2014 from close to 1.40 to less than 1.05. The annualized expected return (i.e. the annualized mean prediction for EURUSD) declined to as low as -10.8% to reflect this weakness.
Moving on to the expected volatility, we unsurprisingly see a large spike in late 2008 and well into the following year. Annualized expected volatility is above 10% in 416 of 574 weeks and it spends 284 consecutive weeks above this level starting in October, 2008. The highest predicted volatility of 13.3% is reached in May, 2009.
Our portfolio of five FX pairs returns 79% during the period from 2005 to 2015 compared to 55.2% for the benchmark portfolio while our portfolio has 322 winning weeks (56.1%) compared with the benchmark’s 321 winning weeks (55.9%). However, portfolio volatility is so much higher than benchmark volatility that the risk-adjusted return is lower with annualized Sharpe Ratios (assuming a zero risk-free rate) of 0.49 and 0.68, respectively.
In other words, the model delivers an excess return of 23.8% over eleven years, but this is a result of higher leverage and higher volatility (the annualized Information Ratio is 0.20). As a result, the largest drawdown – which unsurprisingly takes place in the midst of the global financial crisis – is 20.2% for our portfolio compared with 10.5% for the benchmark.
Turning to the expected annualized portfolio volatility it generally agrees with volatility as measured on a rolling 52-week basis reasonably well except during the financial crisis when it undershoots by a wide margin. While actual volatility peaks at 23.3% predicted volatility only reaches 19.6%. The median volatilities are 8.5% and 7.9%, respectively, and predicted volatility is above actual volatility just 37.1% of the time (194 out of 574 – 51 = 523 weeks).
While the model does produce a higher annualized return (5.4% vs. 4.1%) the annualized volality of our model portfolio during the eleven years 2005-2015 is 8.8% compared with the benchmark portfolio’s 4.5%. Furthermore, portfolio volatility is above 10% in 130 weeks compared with just three for the benchmark.
We have demonstrated a method to both estimate a multivariate stochastic volatility model and construct a mean-variance optimized portfolio sequentially rather than in batch mode. However, our non-optimized model fails to beat the benchmark on a risk-adjusted basis as leverage and volatility are both much higher in our model portfolio.
In part 2 we will investigate whether we can improve the results, in particular the model’s ability to accurately predict the covariance matrix of the five FX pairs, by tweaking the settings. One remedy could be to make changes to the discount factors (beta and delta) while allowing autoregressive terms could be another. We will explore this in the next blog post, so stay tuned.
Note: the R code will be available in part 2.