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
|
library("RQuantLib")
library("yaml")
args <- commandArgs(trailingOnly=TRUE)
if(.Platform$OS.type == "unix"){
root.dir <- "/home/share/CorpCDOs"
}else{
root.dir <- "//WDSENTINEL/share/CorpCDOs"
}
source(file.path(root.dir, "code", "R", "intex_deal_functions.R"))
source(file.path(root.dir, "code", "R", "index_definitions.R"))
source(file.path(root.dir, "code", "R", "cds_utils.R"))
source(file.path(root.dir, "code", "R", "cds_functions_generic.R"))
if(length(args) >=2){
argslist <- strsplit(args[-1], ",")
dealnames <- unlist(lapply(argslist, function(x)x[1]))
reinvflags <- unlist(lapply(argslist, function(x)x[2]))
}else{
data <- read.table(file.path(root.dir, "scripts", "deals_to_price.txt"),
colClasses=c("character", "logical"))
dealnames <- data$V1
reinvflags <- data$V2
}
if(length(args) >= 1){
workdate <- as.Date(args[1])
}else{
workdate <- Sys.Date()
}
calibration.date <- prevBusDay(workdate)
MarkitData <- getMarkitIRData(calibration.date)
futurequotes <- read.csv(file.path(root.dir, "data", "Yield Curves",
sprintf("futures-%s.csv", calibration.date)), header=F)
setEvaluationDate(as.Date(MarkitData$effectiveasof))
setCalendarContext("UnitedStates/GovernmentBond")
L1m <- buildMarkitYC(MarkitData, futurequotes[,2], dt = 1/12)
L2m <- buildMarkitYC(MarkitData, futurequotes[,2], dt = 1/6)
L3m <- buildMarkitYC(MarkitData, futurequotes[,2])
L6m <- buildMarkitYC(MarkitData, futurequotes[,2], dt = 1/2)
L12m <- buildMarkitYC(MarkitData, futurequotes[,2], dt = 1)
global.params <- yaml.load_file(file.path(root.dir, "code", "R", "params.yml"))
cusipdata <- cusip.data()
cashspread.discount <- 0
currdealnames <- dbGetQuery(dbCon, "select updatedate, dealname from latest_deal_model_numbers")
## build portfolio data
for(i in seq_along(dealnames)){
deal.name <- dealnames[i]
if(exists("disablereinvflags")){
global.params$reinvflag <- reinvflags[i]
}
if(is.na(deal.name)){
next
}
deal.data <- getdealdata(deal.name, calibration.date)
if(is.na(deal.data$"Reinv End Date")){
global.params$reinvflag <- FALSE
}
if(deal.data$"Curr Collat Bal" < 1 ||is.na(deal.data$maturity)||deal.data$maturity <= Sys.Date()+90){
next
}
deal.portfolio <- buildSC.portfolio(deal.name, deal.data, cusipdata, global.params, workdate)
##deal.portfolio$SC <- tweakportfolio(deal.portfolio$SC, -cashspread.discount, multiplicative=FALSE)
A <- SPmatrix2(deal.portfolio$SC, deal.data, freq="3 months", workdate)
S <- 1 - sapply(deal.portfolio$SC, attr, "recov")
deal.weights <- deal.portfolio$notional/sum(deal.portfolio$notional)
deal.dates <- getdealschedule(deal.data)
deal.spread5y <- portfoliospread(deal.portfolio, hy21$maturity)
deal.spreadatmaturity <- portfoliospread(deal.portfolio)
save.dir <- file.path(root.dir, "Scenarios", paste("Portfolios", workdate, sep="_"))
if(!file.exists(save.dir)){
dir.create(save.dir)
}
save(deal.portfolio, A, S, deal.weights, deal.dates, deal.spread5y,
deal.spreadatmaturity, deal.data, file=file.path(save.dir, paste0(deal.name, ".RData")))
cat(deal.name, "... done\n")
dealupdatedate <- currdealnames$updatedate[currdealnames$dealname %in% deal.name]
if(length(dealupdatedate) && dealupdatedate == workdate){
sqlstring <- sprintf(
paste0("UPDATE et_deal_model_numbers SET dealspread5y = %s,",
"dealspread = %s, cdopercentage = %s, stalepercentage= %s, ",
"marketvalue = %s",
"WHERE dealname= '%s' and updatedate = '%s'"),
deal.spread5y,
deal.spreadatmaturity,
deal.portfolio$cdopercentage,
deal.portfolio$stale,
crossprod(deal.portfolio$notional, deal.portfolio$price)/100,
deal.name,
as.Date(workdate))
dbSendQuery(dbCon, sqlstring)
}else{
sqlstring <- sprintf(paste0("INSERT INTO et_deal_model_numbers",
"(dealname, cdopercentage, stalepercentage,",
"dealspread5y, marketvalue, updatedate, dealspread) ",
"VALUES('%s', %s, %s, %s, %s, '%s', %s)"),
deal.name,
deal.portfolio$cdopercentage,
deal.portfolio$stale,
deal.spread5y,
crossprod(deal.portfolio$notional, deal.portfolio$price)/100,
workdate,
deal.spreadatmaturity
)
dbSendQuery(dbCon, sqlstring)
currdealnames <- c(currdealnames, deal.name)
}
}
|