**Systematic Investor » R**, and kindly contributed to R-bloggers)

Today, I want to highlight the Financial Turbulence Index idea introduced by Mark Kritzman and Yuanzhen Li in the Skulls, Financial Turbulence, and Risk Management paper. Timely Portfolio did a great series of posts about Financial Turbulence: Part 1, Part 2, Part 3.

As example, I will compute Financial Turbulence for the equal weight index of G10 Currencies. First, I created a helper function get.G10() function in data.r at github to download historical data for G10 Currencies from FRED.

get.G10 <- function() { # FRED acronyms for daily FX rates map = ' FX FX.NAME DEXUSAL U.S./Australia DEXUSUK U.S./U.K. DEXCAUS Canada/U.S. DEXNOUS Norway/U.S. DEXUSEU U.S./Euro DEXJPUS Japan/U.S. DEXUSNZ U.S./NewZealand DEXSDUS Sweden/U.S. DEXSZUS Switzerland/U.S. ' map = matrix(scan(text = map, what='', quiet=T), nc=2, byrow=T) colnames(map) = map[1,] map = data.frame(map[-1,], stringsAsFactors=F) # convert all quotes to be vs U.S. convert.index = grep('DEXUS',map$FX, value=T) #***************************************************************** # Load historical data #****************************************************************** load.packages('quantmod') # load fx from fred data.fx <- new.env() getSymbols(map$FX, src = 'FRED', from = '1970-01-01', env = data.fx, auto.assign = T) for(i in convert.index) data.fx[[i]] = 1 / data.fx[[i]] # extract fx where all currencies are available bt.prep(data.fx, align='remove.na') fx = bt.apply(data.fx, '[') return(fx) }

Next, let’s compute Financial Turbulence Index for G10 Currencies.

############################################################################### # Load Systematic Investor Toolbox (SIT) # http://systematicinvestor.wordpress.com/systematic-investor-toolbox/ ############################################################################### setInternet2(TRUE) con = gzcon(url('http://www.systematicportfolio.com/sit.gz', 'rb')) source(con) close(con) #***************************************************************** # Load historical data #****************************************************************** load.packages('quantmod') fx = get.G10() nperiods = nrow(fx) #***************************************************************** # Rolling estimate of the Financial Turbulence for G10 Currencies #****************************************************************** turbulence = fx[,1] * NA ret = coredata(fx / mlag(fx) - 1) look.back = 252 for( i in (look.back+1) : nperiods ) { temp = ret[(i - look.back + 1):(i-1), ] # measures turbulence for the current observation turbulence[i] = mahalanobis(ret[i,], colMeans(temp), cov(temp)) if( i %% 200 == 0) cat(i, 'out of', nperiods, '\n') } #***************************************************************** # Plot 30 day average of the Financial Turbulence for G10 Currencies #****************************************************************** plota(EMA( turbulence, 30), type='l', main='30 day average of the Financial Turbulence for G10 Currencies')

There is a big spike in the index during 2008-2009 period. If you had monitored the Financial Turbulence Index and reduced or hedged your positions during these times, you would be able to reduce your draw-downs and sleep better at night.

To view the complete source code for this example, please have a look at the bt.financial.turbulence.test() function in bt.test.r at github.

**leave a comment**for the author, please follow the link and comment on their blog:

**Systematic Investor » R**.

R-bloggers.com offers

**daily e-mail updates**about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...