library(“tseries”) library(“PortfolioAnalytics”) library(“quantmod”) library(“Quandl”) library(“DEoptim”)
#data reading print(getwd()) data = read.csv(“Investment-Portfolio-Analysis-Data.txt”, header=T) View(data) data = xts(data[,2:30], order.by = as.Date(data[,1]))
##1. asset classes ##1.1 Cash and Cash equivalents #US total money market #getSymbols(“SHV”, src=“yahoo”, from=“2007-01-01”, to=“2022-01-01”) #cash = SHV[,6]
cash = data[,1] mcash = monthlyReturn(cash, type=‘arithmetic’) View(mcash) colnames(mcash) = “mcash” table.AnnualizedReturns(mcash) charts.PerformanceSummary(mcash)
cpi <- data[,24] mcpi <- monthlyReturn(cpi) colnames(mcpi) <- “mcpi” mmom <- data[,19]/100 msprem <- data[,20]/100 msize <- data[,21]/100 mstyle <- data[,22]/100 mrisk <- data[,23]/100 mlsprem <- mlstocks-mrisk
mregc <- lm(mlsprem~msprem) summary(mregc)
mcapm <- mean(mrisk)+mbcapm*(mean(msprem)) mcapm
mresvarc <- summary(mregc)$sigma mresvarc
mfactf <- cbind(msprem,msize,mstyle,mmom) mregf <- lm(mlsprem~mfactf) summary(mregf)
msprembf <- summary(mregf)\(coefficients[2] msizeb <- summary(mregf)\)coefficients[3] mstyleb <- summary(mregf)\(coefficients[4] mmomb <- summary(mregf)\)coefficients[5] mbffc <- cbind(msprembf,msizeb,mstyleb,mmomb) mbffc
maffc <- summary(mregf)$coefficients[1] maffc
mffc <- mean(mrisk)+maffc+msprembfmean(msprem)+msizebmean(msize)+mstylebmean(mstyle)+mmombmean(mmom) mffc
#Arbitrage Pricing Theory Model APT
mfacta <- cbind(msprem,mcpi) mrega <- lm(mlsprem~mfacta) summary(mrega)
mspremba <- mrega\(coefficients[2] mcpib <- mrega\)coefficients[3] mbapt <- cbind(mspremba,mcpib) mbapt
#Arbitrage Pricing Theory Expected Returns mapt <- mean(mrisk)+maapt+msprembamean(msprem)+mcpibmean(mcpi) names(mapt) <- “mapt” mapt
mresvara <- summary(mrega)$sigma mresvara
retcomp3 <- cbind(mmean,mmed,mgmean,mcapm,mffc,mapt) retcomp3
eretcomp <- cbind(macapm,maffc,maapt)
mtreynor <- TreynorRatio(Ra=mlstocks,Rb=mstocks,Rf=mean(mcash)) mtreynor
mport <- cbind(mbonds,mstocks,mibonds,mistocks)
mnaivew <- as.numeric(t(c(0.25,0.25,0.25,0.25))) names(mnaivew) <- c(“mbonds”,“mstocks”,“mibonds”,“mistocks”) mnaive <- Return.portfolio(R=mport,weights=mnaivew,geometric=F,rebalance_on=“months”) colnames(mnaive) <- “mnaive”
mrochew <- as.numeric(t(c(0.24,0.18,0.33,0.25))) names(mrochew) <- c(“mbonds”,“mstocks”,“mibonds”,“mistocks”) mroche <- Return.portfolio(R=mport,weights=mrochew,geometric=F,rebalance_on=“months”) colnames(mroche) <- “mroche”
mboglew <- as.numeric(t(c(0.40,0.60,0.00,0.00))) names(mboglew) <- c(“mbonds”,“mstocks”,“mibonds”,“mistocks”) mbogle <- Return.portfolio(R=mport,weights=mboglew,geometric=F,rebalance_on=“months”) colnames(mbogle) <- “mbogle”
table.AnnualizedReturns(benchcomp) charts.PerformanceSummary(benchcomp)
mport1c <- portfolio.spec(assets = colnames(mport))
mport1c <- add.constraint(mport1c,type=“weight_sum”,min_sum=0.99,max_sum=1.01) mport1c <- add.constraint(mport1c,type=“long_only”)
mport1c <- add.objective(mport1c,type=“return”,name=“mean”)
mportopt1 <- optimize.portfolio(R=mport[“::2014-12-31”],portfolio=mport1c,optimize_method=“DEoptim”, ) chart.Weights(mportopt1)
mport2c <- portfolio.spec(assets=colnames(mport))
mport2c <- add.constraint(mport2c,type=“weight_sum”,min_sum=0.99,max_sum=1.01) mport2c <- add.constraint(mport2c,type=“long_only”)
mport2c <- add.objective(mport2c,type=“risk”,name=“StdDev”)
mportopt2 <- optimize.portfolio(R=mport[“::2014-12-31”],portfolio=mport2c,optimize_method=“DEoptim”,search_size=20000,trace=T) chart.Weights(mportopt2)
mport3c <- portfolio.spec(assets=colnames(mport))
mport3c <- add.constraint(mport3c,type=“weight_sum”,min_sum=0.99,max_sum=1.01) mport3c <- add.constraint(mport3c,type=“long_only”)
mport3c <- add.objective(mport3c,type=“return”,name=“mean”) mport3c <- add.objective(mport3c,type=“risk”,name=“StdDev”)
mportopt3 <- optimize.portfolio(R=mport[“::2014-12-31”],portfolio=mport3c,optimize_method=“DEoptim”,search_size=20000,trace=T) chart.Weights(mportopt3) chart.EfficientFrontier(mportopt3,match.col=“StdDev”)
mport4c <- portfolio.spec(assets=colnames(mport))
mport4c <- add.constraint(mport4c,type=“weight_sum”,min_sum=0.99,max_sum=1.01) mport4c <- add.constraint(mport4c,type=“long_only”)
mport4c <- add.objective(mport4c,type=“return”,name=“mean”) mport4c <- add.objective(mport4c,type=“risk”,name=“VaR”,arguments=list(p = 0.99,method=“modified”))
mportopt4 <- optimize.portfolio(R=mport[“::2014-12-31”],portfolio=mport4c,optimize_method=“DEoptim”,search_size=20000,trace=T) chart.Weights(mportopt4)
mportcomp = cbind(mnaive[“2015-01-31::”],mport1,mport2,mport3,mport4) table.AnnualizedReturns(mportcomp) charts.PerformanceSummary(mportcomp)