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
|
if(.Platform$OS.type == "unix"){
root.dir <- "/home/share/CorpCDOs"
}else{
root.dir <- "//WDSENTINEL/share/CorpCDOs"
}
source(file.path(root.dir, "code", "R", "yieldcurve.R"))
workdate <- as.Date("2013-01-22")
MarkitData <- getMarkitIRData(as.Date(workdate))
L1m <- buildMarkitYC(MarkitData, dt = 1/12)
L2m <- buildMarkitYC(MarkitData, dt = 1/6)
L3m <- buildMarkitYC(MarkitData)
L6m <- buildMarkitYC(MarkitData, dt = 1/2)
L12m <- buildMarkitYC(MarkitData, dt = 1)
setEvaluationDate(as.Date(MarkitData$effectiveasof))
sanitize.column <- function(vec){
vec <- gsub(",", "", vec)
index <- grep("\\(", vec)
for(l in index){
vec[l] <- -as.numeric(substr(vec[l], 2, nchar(vec[l])-1))
}
return( as.numeric(vec) )
}
fields <- c("Cashflow", "Principal", "Interest")
tranches <- c("COLLAT_REINVEST", "COLLAT_INITIAL")
n.scenarios <- 100
cfdata <- list()
dealnames <- list.files(file.path(root.dir, "Scenarios", paste0("Intex curves_", workdate), "csv"), "*.RData")
dealnames <- sapply(strsplit(dealnames, "\\."), function(x) x[1])
flag <- FALSE
for(dealname in dealnames){
cfdata[[dealname]] <- list()
r <- matrix(0, n.scenarios, 3)
colnames(r) <- fields
sqlstring <- sprintf("select marketvalue from latest_deal_model_numbers where dealname='%s'", dealname)
mv <- dbGetQuery(dbCon, sqlstring)$marketvalue
sqlstring <- sprintf("select \"Curr Collat Bal\" from latest_clo_universe where dealname='%s'", dealname)
currbal <- dbGetQuery(dbCon, sqlstring)$"Curr Collat Bal"
cfdata[[dealname]]$mv <- mv
cfdata[[dealname]]$currbal <- currbal
for(tranche in tranches){
for(i in 1:n.scenarios){
filename <- paste0(paste(toupper(dealname), tranche, "CF", paste0("Scen", i), sep="-"), ".txt")
data <- read.table(file.path(root.dir, "Scenarios", paste0("Prices_", workdate), filename),
sep="\t", header=T)
data <- data[-(1:2),1:4]
data$Date <- as.Date(data$Date, "%b %d, %Y")
if(any(is.na(data$Date))){
sprintf("file: %s is messed up", filename)
flag <- TRUE
break
}
data <- data[data$Date >= today(),]
DC <- DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(L3m$params$tradeDate, data$Date))
pv <- c()
for(field in fields){
data[,field] <- sanitize.column(data[,field])
pv <- c(pv, crossprod(DC$discounts, data[,field]))
}
r[i,] <- pv
}
if(flag){
cfdata[[dealname]] <- NULL
flag <- FALSE
break
}else{
cfdata[[dealname]][[tranche]]<- r
}
}
}
r <- c()
for(dealname in dealnames){
r <- rbind(r, c(cfdata[[dealname]]$mv, cfdata[[dealname]]$currbal, apply(cfdata[[dealname]]$COLLAT_REINVEST, 2, mean)[1], apply(cfdata[[dealname]]$COLLAT_INITIAL, 2, mean)[1]))
}
colnames(r) <- c("mv", "currbal", "Reinvest", "Initial")
rownames(r) <- dealnames
|