aboutsummaryrefslogtreecommitdiffstats
path: root/R/zerorecovery_index.R
blob: a7694d79416d4b01bc6b5e607c7da919927f20ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
code.dir <- Sys.getenv("CODE_DIR")
source(file.path(code.dir, "R", "yieldcurve.R"))
source(file.path(code.dir, "R", "optimization.R"))
source(file.path(code.dir, "R", "calibration.R"), chdir=TRUE)
source(file.path(code.dir, "R", "serenitasdb.R"))
source(file.path(code.dir, "R", "creditIndex.R"))
source(file.path(code.dir, "R", "tranche_functions.R"))

##HY
tradedate <- as.Date("2017-03-31")
exportYC(tradedate, "USD")
index <- creditIndex("HY28", "5yr")
index <- set.index.desc(index, tradedate)
index <- set.singlenamesdata(index, tradedate)
index$cs <- couponSchedule(IMMDate(tradedate, noadj=TRUE), index$maturity, "Q", "FIXED", 1,
                           0, tradedate, IMMDate(tradedate, "prev"))
index$quotes <- data.frame(maturity=as.Date("2022-06-20"), spread=0.05, price=1.0716)
tweak <- tweakcurves(index)
zerorecov.portfolio <- lapply(tweak$portfolio, function(x){x@recovery=0;return(x)})

cs <- index$cs
startdate <- tradedate + 1
pl.list <- vapply(zerorecov.portfolio, function(x) {
    pl <- defaultleg(cs, x@curve, x@recovery, startdate, TRUE)
    if(is.na(pl)) {
        logerror(paste("couldn't compute single name protection leg for", x@issuer))
        return( NA )
    }
    return( pl )
}, numeric(1))


##ITRX
tradedate <- as.Date("2017-03-31")
exportYC(tradedate, "EUR")
index <- creditIndex("XO27", "5yr")
index <- set.index.desc(index, tradedate)
index <- set.singlenamesdata(index, tradedate)
index$cs <- couponSchedule(IMMDate(tradedate, noadj=TRUE), index$maturity, "Q", "FIXED", 1,
                           0, tradedate, IMMDate(tradedate, "prev"))
index$quotes <- data.frame(maturity=as.Date("2022-06-20"), spread=0.05, price=1.0968)
tweak <- tweakcurves(index)
zerorecov.portfolio <- lapply(tweak$portfolio, function(x){x@recovery=0;return(x)})

cs <- index$cs
startdate <- tradedate + 1
pl.list <- vapply(zerorecov.portfolio, function(x) {
    pl <- defaultleg(cs, x@curve, x@recovery, startdate, TRUE)
    if(is.na(pl)) {
        logerror(paste("couldn't compute single name protection leg for", x@issuer))
        return( NA )
    }
    return( pl )
}, numeric(1))