Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
braverock
GitHub Repository: braverock/portfolioanalytics
Path: blob/master/sandbox/paper_analysis/R_Allocation/main_riskbudgets.R
1433 views
1
2
# ! Set your working directory (folder containing the subfolders R_allocation, R_interpretation, data, weights, etc)
3
4
setwd("c:/Documents and Settings/Administrator/Desktop/risk budget programs")
5
#setwd("c:/Documents and Settings/n06054/Desktop/risk budget programs")
6
7
# Options:
8
9
BIP = FALSE
10
CC = TRUE
11
12
# Length estimation period
13
estyears = 5
14
mincriterion = percriskcontribcriterion = "StdDev" ; # "StdDev" "GES" "mES"
15
16
# Equal risk portfolio
17
cAssets = 4;
18
p = priskbudget = 0.95;
19
20
21
22
# Define your portfolio allocation strategy
23
# names = c( "EqualRisk" , "EqualWeight" , "MinRisk" , "MinRiskConc" ,
24
# "MinRisk_PositionLimit" , "MinRisk_RiskLimit" , "MinRisk_ReturnTarget",
25
# "MinRiskConc_PositionLimit" , "MinRiskConc_RiskLimit" , "MinRiskConc_ReturnTarget")
26
strategy = "EqualWeight" # "MinRiskConc_PositionLimit" , "MinRiskConc_RiskLimit"
27
28
# Load programs
29
30
source("R_Allocation/Risk_budget_functions.R");
31
library(zoo); library(xts); library(fGarch); library("PerformanceAnalytics");
32
33
# Load the data
34
35
nominalreturns = T;
36
newdata = T;
37
firstyear = 1976 ; firstquarter = 1; lastyear = 2010; lastquarter = 2;
38
39
if(nominalreturns){
40
load(file="data/monthlyR.RData")
41
if(!BIP){
42
load( file="data/mulist.Rdata") ; load( file="data/sigmalist.Rdata") ;
43
if(!CC){ load( file="data/M3list.Rdata") ; load( file="data/M4list.Rdata") }else{
44
load( file="data/M3list_CC.Rdata") ; load( file="data/M4list_CC.Rdata")
45
}
46
}else{
47
load( file="data/mulist_BIP.Rdata") ; load( file="data/sigmalist_BIP.Rdata") ;
48
if(!CC){ load( file="data/M3list_BIP.Rdata") ; load( file="data/M4list_BIP.Rdata") }else{
49
load( file="data/M3list_BIP_CC.Rdata") ; load( file="data/M4list_BIP_CC.Rdata")
50
}
51
}
52
}else{
53
load(file="data/monthlyR_real.RData")
54
if(!BIP){
55
load( file="data/mulist_real.Rdata") ; load( file="data/sigmalist_real.Rdata") ;
56
if(!CC){ load( file="data/M3list_real.Rdata") ; load( file="data/M4list_real.Rdata") }else{
57
load( file="data/M3list_real_CC.Rdata") ; load( file="data/M4list_real_CC.Rdata")
58
}
59
}else{
60
load( file="data/mulist_real_BIP.Rdata") ; load( file="data/sigmalist_real_BIP.Rdata") ;
61
if(!CC){ load( file="data/M3list_real_BIP.Rdata") ; load( file="data/M4list_real_BIP.Rdata") }else{
62
load( file="data/M3list_real_BIP_CC.Rdata") ; load( file="data/M4list_real_BIP_CC.Rdata")
63
}
64
}
65
}
66
67
N = ncol(monthlyR)
68
69
# Define rebalancing periods:
70
71
ep = endpoints(monthlyR,on='quarters')
72
# select those for estimation period
73
ep.start = ep[1:(length(ep)-estyears*4)]+1
74
from = time(monthlyR)[ep.start]
75
from = seq( as.Date(paste(firstyear,"-01-01",sep="")), as.Date(paste(lastyear-estyears,"-07-01",sep="")), by="3 month")
76
ep.end = ep[(1+estyears*4):length(ep)]
77
to = time(monthlyR)[ep.end]
78
nsamples = length(from);
79
80
81
#names of quarters for which the forecast is made:
82
names.input = paste( c("Q1y_","Q2y_","Q3y_","Q4y_") , rep(seq( (firstyear+estyears),lastyear-1,1),each=4) , sep="" );
83
names.input = c( names.input , paste( c("Q1y_","Q2y_","Q3y_") , rep(lastyear,each=3) , sep="" ) );
84
85
# Construction of rebalanced portfolios:
86
87
library(PortfolioAnalytics)
88
eps = 0.025
89
rpconstraint<-constraint(assets=N, min_sum=(1-eps), max_sum=(1+eps),
90
min=rep(0,N), max=rep(1,N), weight_seq=generatesequence(),by=.001,rounding=3)
91
rp<- random_portfolios(rpconstraints=rpconstraint,permutations=200)
92
rp <-rp/rowSums(rp)
93
94
if( (strategy == "MinRisk"|strategy== "MinRisk_PositionLimit") & mincriterion == "StdDev" ){
95
out = findportfolio.dynamic( R =monthlyR , mulist = mulist , sigmalist = sigmalist , M3list = M3list, M4list = M4list , from=from, to=to,
96
names.input=names.input, names.assets = colnames(monthlyR) ,
97
p = p , priskbudget = priskbudget , mincriterion = mincriterion ,
98
percriskcontribcriterion = percriskcontribcriterion ,
99
strategy , optimize_method = "quadprog" )
100
}else{
101
# TRY on subset: from = from[1:2] ; to = to[1:2]; names.input = names.input[1:2]
102
if( strategy == "EqualRisk" ){
103
controlDE <- list(reltol=1e-6,steptol=150, itermax = 5000,trace = 100, strategy=2, c=0,
104
NP=as.numeric(nrow(rp)),initialpop=rp)
105
}else{
106
controlDE <- list(reltol=1e-6,steptol=150, itermax = 5000,trace = 100, strategy=6, c=.4,
107
NP=as.numeric(nrow(rp)),initialpop=rp)
108
}
109
out = findportfolio.dynamic( R =monthlyR , mulist = mulist , sigmalist = sigmalist , M3list = M3list, M4list = M4list , from=from, to=to,
110
names.input=names.input, names.assets = colnames(monthlyR) ,
111
p = p , priskbudget = priskbudget , mincriterion = mincriterion ,
112
percriskcontribcriterion = percriskcontribcriterion ,
113
strategy , optimize_method = "DEoptim+L-BFGS-B" , controlDE = controlDE)
114
}
115
116
117
if(!BIP){
118
if(!CC){
119
write.table( out[[1]] , file = paste("weights/",mincriterion,"/",strategy,".csv",sep=""),
120
append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")
121
write.table( out[[2]] , file = paste("riskcont/",mincriterion,"/",strategy,".csv",sep=""),
122
append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")
123
write.table( out[[3]] , file = paste("riskreturn/",mincriterion,"/",strategy,".csv",sep=""),
124
append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")
125
}else{
126
write.table( out[[1]] , file = paste("weights/",mincriterion,"/",strategy,"_CC.csv",sep=""),
127
append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")
128
write.table( out[[2]] , file = paste("riskcont/",mincriterion,"/",strategy,"_CC.csv",sep=""),
129
append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")
130
write.table( out[[3]] , file = paste("riskreturn/",mincriterion,"/",strategy,"_CC.csv",sep=""),
131
append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")
132
}
133
}else{
134
if(!CC){
135
write.table( out[[1]] , file = paste("weights/",mincriterion,"/",strategy,"_BIP.csv",sep=""),
136
append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")
137
write.table( out[[2]] , file = paste("riskcont/",mincriterion,"/",strategy,"_BIP.csv",sep=""),
138
append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")
139
write.table( out[[3]] , file = paste("riskreturn/",mincriterion,"/",strategy,"_BIP.csv",sep=""),
140
append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")
141
}else{
142
write.table( out[[1]] , file = paste("weights/",mincriterion,"/",strategy,"_BIP_CC.csv",sep=""),
143
append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")
144
write.table( out[[2]] , file = paste("riskcont/",mincriterion,"/",strategy,"_BIP_CC.csv",sep=""),
145
append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")
146
write.table( out[[3]] , file = paste("riskreturn/",mincriterion,"/",strategy,"_BIP_CC.csv",sep=""),
147
append = FALSE, quote = TRUE, sep = ",", eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = "escape")
148
}
149
}
150
151