Monitoring Sources of Bond Returns with ML/BAC Corporate OAS and CPI

June 28, 2011
By

(This article was first published on Timely Portfolio, and kindly contributed to R-bloggers)

In response to the nice comment requesting an update to Monitoring Sources of Bond Return and also longer history, I thought I would update the original and then rerun with CPI to give a longer time series.  For even longer history back to 1919, see Historical Sources of Bond Returns with Shiller Data 1919-2011.  Below are the results, and real returns are negative again.

How in the world can this quote in Institutional Investor Endowments Are Shifting To Fixed Income be valid (fixed income is not defensive)?

“With the problems of equity markets volatility and unpredictability, the case for increasing the allocation to fixed income is greater than ever, notes Michael Purves, chief market strategist and head of global derivatives research at BGC Financial in New York. But if fixed income assets were once seen as low risk, low reward instruments, they now are seen as assets with the potential to deliver real returns, says Purves.

Also, the availability of fixed assets in the emerging markets offers investors safety as well as growth, Purves notes.  Not only has the number of opportunities increased, they also offer greater rewards relative to similar products in the developed markets. “The move to fixed income is not a defensive strategy any more,” says New York’s Andrew Lawrence. “In today’s market conditions they offer relatively outsized returns.”

Expecting real returns here is a bet on prolonged deflation, and if deflation is so certain, go short the instruments that most suffer from deflation.  Please do not treat this as investment advice; I just cannot restrain my opinion that bonds guarantee failure in most cases with 3-4% 10 year total returns.  If your long-term target growth is 3-4%, then enjoy your bonds.

I will consider myself a complete failure as a money manager if I can only return 3-4% over the next 10-30 years.

From TimelyPortfolio
From TimelyPortfolio

 

R code (click to download):
#just an update as requested to
#http://timelyportfolio.blogspot.com/2011/04/monitoring-sources-of-bond-return.html?showComment=1309270268204#c6728361948693873056   require(quantmod)
require(PerformanceAnalytics)
require(reshape2)
require(ggplot2)   getSymbols("WGS10YR",src="FRED") #load 10yTreasury
getSymbols("WFII10",src="FRED") #load 10yTIP for real return
getSymbols("BAMLC0A0CM",src="FRED") #load Corporate for credit
getSymbols("CPIAUCSL",src="FRED") #load Corporate for credit    bondReturnSources<-na.omit(merge(WGS10YR-WFII10,WFII10,to.weekly(BAMLC0A0CM)[,4])["2003::"])
colnames(bondReturnSources)<-c("10yTreasury","10yTIPReal","Credit")
bondReturnSourcesToGraph<-data.frame(cbind(as.Date(index(bondReturnSources)),coredata(bondReturnSources)))
colnames(bondReturnSourcesToGraph)<-c("Date","InflationBreakEven","10yTIPReal","Credit")
bondReturnSourcesToGraph<-melt(bondReturnSourcesToGraph,id.vars=1)
colnames(bondReturnSourcesToGraph)<-c("Date","ReturnSource","Yield")
rownames(bondReturnSourcesToGraph)<-c(1:NROW(bondReturnSourcesToGraph))
ggplot(bondReturnSourcesToGraph, stat="identity",
aes(x=Date,y=Yield,fill=ReturnSource,group=ReturnSource)) +
geom_area() +scale_x_date(format = "%Y") +
opts(title = "Sources of Bond Return")     #let's do it all over again with CPI instead of TIP breakeven
getSymbols("GS10",src="FRED") #load 10yTreasury
getSymbols("BAMLC0A0CM",src="FRED") #load Corporate for credit
getSymbols("CPIAUCSL",src="FRED") #load CPI
BAMLC0A0CM <- to.monthly(BAMLC0A0CM)[,4]
index(BAMLC0A0CM) <- as.Date(index(BAMLC0A0CM))   bondReturnSources<-na.omit(merge(GS10/100-ROC(CPIAUCSL,n=12,type="discrete"),
ROC(CPIAUCSL,n=12,type="discrete"),BAMLC0A0CM/100))
colnames(bondReturnSources)<-c("10yTreasury","Inflation","Credit")
bondReturnSourcesToGraph<-data.frame(cbind(as.Date(index(bondReturnSources)),coredata(bondReturnSources)))
colnames(bondReturnSourcesToGraph)<-c("Date","RealReturn","Inflation","Credit")
bondReturnSourcesToGraph<-melt(bondReturnSourcesToGraph,id.vars=1)
colnames(bondReturnSourcesToGraph)<-c("Date","ReturnSource","Yield")
rownames(bondReturnSourcesToGraph)<-c(1:NROW(bondReturnSourcesToGraph))
#do line instead to handle the negative inflation and negative real returns
ggplot(bondReturnSourcesToGraph, stat="identity",
aes(x=Date,y=Yield)) + geom_line(aes(colour=ReturnSource)) +
scale_x_date(format = "%Y") + opts(title = "Sources of Bond Return")

Created by Pretty R at inside-R.org

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

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



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Tags: , , ,

Comments are closed.