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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
if(.Platform$OS.type == "unix"){
root.dir <- "/home/share/CorpCDOs"
}else{
root.dir <- "//WDSENTINEL/share/CorpCDOs"
}
options(stringsAsFactors = FALSE)
source(file.path(root.dir, "code", "R", "yieldcurve.R"))
source(file.path(root.dir, "code", "R", "optimization.R"))
source(file.path(root.dir, "code", "R", "calibration.R"), chdir=TRUE)
source(file.path(root.dir, "code", "R", "mlpdb.R"))
library(lossdistrib)
n.int <- 250
list2env(GHquad(n.int), envir=parent.frame())
Ngrid <- 201
#parse command line arguments
args <- commandArgs(trailingOnly=TRUE)
index.name <- args[1]
if(length(args)>=2&&args[2]!="update"){
tenor <- args[2]
}else{
tenor <- "5yr"
}
updateflag <- args[length(args)]=="update"
if(updateflag){##ghetto way of getting the last row of the file
runfile <- read.csv(file.path(root.dir,"Tranche_data","Runs", paste(index.name,tenor,"csv",sep=".")))
begin.date <- as.Date(runfile[nrow(runfile),1])+1
}else{
begin.date <- switch(index.name,
hy10 = as.Date("2014-08-11"),
hy15 = as.Date("2014-06-10"),
hy17 = as.Date("2013-01-01"),
hy19 = as.Date("2013-02-01"),
hy21 = as.Date("2013-10-04"),
ig9 = as.Date("2013-01-01"),
ig19 = as.Date("2013-05-01"),
ig21 = as.Date("2013-09-26"))
}
alldates <- seq(begin.date, Sys.Date()-1, by="1 day")
if(index.name=="ig19"){
alldates <- alldates[alldates!=as.Date("2013-11-29")] ##people are lazy the day after Thanksgiving
}
bus.dates <- as.Date(names(which(isBusinessDay(calendar="UnitedStates/GovernmentBond", alldates))))
##check if we have all the quotes and save them
n.tranches <- 4
if(index.name=="ig9"){
n.tranches <- 6
}
quotes <- matrix(0, length(bus.dates), 2+2*n.tranches)
for(j in seq_along(bus.dates)){
tradedate <- bus.dates[j]
index <- load.index(index.name, tradedate, tenor, Z, w, Ngrid)
temp <- get.tranchequotes(index$name, index$tenor, tradedate)
quotes[j, 1] <- temp$indexrefprice[1]
quotes[j, 2] <- temp$indexrefspread[1]
quotes[j, 2+1:n.tranches] <- temp$trancheupfront
quotes[j, 2+n.tranches+1:n.tranches] <- temp$tranchedelta
}
tranche.names <- paste(temp$attach, temp$detach, sep="-")
colnames(quotes) <- c("indexprice", "indexref",paste(tranche.names, "Upfront"),
paste(tranche.names, "Dealer Delta"))
Attach <- temp$detach
#preallocate all the risk matrices
indexEL <- rep(0, length(bus.dates))
indexTheta <- rep(0, length(bus.dates))
deltas <- matrix(0, length(bus.dates), n.tranches)
gammas <- matrix(0, length(bus.dates), n.tranches)
thetas <- matrix(0, length(bus.dates), n.tranches)
rhos <- matrix(0, length(bus.dates), n.tranches)
corr01 <- matrix(0, length(bus.dates), n.tranches)
durations <- matrix(0, length(bus.dates), n.tranches)
ELmat <- matrix(0, length(bus.dates), n.tranches)
for(i in seq_along(bus.dates)){
tradedate <- bus.dates[i]
exportYC(tradedate)
index <- load.index(index.name, tradedate, tenor, Z, w, Ngrid)
## calibrate the single names curves
index <- set.singlenamesdata(index, tradedate)
index <- set.tranchedata(index, tradedate)
indexEL[i] <- EL(index)
indexTheta[i] <- indextheta(index, tradedate)
## calibrate the tranches using base correlation
index$rho <- build.skew(index)
temp <- BCtranche.delta(index, tradedate)
deltas[i,] <- temp$deltas
gammas[i,] <- temp$gammas
thetas[i,] <- BCtranche.theta(index)$theta
rhos[i,] <- index$rho[-1]
corr01[i,] <- BCtranche.corr01(index)
temp <- BCtranche.pv(index, protection=TRUE)
durations[i,] <- (temp$cl-cdsAccrued(tradedate, index$tranche.running))/index$tranche.running
ELmat[i,] <- -temp$pl*diff(index$K)
print(tradedate)
}
risk.numbers <- data.frame(deltas, gammas, thetas, rhos, corr01, durations, EL)
colnames(risk.numbers) <- c(paste(tranche.names, "Model Delta"),
paste(tranche.names, "Gamma"),
paste(tranche.names, "Theta"),
paste(Attach, "Corr"),
paste(tranche.names, "Corr01"),
paste(tranche.names, "Dur"),
paste(tranche.names, "EL"))
data <- cbind(bus.dates, quotes, indexEL, indexTheta, risk.numbers)
colnames(data)[1] <- "date"
write.table(data, file=file.path(root.dir,"Tranche_data","Runs", paste(index.name,tenor,"csv",sep=".")),
append=updateflag, col.names=!updateflag, qmethod="double", sep=",", row.names=FALSE)
|