Tuesday, October 2, 2012

Emerging as Low Vol

Extending the series begun with When Russell 2000 is Low Vol, I thought I should take a look at Emerging Market stocks during periods of low relative volatility to the S&P 500.  So you can replicate even without access to expensive data, let’s use the Vanguard Emerging Market Fund (VEIEX) and the Vanguard S&P 500 Fund (VFINX) as proxies.  In the 12 month rolling regression, we see the same fairly steadily increasing beta and correlation of the Emerging Market stocks to the S&P 500 that we saw in the Russell 2000.

From TimelyPortfolio

If I progress further on this research, I will have to work on an adaptive definition of “low vol”, but for the purpose of this post, I defined “low vol” as

Emerging 50 day std. dev – S&P 500 50 day sd > –0.075

For the Russell 2000, we used a more strict 0.0125.  Although the numeric definition is different, the chart shows a very similar profile.

From TimelyPortfolio

R code from GIST:

require(quantmod)
require(PerformanceAnalytics)
getSymbols("VEIEX",from = "1900-01-01") #use VEIEX Vanguard Emerging as proxy for emerging mkt stocks
getSymbols("VFINX",from = "1900-01-01") #use VFINX Vanguard SP500 as proxy for SP500
#get 1 day change for the emerging and sp500
roc <- na.omit(merge(ROC(VEIEX[,6],type="discrete",n=1),ROC(VFINX[,6],type="discrete",n=1)))
stdev <- rollapplyr(roc,FUN=sd,width=50)
#get relative strength of emerging versus S&P 500
rs <- VEIEX[,6]/VFINX[,6]
#do some trial graphs to see the interaction
plot.zoo(merge(stdev[,1]-stdev[,2],rs))
plot.zoo(merge(stdev[,1]-stdev[,2]/rs,rs))
plot.zoo(merge(stdev[,1]/stdev[,2],rs,VEIEX[,6]))
#create a PerformanceAnalytics rolling summary of emerging versus the S&P 500
charts.RollingRegression(roc[,1],roc[,2],width=250,main="")
title(main="Vanguard Emerging compared to the Vanguard S&P 500 (Rolling 1 Year)",outer=TRUE, line=-1.5, adj=0.05, cex.main=0.85)
#use colors provided in xblocks documentation
rgb <- hcl(c(0, 0, 260), c = c(100, 0, 100), l = c(50, 90, 50), alpha = 0.2)
plot.zoo(VEIEX[,6], #plot closing price of emerging
bty="n", #no box; will fill in later with abline
las=1, #no rotation on y axis labels
xlab = NA,
ylab = NA)
xblocks(index(VEIEX[,6]), as.vector(stdev[,1]-stdev[,2]/rs > - 0.075),col = rgb[3]) #admittedly the -0.075 is ex-post
#connect the axes
abline(h=par("usr")[3]) #extend y axis
abline(v=par("usr")[1]) #extend x axis
abline(h=pretty(par("yaxp")),lty=1,lwd=2,col="white") #try something new for gridlines
title(main="Vanguard Emerging VEIEX (source: Yahoo! Finance)",outer=TRUE, line=-2, adj=0.05)
mtext("blocks denote periods where Emerging 50 day sd low compared to S&P 500 sd",side=3,adj=0.05,cex=0.7,font=3, line=-1.5)

1 comment:

  1. For adaptive definition of low vol, it might be interesting to see if one can use SD itself (like Bollinger bands) as criteria like delta between pair SDs within 0.5 BB. I plan to investigate that.

    Your graphs are pretty. I picked 2 new pointers on R Graphics - abline and xblocks. Thanks.

    ReplyDelete