Emerging as Low Vol
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
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 |
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) |
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.