When Russell 2000 is Low Vol

[This article was first published on Timely Portfolio, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Continuing in my exploration of the Russell 2000 (Russell 2000 Softail Fat Boy), I thought I would try to approach the topic with a low volatility paradox mindset.  Since 2005, beta of the Russell 2000 compared to the S&P 500 has exceeded 1.2 with a max of 1.6 for almost every rolling 1 year period.  This suggests that the Russell 2000 is anything but low vol.

From TimelyPortfolio

However, we can take a more simplistic view by comparing the rolling 50-day standard deviation of the Russell 2000 with the S&P 500.  Russell 2000 on an absolute and relative basis does very well when rolling 50-day standard deviation of the Russell 2000 minus the same standard deviation on the S&P 500 exceeds –1.25%, so the Russell 2000 performs best when volatility approaches the S&P 500.  In low relative volatility environments, it seems we should own the high beta Russell 2000.  You will see the largest down moves all occur in the non-shaded time periods.

From TimelyPortfolio

I intentionally wanted this post to be simple, so I hid a lot of the preliminary work and extra links.  Far more went into this than appears above.

R code from GIST:

require(quantmod)
require(PerformanceAnalytics)
getSymbols("^RUT",from = "1900-01-01")
getSymbols("^GSPC",from = "1900-01-01")
#get 1 day change for the Russell 2000 and S&P 500
roc <- na.omit(merge(ROC(RUT[,4],type="discrete",n=1),ROC(GSPC[,4],type="discrete",n=1)))
stdev <- rollapplyr(roc,FUN=sd,width=50)
#get relative strength of Russell 2000 versus S&P 500
rs <- RUT[,4]/GSPC[,4]
#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,RUT[,4]))
#create a PerformanceAnalytics rolling summary of Russell 2000 versus the S&P 500
charts.RollingRegression(roc[,1],roc[,2],width=250,main="")
title(main="Russell 2000 compared to the S&P 500 (Rolling 1 Year)",outer=TRUE, line=-1.5, adj=0.05)
#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(RUT[,4], #plot closing price of Russell 2000
bty="n", #no box; will fill in later with abline
las=1, #no rotation on y axis labels
xlab = NA,
ylab = NA)
xblocks(index(RUT[,4]), as.vector(stdev[,1]-stdev[,2]/rs > - 0.0125),col = rgb[3])
#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="Russell 2000 (source: Yahoo! Finance)",outer=TRUE, line=-2, adj=0.05)
mtext("blocks denote periods where Russell 2000 50 day sd low compared to S&P 500 sd",side=3,adj=0.05,cex=0.7,font=3, line=-1.5)

To leave a comment for the author, please follow the link and comment on their blog: Timely Portfolio.

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.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)