Path: blob/master/sandbox/riskbudgetpaper(superseded)/illustration/USreal.R
1433 views
# 1. Set working directory1# setwd("C:/Documents and Settings/n06054/Desktop/PhDDefence");2setwd("Y:/PhDDefence");3# Load libraries4library(chron)56# Asymmetrie and fat tails in weekly returns IBM78postscript("monthlyreturns.eps")9data=read.table("monthlyIBM.txt",skip=1,nrows=-1)10IBMdate = chron( as.character(data[,1]),format=c(dates="d/m/y") ); IBMreturns = data[,2];11z99 = qnorm(0.99);12start=261; end=length(IBMdate);13IBMdate = IBMdate[start:end] ; IBMreturns = IBMreturns[start:end]; print(length(IBMdate));14band = mean(IBMreturns)+z99*sd(IBMreturns)15par(mfrow=c(2,1),mar=c(2,2,3,2),cex=1.3)16maxvalue = 1.05*max( abs( min(IBMreturns) ) , IBMreturns );17range = c(-maxvalue,maxvalue)18plot(IBMdate,IBMreturns,type="h",main="Monthly returns on IBM stock",xlab="",ylab="",ylim=range)19abline( h= band , lty=3, col="blue" ,lwd=3 ); abline(h=-band , lty=3 , col="blue",lwd=3)20plot(IBMdate, rnorm(length(IBMdate), mean=mean(IBMreturns),sd=sd(IBMreturns)),21main="Simulated returns from a normal distribution" ,type="h",ylim=range)22abline( h=band, lty=3, col="blue" ,lwd=3 ); abline(h=-band , lty=3 , col="blue" ,lwd=3)23dev.off()2425library(PerformanceAnalytics);26modifiedVaR( data[,2] )27VaR.Beyond( data[,2] , p=0.99 ); VaR.Beyond( data[,2] , modified=T, p=0.99 );2829postscript("monthlyreturnsVaR.eps")30data=read.table("monthlyIBM.txt",skip=1,nrows=-1)31IBMdate = chron( as.character(data[,1]),format=c(dates="d/m/y") ); IBMreturns = data[,2];32z99 = qnorm(0.99);33start=261; end=length(IBMdate);34IBMdate = IBMdate[start:end] ; IBMreturns = IBMreturns[start:end]; print(length(IBMdate));35band = mean(IBMreturns)+z99*sd(IBMreturns)36par(mfrow=c(1,1),mar=c(2,2,3,2),cex=1.3)37maxvalue = 1.05*max( abs( min(IBMreturns) ) , IBMreturns );38range = c(-maxvalue,maxvalue)39plot(IBMdate,IBMreturns,type="h",main="Monthly returns on IBM stock \n and expected loss in 1% worst cases",xlab="",ylab="",ylim=range)40#abline( h= band , lty=3 ); abline(h=-band , lty=3 )4142GVaR = VaR.traditional( data[,2] , p=0.99 );43MVaR = modifiedVaR( data[,2] , p=0.99 ) ;44GES = VaR.Beyond( data[,2] , p=0.99 );45MES = VaR.Beyond( data[,2] , modified=T, p=0.99 );4647abline( h = - GES , lty=1, col="red",lwd=3 ); text( IBMdate[5] , y = -0.9*GES , labels = "Normal approach" , pos=4, col="red",lwd=3)48abline( h = - MES , lty=1, col="darkgreen",lwd=3 );49text( IBMdate[5] , y = -0.93*MES , labels = "Modified approach" , pos=4 , col="darkgreen",lwd=3)50dev.off()5152# Portfolio risk:5354dataIBM=read.table("monthlyIBM.txt",skip=1,nrows=-1)55IBMdate = chron( as.character(dataIBM[,1]),format=c(dates="d/m/y") ); IBMreturns = dataIBM[,2];56start=261; end=length(IBMdate);57IBMdate = IBMdate[start:end] ; IBMreturns = IBMreturns[start:end]; print(length(IBMdate));5859dataUSTnote=read.table("monthlyUS10yrsnote.txt",skip=1,nrows=-1)60USTnotedate = chron( as.character(dataUSTnote[,1]),format=c(dates="d/m/y") ); USTnotereturns = dataUSTnote[,2];61start=261; end=length(USTnotedate);62USTnotedate = USTnotedate[start:end] ; USTnotereturns = USTnotereturns[start:end]; print(length(USTnotedate));6364maxvalue = 1.05*max( abs( min(IBMreturns,USTnotereturns) ) , IBMreturns,USTnotereturns );range = c(-maxvalue,maxvalue)6566pfreturns = 0.5*(USTnotereturns+IBMreturns);67MES = VaR.Beyond( pfreturns , modified=T, p=0.99 );686970source("functions-managers_changed.R");7172data = cbind( IBMreturns , USTnotereturns )73mu = apply(data,2,'mean'); sigma = cov(data)74invSigma = solve(sigma); N=2;75M3 = matrix(rep(0,N^3),nrow=N,ncol=N^2)76M4 = matrix(rep(0,N^4),nrow=N,ncol=N^3)77T = length(IBMreturns)78for(t in c(1:T))79{80centret = as.numeric(matrix(data[t,]-mu,nrow=N,ncol=1))81M3 = M3 + ( centret%*%t(centret) )%x%t(centret)82M4 = M4 + ( centret%*%t(centret) )%x%t(centret)%x%t(centret)83}84M3 = M3/T85M4 = M4/T8687PortgausES(alpha=0.01,w=rep(1,2)/2,mu=mu,sigma=sigma,)88PortMES(alpha=0.01,w=rep(1,2)/2,mu=mu,sigma=sigma,M3=M3,M4=M4)89MES = VaR.Beyond( pfreturns , modified=T, p=0.99 );909192postscript("riskcontributions.eps")93par(mfrow=c(3,1),mar=c(2,2,0,2),cex=1.3)9495plot(IBMdate,pfreturns,type="h",main="",xlab="",ylab="",ylim=range, xaxt="n")96text( x=IBMdate[5], y = 0.9*range[2], labels="Monthly returns on portfolio with 50% IBM and 50% 10 yrs US T-Note" ,pos=4)97abline( h=-MES, lty=1 ,lwd=3 , col="blue");98text( IBMdate[1],y = -1.3*MES, labels="1% Portfolio modES",pos=4, col="blue",cex=0.8 )99100par(mar=c(2,2,0,2),cex=1.3)101102plot(IBMdate,IBMreturns,type="h",main="",xlab="",ylab="",ylim=range, xaxt="n")103text( IBMdate[5],y = 0.9*range[2], labels="Monthly returns on IBM stock" ,pos=4 )104text( IBMdate[1],y = -1.3*MES, labels="1% Portfolio modES",pos=4, col="blue" ,cex=0.8)105106abline( h=-MES, lty=1 ,lwd=3 , col="blue" );107108par(mar=c(2,2,0,2),cex=1.3 )109110plot(IBMdate,USTnotereturns,type="h",main="",xlab="",ylab="",ylim=range)111text( x=IBMdate[5], y = 0.9*range[2], labels="Monthly returns on 10yrs US T-Note" ,pos=4 )112abline( h=-MES, lty = 1,lwd=3 , col="blue" );113text( IBMdate[1],y = -1.3*MES, labels="1% Portfolio modES",pos=4 , col="blue",cex=0.8)114115dev.off()116117118######################################################################119120# Intraweek pattern121122###################################################################123# Conditional normality and jumps #124# Authors: Kris Boudt, Christophe Croux and Sebastien Laurent #125###################################################################126127source("seasonalityfunctions15augustbis.R")128129# load data130131EUR = read.table("EUR_USD_5minEST_1987_2004.txt",skip=1)132EUR.dow = read.table("EUR_USD_5minDOW_1987_2004.txt",skip=1)133#EUR.date=EUR[1,];134subset = c(3452:4371) # January 2001 till September 20, 2004135#subset = c(3201:4371) # January 2000 till September 20, 2004136#subset = c(1956:4371) # January 1995 till September 20, 2004137#subset= c(4127:4371) # October 1, 2003 till September 30, 2004138EUR = EUR[subset,]139EUR.date=EUR[,1];140EUR = EUR[,c(2:dim(EUR)[2])];141cDays = length(EUR.date)142EUR.dow = EUR.dow[subset,2];143#EUR.dow = EUR.dow[,2];144EUR.dowdummies=matrix(rep(0,cDays*5),ncol=5);145for(d in 1:5){ EUR.dowdummies[EUR.dow==d,d]=1 }146147EUR = as.matrix(EUR); vEUR = as.vector(EUR); nobs = length(vEUR)148149rob.stdEUR= standardize(data=EUR , method="LM" ) ; rob.vstdEUR = as.vector(rob.stdEUR)150151SD.seas.scale = seasonality( stddata = rob.stdEUR, approach="scale" , method = "sd", standardize=T );152AROWVar.seas.scale = seasonality( stddata = rob.stdEUR, approach="scale" , method = "AROWVar", standardize=T );153154range = c( 0.9*min(AROWVar.seas.scale, SD.seas.scale) , 1.1*max(AROWVar.seas.scale, SD.seas.scale) )155cIntraDay = length(SD.seas.scale)156157#range=c( 0.9*min(SD.seas.scale) , 1.1*max(SD.seas.scale) )158159160times = c(1,103,199,288)161names = c("16:00","24:00","8:30","15:55")162163postscript("SDseasonality.eps")164165par(mfrow=c(1,1),mar=c(2,2,3,2),cex=1.3 ,cex.axis=1)166par( mar=rep(2,4) )167# plot robust seasonality estimates168plot(c(1:cIntraDay),SD.seas.scale,type="l",xlab="",ylab="" , xaxt="n", ylim=range,169main="Intraday pattern in volatility of 5-min EUR/USD returns" )170axis(1, at=times , tick=T, labels= names)171dev.off()172173174AROWVar.seas.scale = seasonality( stddata = rob.stdEUR, approach="scale" , method = "AROWVar", standardize=T );175176cIntraDay = length(AROWVar.seas.scale)177#range=c( 0.9*min(AROWVar.seas.scale) , 1.1*max(AROWVar.seas.scale) )178179180times = c(1,103,199,288)181names = c("16:00","24:00","8:30","15:55")182183postscript("dailyscaleseasonality3.eps")184185par(mfrow=c(1,1),mar=c(2,2,3,2),cex=1.3 ,cex.axis=1)186par( mar=rep(2,4) )187# plot robust seasonality estimates188plot(c(1:cIntraDay),AROWVar.seas.scale,type="l",xlab="",ylab="" , xaxt="n", ylim=range,189main="Intraday pattern in volatility of 5-min EUR/USD returns" )190axis(1, at=times , tick=T, labels= names)191dev.off()192193194# Time-varying volatility of Daily returns IBM195196data=read.table("IBM.txt",skip=1,nrows=-1)197IBMdate = chron( as.character(data[,1]),format=c(dates="d/m/y") ); IBMreturns = data[,2];198start=5449; end=length(IBMdate);199IBMdate = IBMdate[start:end] ; IBMreturns = IBMreturns[start:end]; print(length(IBMdate));200z99 = qnorm(0.99)201band = mean(IBMreturns)+z99*sd(IBMreturns)202data=read.table("monthlyIBM.txt",skip=1,nrows=-1)203204range = c(-maxvalue,maxvalue)205postscript("dailyreturns.eps")206par(mfrow=c(2,1),mar=c(2,2,3,2),cex=1.3)207maxvalue = 1.05*max( abs( min(IBMreturns) ) , IBMreturns );208plot(IBMdate,IBMreturns,type="h",main="Daily returns on IBM stock",xlab="",ylab="",ylim=range)209abline( h=band, lty=3 ); abline(h=-band , lty=3 )210plot(IBMdate, rnorm(length(IBMdate), mean=mean(IBMreturns),sd=sd(IBMreturns)),211main="Simulated returns from a normal distribution" ,type="h",ylim=range)212abline( h=band, lty=3 ); abline(h=-band , lty=3 )213dev.off()214215# Commonality daily returns IBM and MSFT216217218dataIBM=read.table("IBM.txt",skip=1,nrows=-1)219IBMdate = chron( as.character(dataIBM[,1]),format=c(dates="d/m/y") ); IBMreturns = dataIBM[,2];220start=5449; end=length(IBMdate);221IBMdate = IBMdate[start:end] ; IBMreturns = IBMreturns[start:end]; print(length(IBMdate));222223dataGE=read.table("dailyGE.txt",skip=1,nrows=-1)224GEdate = chron( as.character(dataGE[,1]),format=c(dates="d/m/y") ); GEreturns = dataGE[,2];225start=5449; end=length(GEdate);226GEdate = GEdate[start:end] ; GEreturns = GEreturns[start:end]; print(length(GEdate));227228z99 = qnorm(0.99)229band = mean(IBMreturns)+z99*sd(IBMreturns)230data=read.table("monthlyIBM.txt",skip=1,nrows=-1)231232maxvalue = 1.05*max( abs( min(IBMreturns,GEreturns) ) , IBMreturns,GEreturns );range = c(-maxvalue,maxvalue)233234postscript("commonality.eps")235par(mfrow=c(2,1),mar=c(2,2,3,2),cex=1.3)236237plot(IBMdate,IBMreturns,type="h",main="Daily returns on IBM stock",xlab="",ylab="",ylim=range)238abline( h=band, lty=3 ); abline(h=-band , lty=3 )239240band = mean(GEreturns)+z99*sd(GEreturns)241plot(GEdate,GEreturns,type="h",main="Daily returns on GE stock",xlab="",ylab="",ylim=range)242243abline( h=band, lty=3 ); abline(h=-band , lty=3 )244dev.off()245246247248# Price jumps249250data=read.table("intraday.txt",skip=1,nrows=-1)251EUR = data[,1]; GBP = data[,2];252253loc = c( 1 , 6*12 , 12*12 , 18*12 , 24*12 )254names = c( "00:05 GMT" , "06:00" , "12:00" , "18:00" , "24:00" )255256postscript("intraday.eps")257par(mfrow=c(2,1),mar=c(2,2,3,2),cex=1.3)258259plot(c(1:288),EUR,type="l",main="5-min EUR/USD FX rates on June 9, 2003",xlab="",ylab="", xaxt="n")260axis( side = 1 , at = loc , labels = names)261262plot(c(1:288),GBP,type="l",main="5-min GBP/USD FX rates on June 9, 2003",xlab="",ylab="",xaxt="n")263axis( side = 1 , at = loc , labels = names)264265dev.off()266267# Effect on correlation268269RQCov=read.table(file="dailyRQCov_EURGBP.txt");270vRQCov11=RQCov[,2]; vRQCov22=RQCov[,3]; vRQCov12=RQCov[,4]; vRQCor=RQCov[,5];271RBPCov=read.table(file="dailyRBPCov_EURGBP.txt");272vRBPCov11=RBPCov[,2]; vRBPCov22=RBPCov[,3]; vRBPCov12=RBPCov[,4]; vRBPCor= RBPCov[,5];273ROWQCov=read.table(file="dailyMCDROWCov_EURGBP.txt");274vROWQCov11=ROWQCov[,2]; vROWQCov22=ROWQCov[,3]; vROWQCov12=ROWQCov[,4]; vROWQCor=ROWQCov[,5];275dailymaxoutlyingness = ROWQCov[,6];276cDays=length(RQCov); days=read.csv2("days.csv",sep=";",skip=0,header=F);277days=paste(as.character(days[[1]]),as.character(days[[2]]),as.character(days[[3]]),sep="/");278days = chron(days,format=c(dates="y/m/d"))279280day1 = 4014;281282subset1 = c(3907:4152) # April - June 1998283subset1days = days[subset1] ; # cbind(subset1, as.character(subset1days) )284285times = c( 3907 , 4014 , 4152 );286names = c("Jan,3", "June,9", "Dec,30") # subset1days[times]287subset1days = 1:length (subset1) ; # 63 observation288289size = 1.3290291vRQCor[day1];vRBPCor[day1];vROWQCor[day1];292293postscript("correlation.ps", family="Times", horizontal=FALSE, width=12,height=6)294par(mfrow=c(3,1),cex.axis=1.3,cex.lab=1.3)295par(mar=c(1.5,2.2,0.7,2)) # c(bottom, left, top, right)296297range=c( min(vRQCor[subset1],vRBPCor[subset1],vROWQCor[subset1]) ,2981.1*max(vRQCor[subset1],vRBPCor[subset1],vROWQCor[subset1]) )299300plot( subset1, vRQCor[subset1] , xlab="", type="l",lwd=3 ,ylab="" , ylim= range , xaxt="n" )301text(x=subset1[2],y=0.98*range[2],labels="Daily RQCor",adj=c(0,.75),cex=size)302abline(h=0.2,lty=3) ; abline(h=0.4,lty=3);abline(h=0.6,lty=3);303304#range=c( min(vRBPCor[subset1]) , 1.1*max(vBPCor[subset1]) )305plot( subset1 , vRBPCor[subset1] , xlab="", type="l",lwd=3 ,ylab="" , ylim= range , xaxt="n" )306abline(h=0.2,lty=3) ; abline(h=0.4,lty=3);abline(h=0.6,lty=3);307text(x=subset1[2] ,y=0.98*range[2],labels="Daily RBPCor",adj=c(0,.75),cex=size)308309par(mar=c(2.2,2.2,0,2)) # c(bottom, left, top, right)310311#range=c( min(vMCDOWCor[subset1]) , 1.1*max(vMCDOWCor[subset1]) )312plot( subset1 , vROWQCor[subset1] , xlab="", type="l",lwd=3 ,ylab="" , ylim= range , xaxt="n" )313axis(1, at=times , tick=T, labels= names ,cex.axis=size )314text(x=subset1[2] ,y=0.98*range[2],labels="Daily ROWQCor",adj=c(0,.75),cex=size)315abline(h=0.2,lty=3) ; abline(h=0.4,lty=3);abline(h=0.6,lty=3);316317dev.off()318319postscript("correlation2.eps")320par(mfrow=c(2,1),mar=c(2,2,3,2),cex=1.3)321322plot( subset1 ,vRBPCor[subset1] , xlab="", type="l",lwd=3 , main=" 'robust' daily correlation", ylab="" ,323ylim= range , xaxt="n" )324axis(1, at=times , tick=T, labels= names ,cex.axis=size )325plot( subset1 ,vROWQCor[subset1] , xlab="", type="l",lwd=3 , main=" daily correlation using new method ", ylab="" ,326ylim= range , xaxt="n" )327axis(1, at=times , tick=T, labels= names ,cex.axis=size )328dev.off()329330331