rm(list=ls(all=TRUE)) # packages used listofpackages <- c("dygraphs","PortfolioAnalytics", "zoo","tseries","ROI","nloptr","ROI.plugin.glpk","ROI.plugin.quadprog","DEoptim") for (j in listofpackages){ if(sum(installed.packages()[, 1] == j) == 0) { install.packages(j) } library(j, character.only = T) } ################################################### ### code chunk number 2: loading data ################################################### ffdata <- read.table("data/FF_Data_2016_11.csv", sep = ";", header = T, stringsAsFactors = F) head(ffdata) str(ffdata) names(ffdata) ffdata$date <- ffdata$X.1 %/% 100 + (ffdata$X.1 %% 100 - 1) /12 ffdata$X<- NULL ffdata$X.1<- NULL ## ------------------------------------------------------------------------ # since all the data are expressed in percentage points, we want to premultiply all of them by 0.01 ffdata[, 1:(ncol(ffdata)-1)] <- ffdata[, 1:(ncol(ffdata)-1)] * 0.01 ffdata$r_mkt <- ffdata$exret_mkt + ffdata$RF port_data<- subset(ffdata,date >1927 & date < 2016,select=c(RF,PR11,PR12,PR13,PR14,PR15,PR21,PR22,PR23,PR24,PR25,PR31,PR32,PR33,PR34,PR35,PR41,PR42,PR43,PR44,PR45,PR51,PR52,PR53,PR54,PR55)) #generate excess returns. Can you do this more efficiently via a loop ? port_data$ER_PR11=port_data$PR11-port_data$RF port_data$ER_PR12=port_data$PR12-port_data$RF port_data$ER_PR13=port_data$PR13-port_data$RF port_data$ER_PR14=port_data$PR14-port_data$RF port_data$ER_PR15=port_data$PR15-port_data$RF port_data$ER_PR21=port_data$PR21-port_data$RF port_data$ER_PR22=port_data$PR22-port_data$RF port_data$ER_PR23=port_data$PR23-port_data$RF port_data$ER_PR24=port_data$PR24-port_data$RF port_data$ER_PR25=port_data$PR25-port_data$RF port_data$ER_PR31=port_data$PR31-port_data$RF port_data$ER_PR32=port_data$PR32-port_data$RF port_data$ER_PR33=port_data$PR33-port_data$RF port_data$ER_PR34=port_data$PR34-port_data$RF port_data$ER_PR35=port_data$PR35-port_data$RF port_data$ER_PR41=port_data$PR41-port_data$RF port_data$ER_PR42=port_data$PR42-port_data$RF port_data$ER_PR43=port_data$PR43-port_data$RF port_data$ER_PR44=port_data$PR44-port_data$RF port_data$ER_PR45=port_data$PR45-port_data$RF port_data$ER_PR51=port_data$PR51-port_data$RF port_data$ER_PR52=port_data$PR52-port_data$RF port_data$ER_PR53=port_data$PR53-port_data$RF port_data$ER_PR54=port_data$PR54-port_data$RF port_data$ER_PR55=port_data$PR55-port_data$RF #dataframe data<- subset(port_data,select=c(ER_PR11,ER_PR12,ER_PR13,ER_PR14,ER_PR15,ER_PR21,ER_PR22,ER_PR23,ER_PR24,ER_PR25,ER_PR31,ER_PR32,ER_PR33,ER_PR34,ER_PR35,ER_PR41,ER_PR42,ER_PR43,ER_PR44,ER_PR45,ER_PR51,ER_PR52,ER_PR53,ER_PR54,ER_PR55)) funds <- colnames(data) #dimnames(data)[[2]] #ts tsdata <- ts(data, start = c(1927, 1), frequency = 12, names = funds) s1 <- window(tsdata[, "ER_PR11"], start = c(1962, 1), end = c(1992, 12)) dygraph(s1, ylab = "ER_PR11", main = "monthly returns") #xts data data01 <- as.xts(tsdata) fund.names <- colnames(data01) ################################################### ### code chunk number 3: ################################################### # Specify a portfolio object by passing a character vector for the # assets argument. init.portf.maxsharpe <- portfolio.spec(assets=fund.names) print.default(init.portf.maxsharpe) init.portf.maxsharpe <- add.constraint(portfolio=init.portf.maxsharpe, type="full_investment") init.portf.maxsharpe <- add.constraint(portfolio=init.portf.maxsharpe, type="long_only") init.portf.maxsharpe <- add.objective(portfolio=init.portf.maxsharpe, type="return", name="mean") init.portf.maxsharpe <- add.objective(portfolio=init.portf.maxsharpe, type="risk", name="StdDev") maxSR.lo.ROI <- optimize.portfolio(R=data01, portfolio=init.portf.maxsharpe, optimize_method="ROI", maxSR=TRUE, trace=TRUE) print(maxSR.lo.ROI)