Path: blob/master/sandbox/paper_analysis/R_interpretation/chartCVaRRelPerf.R
1433 views
#################################################################################1# Create CVaR + RelPerf plot2#################################################################################34# ! Set your working directory (folder containing the subfolders R_allocation, R_interpretation, data, weights, etc)56setwd("c:/Documents and Settings/Administrator/Desktop/risk budget programs")789# Options:10################1112# specify the number of years used for the estimation13estyears = 5;14Tstart = 1+(8-estyears)*415CC = T16# Load programs1718source("R_interpretation/chart.StackedBar.R");19library(zoo); library(PerformanceAnalytics)2021# number of risky assets22firstyear = 1976 ; firstquarter = 1; lastyear = 2010; lastquarter = 2;23cAssets = 42425# "MinRisk_ReturnTarget" "EqualRisk"26# "MinRiskConc_ReturnTarget"2728names = c( "EqualWeight" , "MinRisk" , "MinRisk_PositionLimit" , "MinRisk_RiskLimit" ,29"MinRiskConc" , "MinRiskConc_PositionLimit", "EqualRisk" ,30"MinRisk_ReturnTarget", "MinRiskConc_ReturnTarget" )31if(CC){ names[1:length(names)] = paste( names[1:length(names)], "_CC", sep="") }3233namelabels = c( "Equal-Weight" , "Min CVaR" , "Min CVaR + 40% Position Limit" , "Min CVaR + 40% CVaR Alloc Limit" ,34"Min CVaR Concentration" , "Min CVaR Concentration + 40% Position Limit", "Min CVaR + ERC constraint" , "Min CVaR + Return Target" , "Min CVaR Conc + Return Target" )3536riskcrit = "mES"3738if(CC){39load( file="mCVaR_CC.Rdata")40load( file="mMU_CC.Rdata")41}else{42load( file="mCVaR.Rdata")43load( file="mMU.Rdata")44}4546mMU = window(mMU , start=as.Date("1984-01-01") , end=tail(time(mMU),1) )47mCVaR = window(mCVaR , start=as.Date("1984-01-01") , end=tail(time(mCVaR),1) )4849# do not plot the last month such that it is fully comparable with out-of-sample plots5051sel = c( 1 : (nrow(mCVaR)-1) );525354# Load the data5556nominalreturns = T;57if(nominalreturns){58load(file=paste(getwd(),"/data/monthlyR.RData",sep="")) }else{ load(file=paste(getwd(),"/data/monthlyR_real.RData")) }59R = monthlyR60cAssets = ncol(monthlyR)6162# Define rebalancing periods:6364ep = endpoints(monthlyR,on='quarters')65# select those for estimation period66ep.start = ep[1:(length(ep)-estyears*4)]+167from = time(monthlyR)[ep.start]; from = seq( as.Date(paste(firstyear,"-01-01",sep="")), as.Date(paste(lastyear-estyears,"-07-01",sep="")), by="3 month")68ep.end = ep[(1+estyears*4):length(ep)]69to = time(monthlyR)[ep.end]70cPeriods = length(from);717273# Bear periods74sp500 = window (monthlyR , start = from[1] , end = to[ length(to) ] )[,2]75bear = c(1:length(sp500))[sp500<mean(sp500)]76bear = c(1:length(sp500))[sp500<(-0.12)]77m.bear.dates = list();78i=1;79for( b in bear){80m.bear.dates[[i]] = c( b-0.5, b+0.5)81i = i + 1;82}8384out = table.Drawdowns(sp500,top=10)85start.bear = out$From[out$Depth<(-0.12)]86end.bear = out$Trough[out$Depth<(-0.12)]87start.bear.index = c(1:length(sp500))[ time(sp500) ]88m.bear.dates = list()89v.bear.dates = c()90for( i in 1:length(start.bear) ){91m.bear.dates[[i]] = c( as.yearmon(start.bear[i]) , as.yearmon(end.bear[i]) )92v.bear.dates = c( v.bear.dates , seq(start.bear[i],end.bear[i],"days") )93}94v.bear.dates = as.Date( v.bear.dates )959697###############9899100mincriterion = "mES" # "mES" , "StdDev"101load(paste(getwd(),"/","/oosreturns/", "simplereturns_",mincriterion ,".Rdata" ,sep="") )102103criteria = paste( rep("weights/",length(names) ) , rep(mincriterion,length(names) ) , "/", names , sep="")104criteria[ criteria == "weights/StdDev/EqualWeight" ] = "weights/mES/EqualWeight"105106#colnames(simplereturns) = names107date = time(simplereturns)108109#> names(simplereturns)110#[1] "weights/mES/EqualWeight_CC" "weights/mES/MinRisk_CC" "weights/mES/MinRisk_PositionLimit_CC"111#[4] "weights/mES/MinRisk_RiskLimit_CC" "weights/mES/EqualRisk_CC" "weights/mES/MinRiskConc_CC"112#[7] "weights/mES/MinRiskConc_PositionLimit_CC"113114115116117###############118119120if(CC){121postscript(file="portfolioCVaRRelPerf_CC.eps")122}else{123postscript(file="portfolioCVaRRelPerf.eps")124}125par(mfrow=c(2,1),mar=c(3,4,1,2))126127chart.TimeSeries( mCVaR[sel,c(1,5,2)] , ylim=c(0,max(mCVaR)), ylab = "Portfolio CVaR" , main = "",128col=c("black","black","darkgray"), lty=c("dashed","solid","solid"), lwd=c(2,2,2,2) ,129auto.grid = TRUE, minor.ticks = FALSE ,130period.areas = m.bear.dates , period.color="lightgray",131date.format.in = "%Y-%m-%d",date.format = "%b %Y")132133legend("topleft", legend = namelabels[c(1,5,2)],134col=c("black","black","darkgray"), lty=c("dashed","solid","solid"), lwd=c(2,2,2) ,cex=0.7)135136chart.RelativePerformance( simplereturns[,c(6,2)] , simplereturns[,c(1)] ,137main = "" , lty=c("solid","solid") , ylab="Relative performance vs equal-weight", xlab="",138col=c("black","darkgray") , las=1, lwd=c(2,2,5) ,139auto.grid = TRUE, minor.ticks = FALSE ,ylim=c(0.7,1.65),140period.areas = m.bear.dates , period.color="lightgray",141date.format.in = "%Y-%m-%d",date.format = "%b %Y")142legend("topleft", legend = c("Min CVaR Concentration","Min CVaR"),143col=c("black","darkgray"), lty=c("solid","solid"), lwd=c(2,2,5) ,cex=0.7)144145dev.off()146147if(CC){148postscript(file="portfolioCVaRRelPerf_CC_alternatives.eps")149}else{150postscript(file="portfolioCVaRRelPerf.eps")151}152par(mfrow=c(2,1),mar=c(3,4,1,2))153154chart.TimeSeries( mCVaR[sel,c(7,4,3,6)] , ylim=c(0,max(mCVaR)), ylab = "Portfolio CVaR" , main = "",155col=c("black","darkgray","darkgray","black"), lty=c("solid","dashed","solid","dashed"), lwd=c(2,2,2,2) ,156auto.grid = TRUE, minor.ticks = FALSE ,157period.areas = m.bear.dates , period.color="lightgray",158date.format.in = "%Y-%m-%d",date.format = "%b %Y")159160legend("topleft", legend = namelabels[c(7,4,3,6)],161col=c("black","darkgray","darkgray","black"), lty=c("solid","dashed","solid","dashed"), lwd=c(2,2,2) ,cex=0.7)162163chart.RelativePerformance( simplereturns[,c(5,4,3,7)] , simplereturns[,c(1)] ,164main = "" , lty=c("solid","dashed","solid","dashed") , ylab="Relative performance vs equal-weight", xlab="",165col=c("black","darkgray","darkgray","black") , las=1, lwd=c(2,2,5) ,166auto.grid = TRUE, minor.ticks = FALSE ,ylim=c(0.7,1.65),167period.areas = m.bear.dates , period.color="lightgray",168date.format.in = "%Y-%m-%d",date.format = "%b %Y")169170legend("topleft", legend = namelabels[c(7,4,3,6)],171col=c("black","darkgray","darkgray","black"), lty=c("solid","dashed","solid","dashed"), lwd=c(2,2,2) ,cex=0.7)172173174175dev.off()176177178