aboutsummaryrefslogtreecommitdiffstats
path: root/R/test.cds_functions.R
blob: c30651ba755b81bc2f6956c8effc4cfefff46cb5 (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
library("RUnit")
root = "//WDSENTINEL/share/CorpCDOs/R"
source(file.path(root, "yieldCurve.R"))
source(file.path(root, "cds_functions.R"))

#unit tests
cs <- couponSchedule(as.Date("2012-09-28"), as.Date("2016-04-22"),"Q", "FLOAT", 0.075,0.0703)
#test that the curve version gives the same result as the flat version for flat curves
h <- rep(0.05, nrow(cs))
dpc <- new("defaultprepaycurve", dates=cs$dates, hazardrates=h)
eps <- 1e-6
test.flat <- function() {
    checkEquals(contingentleg.flat(cs, 0.05, 0.7), contingentleg(cs, dpc, 0.7))
}
#test derivative of the flat version
test.derivativeflat <- function() {
    checkEquals((contingentleg.flat(cs, 0.05+eps, 0.7)-contingentleg.flat(cs, 0.05-eps,0.7))/(2*eps),
                dcontingentleg.flat(cs, 0.05, 0.7))
}
#test derivative of the curved version
hvec <- c(rep(0.05,5), rep(0.07, 10))
hvecplus <- c(rep(0.05,5), rep(0.07 + eps,10))
hvecminus <- c(rep(0.05, 5), rep(0.07 - eps,10))
index <- c(rep(0,5), rep(1,10))
dpc <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvec)
dpcplus <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvecplus)
dpcminus <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvecminus)

test.derivativecurve <- function() {
    checkEquals((contingentleg(cs, dpcplus, 0.7) - contingentleg(cs, dpcminus, 0.7))/(2*eps),
                dcontingentleg(cs, dpc, 0.7, index))
}
## test that the prepay version with 0 prepay is the same as the curved version
dpc <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvec, prepayrates=rep(0,nrow(cs)))
test.prepay <- function() {
    checkEquals(contingentleg(cs, dpc, 0.7),
                contingentleg.prepay(cs, dpc, 0.7))
}
## test derivative of prepay version
dpcplus <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvecplus, prepayrates=k(hvecplus))
dpcminus <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvecminus, prepayrates=k(hvecminus))
dpc <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvec, prepayrates=k(hvec))
(contingentleg.prepay(cs, dpcplus, 0.7)-contingentleg.prepay(cs, dpcminus, 0.7))/(2*bps)
dcontingentleg.prepay(cs, dpc, 0.7, index, 15)
(couponleg.prepay(cs, dpcplus)-couponleg.prepay(cs, dpcminus, 0.7))/(2*bps)
dcouponleg.prepay(cs, dpc, index, 15)