Path: blob/master/sandbox/paper_analysis/R_interpretation/old/RCadjSharpeRatio.R
1433 views
1setwd("c:/Documents and Settings/Administrator/Desktop/risk budget programs")23# Optimized portfolio you want to analyse out-of-sample performance through (Component) Sharpe ratios45estyears = 4;6percriskcontribcriterion = "mES"7RBcon = 0.4#8frequency = "quarterly" ;yearly = F;9alpha = 0.05; # probability level for which CVaR is computed1011# Load additional programs to interpret the data1213library(zoo); library("PerformanceAnalytics"); source("R_interpretation/pfolioreturn.R");1415# Choose data16datacase = "equitybondscommodity" # "equitybondscommodity" or "equitybondscommodity"1718# Define optimization criteria19optimcrit = "mES."20mainname = paste("weights/" , percriskcontribcriterion,"/", datacase , "/" , frequency , "/" , sep="")21criterion = paste(mainname,optimcrit,estyears,"yr",sep="")22criteria = c( paste(mainname,"EW",sep="") , paste( criterion , "-InfInf" , sep="") , paste( criterion , "-Inf" , 0.4 , sep="") ,23paste( criterion , "0.2" , "0.3" , sep="") );24# Load additional programs to interpret the data25library(zoo); library("PerformanceAnalytics");262728# Load the data2930firstyear = 1976 ; firstquarter = 1; lastyear = 2009; lastquarter = 2;3132data = read.table( file= paste("data/",datacase,"/data.txt",sep="") ,header=T)33date = as.Date(data[,1],format="%Y-%m-%d")34data = zoo( data[,2:ncol(data)] , order.by = date )3536# "Bond" "SP500" "EAFE" "SPGSCI" "TBill" "Inflation"3738cAssets = 4;39head(data);4041monthlyR = data[,(1:(cAssets+1))]42monthlyRTBill = monthlyR[,cAssets+1]4344# Define the out-of-sample periods4546from=to=c();47if( frequency == "yearly" ){48for( year in (firstyear):(lastyear) ){49from = c( from , paste( year,"-01-01",sep="" ) ); to = c( to , paste( (year),"-12-31",sep="" ) ) }50}else{51for( year in (firstyear+estyears):(lastyear) ){52from = c( from , paste( year,"-01-01",sep="" ) , paste( year,"-04-01",sep="" ) , paste( year,"-07-01",sep="" ) , paste( year,"-10-01",sep="" ) );53to = c( to , paste( year,"-03-31",sep="" ) , paste( year,"-06-30",sep="" ) , paste( year,"-09-30",sep="" ) , paste( year,"-12-31",sep="" ) )}54from = from[firstquarter:(length(from)-4+lastquarter)]; to = to[firstquarter:(length(to)-4+lastquarter)]55}565758# Load the weights5960# Load portfolio weights:6162weightsEW = read.csv( file = paste("weights/", percriskcontribcriterion,"/",datacase,"/",frequency,"/EW.csv" , sep="") );63criterion = paste(crit1,".",estyears,"yr",sep="")64weightsInf= read.csv( file = paste("weights/", percriskcontribcriterion,"/",datacase,"/",frequency,"/",criterion , "-InfInf.csv" , sep="") );65weightsRBcon = read.csv( file = paste("weights/", percriskcontribcriterion,"/",datacase,"/",frequency,"/", criterion , "-Inf",RBconstraint,".csv" , sep="") );66weightsERisk = read.csv( file = paste("weights/", percriskcontribcriterion,"/",datacase,"/",frequency,"/", criterion , 0.2,0.3,".csv" , sep="") );67686970# Construct matrix holding the corresponding weights for each month7172if(frequency=="yearly"){ cc = 12 }else{ cc = 3 }7374cRebalancing = length(from);75WEW = WInf = WRBcon = WERisk =qEW = qInf = qRBcon = qERisk =c()7677evalR = window(monthlyR , start = as.Date(from[1]) , end = as.Date(tail(to,n=1)) ) ;nobs = dim(evalR)[1];7879for (row in 1:cRebalancing){80WInfrow = as.numeric(weightsInf[row,]); WRBconrow = as.numeric(weightsRBcon[row,]) ; WERiskrow = as.numeric(weightsERisk[row,]) ;81WEW = rbind( WEW , matrix( rep( c(rep(1/cAssets,cAssets),0) , cc ) , nrow= cc , byrow=T) )82WInf = rbind( WInf , matrix( rep( WInfrow , cc ) , nrow= cc , byrow=T) )83WRBcon = rbind( WRBcon , matrix( rep(WRBconrow , cc ) , nrow= cc , byrow=T) )84WERisk = rbind( WERisk , matrix( rep(WERiskrow , cc ) , nrow= cc , byrow=T) )85# compute also in this loop the 5% quantile: different for each portfolio weight86preturnsEWrow = rowSums( evalR*matrix( rep( c(rep(1/cAssets,cAssets),0),nrow(evalR) ), nrow =nrow(evalR) , byrow=T ) );87preturnsInfrow = rowSums( evalR*matrix( rep( WInfrow,nrow(evalR) ), nrow =nrow(evalR) , byrow=T ) );88preturnsRBconrow = rowSums( evalR*matrix(rep( WRBconrow,nrow(evalR)), nrow =nrow(evalR),byrow=T ) );89preturnsERiskrow = rowSums( evalR*matrix(rep( WERiskrow,nrow(evalR)), nrow =nrow(evalR),byrow=T ) );90qEW = c( qEW , as.numeric(quantile( preturnsInfrow, probs=alpha )) )91qInf = c( qInf , as.numeric(quantile( preturnsInfrow, probs=alpha )) )92qRBcon = c( qRBcon , as.numeric(quantile( preturnsRBconrow, probs=alpha )) )93qERisk = c( qERisk , as.numeric(quantile( preturnsERiskrow, probs=alpha )) )94}9596# Compute portfolio returns (We need the aggregation property)9798preturnsEW = rowSums( evalR*WEW )99preturnsInf = rowSums( evalR*WInf )100preturnsRBcon = rowSums( evalR*WRBcon )101preturnsERisk = rowSums( evalR*WERisk )102103# Compute portfolio Sharpe ratio104105riskfree.R = window(monthlyRTBill, start = as.Date(from[1]) , end = as.Date(tail(to,n=1)) ) ;106excessEW = mean(preturnsEW) - mean(riskfree.R)107excessInf = mean(preturnsInf) - mean(riskfree.R)108excessRBcon = mean(preturnsRBcon) - mean(riskfree.R)109excessERisk = mean(preturnsERisk) - mean(riskfree.R)110111# Standard sharpe ratio112113portfolioSREW = sqrt(12)*excessEW/( sd(preturnsEW) ) ; print(- portfolioSREW )114portfolioSRInf = sqrt(12)*excessInf/(sd(preturnsInf) ) ; print(- portfolioSRInf )115portfolioSRRBcon = sqrt(12)*excessRBcon/( sd(preturnsRBcon) ) ; print(- portfolioSRRBcon )116portfolioSRERisk = sqrt(12)*excessERisk /( sd(preturnsERisk) ) ; print(- portfolioSRERisk )117118119# Indicator for beyon VaR losses120121indicatorEW = na.omit( c(1:nobs)[preturnsEW<qEW ]);122indicatorInf = na.omit( c(1:nobs)[preturnsInf<qInf ]);123indicatorRBcon = na.omit( c(1:nobs)[preturnsRBcon<qRBcon ]);124indicatorERisk = na.omit( c(1:nobs)[preturnsERisk<qERisk ]);125126HCVaREW = -( sum(preturnsEW[indicatorEW]) )127HCVaRInf = -(sum(preturnsInf[indicatorInf]) )128HCVaRRBcon = -( sum(preturnsRBcon[indicatorRBcon]) )129HCVaRERisk = -( sum(preturnsERisk[indicatorERisk]) )130131portfolioSREW = sqrt(12)*excessEW/HCVaREW132portfolioSRInf = sqrt(12)*excessInf/HCVaRInf133portfolioSRRBcon = sqrt(12)*excessRBcon/HCVaRRBcon134portfolioSRERisk = sqrt(12)*excessERisk /HCVaRERisk135136137# Compute Component Sharpe ratio138139componentSREW = sqrt(12)*( apply( evalR*WEW - riskfree.R*WEW, 2 , 'mean' ) )/HCVaREW140componentSRInf = sqrt(12)*( apply( evalR*WInf - riskfree.R*WInf, 2 , 'mean' ) )/HCVaRInf141componentSRRBcon = sqrt(12)*( apply( evalR*WRBcon - riskfree.R*WRBcon, 2 , 'mean' ) )/HCVaRRBcon142componentSRERisk = sqrt(12)*( apply( evalR*WERisk - riskfree.R*WERisk, 2 , 'mean' ) )/HCVaRERisk143144adjEW = ( apply( WEW[indicatorEW,]*(evalR[indicatorEW,]-preturnsEW[indicatorEW]) , 2 , 'sum') )/HCVaREW^2145adjInf = ( apply( WInf[indicatorInf,]*(evalR[indicatorInf,]-preturnsInf[indicatorInf]) , 2 , 'sum') )/HCVaRInf^2146adjRBcon = ( apply( WRBcon[indicatorRBcon,]*(evalR[indicatorRBcon,]-preturnsRBcon[indicatorRBcon]) , 2 , 'sum') )/HCVaRRBcon^2147adjERisk = ( apply( WERisk[indicatorERisk,]*(evalR[indicatorERisk,]-preturnsERisk[indicatorERisk]) , 2 , 'sum') )/HCVaRERisk^2148149print("Equal-weighted") ;150print("------------------------------------------------------------")151print("Total Sharpe ratio portfolio without risk budget constraints")152print(portfolioSREW);153print("And its decomposition with lambda = 0")154print(componentSREW)155print("And its decomposition with lambda = 0.05")156print(componentSREW + 0.05*adjEW)157print("And its decomposition with lambda = 0.1")158print(componentSREW + 0.1*adjEW)159160print("Min CVaR portfolios") ;161print("------------------------------------------------------------")162print("Total Sharpe ratio portfolio without risk budget constraints")163print(portfolioSRInf);164print("And its decomposition with lambda = 0")165print(componentSRInf)166print("And its decomposition with lambda = 0.05")167print(componentSRInf + 0.05*adjInf)168print("And its decomposition with lambda = 0.1")169print(componentSRInf + 0.1*adjInf)170171print("------------------------------------------------------------")172print("Total Sharpe ratio portfolio with risk budget constraints")173print(portfolioSRRBcon );174print("And its decomposition without adjustment")175print(componentSRRBcon)176print("And its decomposition with lambda = 0.05")177print(componentSRRBcon+ 0.05*adjRBcon)178print("And its decomposition with lambda = 0.1")179print(componentSRRBcon+ 0.1*adjRBcon)180181print("------------------------------------------------------------")182print("Total Sharpe ratio equal-risk portfolio")183print(portfolioSRERisk );184print("And its decomposition without adjustment")185print(componentSRERisk)186print("And its decomposition with lambda = 0.05")187print(componentSRERisk+ 0.05*adjERisk)188print("And its decomposition with lambda = 0.1")189print(componentSRERisk+ 0.1*adjERisk)190191192193