Tietokoneharjoitus 4

Tutkitaan aikasarjaa SP500 osakeindeksin päivittäisistä päätoskursseista ajalta 1950-01-03 -- 2014-08-28.

Tehtävä 5

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")

Tehtävä 5a

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

Tehtävä 5b

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)