Path: blob/master/sandbox/paper_analysis/R_Allocation/main_riskbudgets.R
1433 views
1# ! Set your working directory (folder containing the subfolders R_allocation, R_interpretation, data, weights, etc)23setwd("c:/Documents and Settings/Administrator/Desktop/risk budget programs")4#setwd("c:/Documents and Settings/n06054/Desktop/risk budget programs")56# Options:78BIP = FALSE9CC = TRUE1011# Length estimation period12estyears = 513mincriterion = percriskcontribcriterion = "StdDev" ; # "StdDev" "GES" "mES"1415# Equal risk portfolio16cAssets = 4;17p = priskbudget = 0.95;18192021# Define your portfolio allocation strategy22# names = c( "EqualRisk" , "EqualWeight" , "MinRisk" , "MinRiskConc" ,23# "MinRisk_PositionLimit" , "MinRisk_RiskLimit" , "MinRisk_ReturnTarget",24# "MinRiskConc_PositionLimit" , "MinRiskConc_RiskLimit" , "MinRiskConc_ReturnTarget")25strategy = "EqualWeight" # "MinRiskConc_PositionLimit" , "MinRiskConc_RiskLimit"2627# Load programs2829source("R_Allocation/Risk_budget_functions.R");30library(zoo); library(xts); library(fGarch); library("PerformanceAnalytics");3132# Load the data3334nominalreturns = T;35newdata = T;36firstyear = 1976 ; firstquarter = 1; lastyear = 2010; lastquarter = 2;3738if(nominalreturns){39load(file="data/monthlyR.RData")40if(!BIP){41load( file="data/mulist.Rdata") ; load( file="data/sigmalist.Rdata") ;42if(!CC){ load( file="data/M3list.Rdata") ; load( file="data/M4list.Rdata") }else{43load( file="data/M3list_CC.Rdata") ; load( file="data/M4list_CC.Rdata")44}45}else{46load( file="data/mulist_BIP.Rdata") ; load( file="data/sigmalist_BIP.Rdata") ;47if(!CC){ load( file="data/M3list_BIP.Rdata") ; load( file="data/M4list_BIP.Rdata") }else{48load( file="data/M3list_BIP_CC.Rdata") ; load( file="data/M4list_BIP_CC.Rdata")49}50}51}else{52load(file="data/monthlyR_real.RData")53if(!BIP){54load( file="data/mulist_real.Rdata") ; load( file="data/sigmalist_real.Rdata") ;55if(!CC){ load( file="data/M3list_real.Rdata") ; load( file="data/M4list_real.Rdata") }else{56load( file="data/M3list_real_CC.Rdata") ; load( file="data/M4list_real_CC.Rdata")57}58}else{59load( file="data/mulist_real_BIP.Rdata") ; load( file="data/sigmalist_real_BIP.Rdata") ;60if(!CC){ load( file="data/M3list_real_BIP.Rdata") ; load( file="data/M4list_real_BIP.Rdata") }else{61load( file="data/M3list_real_BIP_CC.Rdata") ; load( file="data/M4list_real_BIP_CC.Rdata")62}63}64}6566N = ncol(monthlyR)6768# Define rebalancing periods:6970ep = endpoints(monthlyR,on='quarters')71# select those for estimation period72ep.start = ep[1:(length(ep)-estyears*4)]+173from = time(monthlyR)[ep.start]74from = seq( as.Date(paste(firstyear,"-01-01",sep="")), as.Date(paste(lastyear-estyears,"-07-01",sep="")), by="3 month")75ep.end = ep[(1+estyears*4):length(ep)]76to = time(monthlyR)[ep.end]77nsamples = length(from);787980#names of quarters for which the forecast is made:81names.input = paste( c("Q1y_","Q2y_","Q3y_","Q4y_") , rep(seq( (firstyear+estyears),lastyear-1,1),each=4) , sep="" );82names.input = c( names.input , paste( c("Q1y_","Q2y_","Q3y_") , rep(lastyear,each=3) , sep="" ) );8384# Construction of rebalanced portfolios:8586library(PortfolioAnalytics)87eps = 0.02588rpconstraint<-constraint(assets=N, min_sum=(1-eps), max_sum=(1+eps),89min=rep(0,N), max=rep(1,N), weight_seq=generatesequence(),by=.001,rounding=3)90rp<- random_portfolios(rpconstraints=rpconstraint,permutations=200)91rp <-rp/rowSums(rp)9293if( (strategy == "MinRisk"|strategy== "MinRisk_PositionLimit") & mincriterion == "StdDev" ){94out = findportfolio.dynamic( R =monthlyR , mulist = mulist , sigmalist = sigmalist , M3list = M3list, M4list = M4list , from=from, to=to,95names.input=names.input, names.assets = colnames(monthlyR) ,96p = p , priskbudget = priskbudget , mincriterion = mincriterion ,97percriskcontribcriterion = percriskcontribcriterion ,98strategy , optimize_method = "quadprog" )99}else{100# TRY on subset: from = from[1:2] ; to = to[1:2]; names.input = names.input[1:2]101if( strategy == "EqualRisk" ){102controlDE <- list(reltol=1e-6,steptol=150, itermax = 5000,trace = 100, strategy=2, c=0,103NP=as.numeric(nrow(rp)),initialpop=rp)104}else{105controlDE <- list(reltol=1e-6,steptol=150, itermax = 5000,trace = 100, strategy=6, c=.4,106NP=as.numeric(nrow(rp)),initialpop=rp)107}108out = findportfolio.dynamic( R =monthlyR , mulist = mulist , sigmalist = sigmalist , M3list = M3list, M4list = M4list , from=from, to=to,109names.input=names.input, names.assets = colnames(monthlyR) ,110p = p , priskbudget = priskbudget , mincriterion = mincriterion ,111percriskcontribcriterion = percriskcontribcriterion ,112strategy , optimize_method = "DEoptim+L-BFGS-B" , controlDE = controlDE)113}114115116if(!BIP){117if(!CC){118write.table( out[[1]] , file = paste("weights/",mincriterion,"/",strategy,".csv",sep=""),119append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")120write.table( out[[2]] , file = paste("riskcont/",mincriterion,"/",strategy,".csv",sep=""),121append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")122write.table( out[[3]] , file = paste("riskreturn/",mincriterion,"/",strategy,".csv",sep=""),123append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")124}else{125write.table( out[[1]] , file = paste("weights/",mincriterion,"/",strategy,"_CC.csv",sep=""),126append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")127write.table( out[[2]] , file = paste("riskcont/",mincriterion,"/",strategy,"_CC.csv",sep=""),128append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")129write.table( out[[3]] , file = paste("riskreturn/",mincriterion,"/",strategy,"_CC.csv",sep=""),130append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")131}132}else{133if(!CC){134write.table( out[[1]] , file = paste("weights/",mincriterion,"/",strategy,"_BIP.csv",sep=""),135append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")136write.table( out[[2]] , file = paste("riskcont/",mincriterion,"/",strategy,"_BIP.csv",sep=""),137append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")138write.table( out[[3]] , file = paste("riskreturn/",mincriterion,"/",strategy,"_BIP.csv",sep=""),139append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")140}else{141write.table( out[[1]] , file = paste("weights/",mincriterion,"/",strategy,"_BIP_CC.csv",sep=""),142append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")143write.table( out[[2]] , file = paste("riskcont/",mincriterion,"/",strategy,"_BIP_CC.csv",sep=""),144append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")145write.table( out[[3]] , file = paste("riskreturn/",mincriterion,"/",strategy,"_BIP_CC.csv",sep=""),146append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")147}148}149150151