Multivariate volatility and DCC-GARCH

Today let's learn how to measure the risk of holding two stock indices together when the correlation between them does not stay fixed.

Say you hold half of your money in the DAX, the German stock index, and half in the FTSE 100, the UK index. You want to know how risky one day of holding this 50/50 position is.

The data is EuStockMarkets, which comes with R. It has the daily closing prices of four European indices over 1,860 business days from 1991 to 1998: the DAX and the FTSE, plus the Swiss SMI and the French CAC. We work with daily returns, the change in the log price times 100, so a return of 1 means the index moved about 1 percent. That leaves 1,859 days of returns.

The grid below shows the correlation between the returns of each pair of indices, computed over all 1,859 days.

Each cell is one number for the whole period, and the DAX and FTSE cell reads 0.64. Is one number like that enough to describe the risk of holding both?

Why portfolio risk depends on the correlation

Risk here means the standard deviation of the portfolio's daily return, and that depends on more than how risky each index is on its own.

A 50/50 portfolio earns 0.5 times the DAX return plus 0.5 times the FTSE return each day. The formula below gives the variance of that sum for weights \(w_1\) and \(w_2\), standard deviations \(\sigma_1\) and \(\sigma_2\), and correlation \(\rho\).

\[ \sigma_p^2 = w_1^2\sigma_1^2 + w_2^2\sigma_2^2 + 2\,w_1 w_2\,\rho\,\sigma_1\sigma_2 \]

The first two terms are each index's own variance, scaled by its weight squared. The third is the cross term, and it is the only one that contains \(\rho\). If the two indices move together, the cross term is large and the portfolio is riskier. If they move in opposite directions, it is negative and cancels part of the other two.

First we compute the returns, the standard deviation of each index and their correlation.

RInteractive R
# Load the daily returns of the four indices and measure the DAX and FTSE standard deviations and correlation r <- diff(log(EuStockMarkets)) * 100 x <- r[, c("DAX", "FTSE")] s1 <- sd(x[, "DAX"]) s2 <- sd(x[, "FTSE"]) rho_full <- cor(x[, "DAX"], x[, "FTSE"]) round(c(DAX = s1, FTSE = s2, correlation = rho_full), 4) #> DAX FTSE correlation #> 1.0301 0.7958 0.6395

  

diff(log(EuStockMarkets)) takes the change in the log price from one day to the next, and * 100 puts it in percent. The DAX has a daily standard deviation of 1.0301 percent and the FTSE 0.7958. Their correlation is 0.6395, the same 0.64 as on the grid, to four decimals.

The block below splits the 50/50 portfolio's variance into its three terms at that correlation.

RInteractive R
# Split the 50/50 portfolio variance into its three terms at the full-sample correlation w <- c(0.5, 0.5) term_dax <- w[1]^2 * s1^2 term_ftse <- w[2]^2 * s2^2 term_cross <- 2 * w[1] * w[2] * rho_full * s1 * s2 port_var <- term_dax + term_ftse + term_cross terms <- c(term_dax = term_dax, term_ftse = term_ftse, term_cross = term_cross, variance = port_var, sd = sqrt(port_var)) round(terms, 4) #> term_dax term_ftse term_cross variance sd #> 0.2653 0.1583 0.2621 0.6857 0.8281

  

The DAX term is 0.2653, the FTSE term 0.1583 and the cross term 0.2621. They add up to a variance of 0.6857, so the portfolio's standard deviation is 0.8281 percent.

The block below repeats the calculation at four values of the correlation and keeps everything else fixed.

RInteractive R
# Compute the portfolio standard deviation at four values of the correlation rho_grid <- c(-0.5, 0, rho_full, 1) grid_var <- w[1]^2 * s1^2 + w[2]^2 * s2^2 + 2 * w[1] * w[2] * rho_grid * s1 * s2 data.frame(rho = round(rho_grid, 4), portfolio_sd = round(sqrt(grid_var), 4)) #> rho portfolio_sd #> 1 -0.5000 0.4676 #> 2 0.0000 0.6508 #> 3 0.6395 0.8281 #> 4 1.0000 0.9129 # The weighted sum of the two standard deviations, the portfolio sd when the correlation is 1 round(sum(w * c(s1, s2)), 4) #> [1] 0.9129

  

At a correlation of 1 the portfolio's standard deviation is 0.9129, which equals the weighted sum of the two standard deviations. That is the risk with no diversification at all. At the actual correlation of 0.6395 it is 0.8281, so diversification takes 0.0848 off the risk.

Key Insight
The portfolio's risk moves with the correlation, from 0.4676 at -0.5 to 0.9129 at 1. So a wrong correlation gives a wrong risk number.

That makes the correlation an input worth checking. Does it really stay at 0.6395 from one day to the next?