Tutkitaan aikasarjaa SP500 osakeindeksin päivittäisistä päätoskursseista ajalta 1950-01-03 -- 2014-08-28.
Lue data R:ään ja muuta hintojen aikasarja tuottojen aikasarjaksi.
file<-"http://cc.oulu.fi/~jklemela/marketrisk/sp500.csv" data<-read.csv(file=file) sp500<-data[,7] sp500<-sp500[length(sp500):1] plot(sp500,type="l") pituus<-length(sp500) tuotto<-log(sp500[2:pituus])-log(sp500[1:(pituus-1)]) plot(tuotto,type="l")
Oletetaan, että portfolio koostuu 10 kappaleesta SP500 indeksiosuutta. Oletetaan, että eletään päivää 2014-08-28, jolloin yhden indeksiosuuden arvo on 1996.74 USD. Kayta backtestingia testaamaan onko empiiriseen kvantiiliin perustuva estimaattori VaR:ille parempi kuin normaalijakaumaoletukseen perustuva estimaattori.
St<-sp500[length(sp500)] losses<--10*St*tuotto # normaalijakaumaan perustuvan menetelmän testaus alpha<-0.95 pituus<-length(losses) t0<-250 alitukset<-matrix(0,pituus-t0,1) for (i in t0:(pituus-1)){ datai<-losses[1:i] mui<-mean(datai) sigmai<-sd(datai) VaRhat<-mui+sigmai*qnorm(alpha) if (losses[i+1]<=VaRhat) alitukset[i-t0+1]<-1 } mean(alitukset) # [1] 0.9359471 # liian pieni alpha<-0.99 pituus<-length(losses) t0<-250 alitukset<-matrix(0,pituus-t0,1) for (i in t0:(pituus-1)){ datai<-losses[1:i] mui<-mean(datai) sigmai<-sd(datai) VaRhat<-mui+sigmai*qnorm(alpha) if (losses[i+1]<=VaRhat) alitukset[i-t0+1]<-1 } mean(alitukset) # [1] 0.9735922 # liian pieni # empiiriseen kvantiiliin perustuvan menetelman testaus alpha<-0.95 pituus<-length(losses) t0<-250 alitukset<-matrix(0,pituus-t0,1) for (i in t0:(pituus-1)){ datai<-losses[1:i] m<-ceiling(i*(1-alpha)) VaRhat<-sort(datai,decreasing=TRUE)[m] if (losses[i+1]<=VaRhat) alitukset[i-t0+1]<-1 } mean(alitukset) # [1] 0.9312648 # liian pieni, viela pienempi kuin norm. jak. perustuva alpha<-0.99 pituus<-length(losses) t0<-250 alitukset<-matrix(0,pituus-t0,1) for (i in t0:(pituus-1)){ datai<-losses[1:i] m<-ceiling(i*(1-alpha)) VaRhat<-sort(datai,decreasing=TRUE)[m] if (losses[i+1]<=VaRhat) alitukset[i-t0+1]<-1 } mean(alitukset) # [1] 0.9825197 # liian pieni, mutta suurempi kuin Norm. jakaumaan perustuva
Oletetaan, että portfolio koostuu 10 kappaleesta SP500 indeksiosuutta. Kayta backtestingia testaamaan onko empiiriseen kvantiiliin perustuva estimaattori expected shortfallille parempi kuin normaalijakaumaoletukseen perustuva estimaattori.
St<-sp500[length(sp500)] losses<--10*St*tuotto # normaalijakaumaan perustuvan menetelmän testaus alpha<-0.95 pituus<-length(losses) t0<-1000 ylitykset<-matrix(0,pituus-t0,1) VaRhats<-matrix(0,pituus-t0,1) EShats<-matrix(0,pituus-t0,1) simloss<-matrix(0,pituus-t0,1) for (i in t0:(pituus-1)){ datai<-losses[1:i] mui<-mean(datai) sigmai<-sd(datai) EShats[i-t0+1]<-mui+sigmai*dnorm(qnorm(alpha))/(1-alpha) VaRhats[i-t0+1]<-mui+sigmai*qnorm(alpha) simloss[i-t0+1]<-losses[i+1] if (losses[i+1]>VaRhats[i-t0+1]) ylitykset[i-t0+1]<-1 } mean(ylitykset) mean(abs(simloss-EShats)*ylitykset) #[1] 0.06588944 #[1] 7.281483 plot(simloss) plot(EShats) plot(abs(simloss-EShats)*ylitykset) median(abs(simloss-EShats)*ylitykset) # [1] 0 # normaalijakaumaan perustuvan menetelmän testaus alpha<-0.99 pituus<-length(losses) t0<-1000 ylitykset<-matrix(0,pituus-t0,1) VaRhats<-matrix(0,pituus-t0,1) EShats<-matrix(0,pituus-t0,1) simloss<-matrix(0,pituus-t0,1) for (i in t0:(pituus-1)){ datai<-losses[1:i] mui<-mean(datai) sigmai<-sd(datai) EShats[i-t0+1]<-mui+sigmai*dnorm(qnorm(alpha))/(1-alpha) VaRhats[i-t0+1]<-mui+sigmai*qnorm(alpha) simloss[i-t0+1]<-losses[i+1] if (losses[i+1]>VaRhats[i-t0+1]) ylitykset[i-t0+1]<-1 } mean(ylitykset) mean(abs(simloss-EShats)*ylitykset) #[1] 0.02724653 #[1] 3.952551 plot(simloss) plot(EShats) plot(abs(simloss-EShats)*ylitykset) # empiiriseen kvantiiliin perustuva ES-estimointi alpha<-0.95 pituus<-length(losses) t0<-1000 ylitykset<-matrix(0,pituus-t0,1) VaRhats<-matrix(0,pituus-t0,1) EShats<-matrix(0,pituus-t0,1) simloss<-matrix(0,pituus-t0,1) for (i in t0:(pituus-1)){ datai<-losses[1:i] mui<-mean(datai) sigmai<-sd(datai) ni<-length(datai) m<-ceiling(ni*(1-alpha)) oikea.hanta<-sort(losses,decreasing=TRUE)[1:m] EShats[i-t0+1]<-mean(oikea.hanta) VaRhats[i-t0+1]<-sort(losses,decreasing=TRUE)[m] simloss[i-t0+1]<-losses[i+1] if (losses[i+1]>VaRhats[i-t0+1]) ylitykset[i-t0+1]<-1 } mean(ylitykset) mean(abs(simloss-EShats)*ylitykset) #[1] 0.03170029 #[1] 5.063804 # parempi kuin normaalijakaumaan perustuvalla plot(simloss) plot(EShats) plot(abs(simloss-EShats)*ylitykset) # empiiriseen kvantiiliin perustuva ES-estimointi alpha<-0.99 pituus<-length(losses) t0<-1000 ylitykset<-matrix(0,pituus-t0,1) VaRhats<-matrix(0,pituus-t0,1) EShats<-matrix(0,pituus-t0,1) simloss<-matrix(0,pituus-t0,1) for (i in t0:(pituus-1)){ datai<-losses[1:i] mui<-mean(datai) sigmai<-sd(datai) ni<-length(datai) m<-ceiling(ni*(1-alpha)) oikea.hanta<-sort(losses,decreasing=TRUE)[1:m] EShats[i-t0+1]<-mean(oikea.hanta) VaRhats[i-t0+1]<-sort(losses,decreasing=TRUE)[m] simloss[i-t0+1]<-losses[i+1] if (losses[i+1]>VaRhats[i-t0+1]) ylitykset[i-t0+1]<-1 } mean(ylitykset) mean(abs(simloss-EShats)*ylitykset) #[1] 0.007204611 #[1] 1.888223 # parempi kuin normaalijakaumaan perustuva plot(simloss) plot(EShats) plot(abs(simloss-EShats)*ylitykset)