aboutsummaryrefslogtreecommitdiffstats
path: root/R/load_cf.R
diff options
context:
space:
mode:
Diffstat (limited to 'R/load_cf.R')
-rw-r--r--R/load_cf.R66
1 files changed, 39 insertions, 27 deletions
diff --git a/R/load_cf.R b/R/load_cf.R
index a7ff824e..a2454943 100644
--- a/R/load_cf.R
+++ b/R/load_cf.R
@@ -4,6 +4,8 @@ library(hash)
library(readr)
library(dplyr)
library(data.table)
+library(logging)
+basicConfig()
args <- commandArgs(trailingOnly=TRUE)
root.dir <- if(.Platform$OS.type == "unix"){
@@ -87,7 +89,7 @@ getdealcf <- function(dealnames, zipfiles, tradedate=Sys.Date()){
file.copy(zip, tmp)
zip <- tmp
for(dealname in indextodealnames[[k]]){
- cat("processing", dealname, "\n")
+ loginfo(paste("processing", dealname))
dealdata <- getdealdata(dealname, tradedate)
alldates <- getdealschedule(dealdata, "1 month")
config <- getconfig(dealname, tradedate)
@@ -125,13 +127,13 @@ getdealcf <- function(dealnames, zipfiles, tradedate=Sys.Date()){
conn <- unz(zip, filename)
data <- tryCatch(read_tsv(conn, col_types= ct),
warning=function(w){
- message(conditionMessage(w))
+ logwarning(conditionMessage(w))
NULL},
error=function(e){
- message(conditionMessage(e))
+ logerror(conditionMessage(e))
NULL})
if(is.null(data)||nrow(data)<2){
- cat(dealname, i, tranche, "\n")
+ loginfo(paste(dealname, i, tranche))
break
flag <- FALSE
}
@@ -141,7 +143,7 @@ getdealcf <- function(dealnames, zipfiles, tradedate=Sys.Date()){
data[,`:=`(Cashflow = sanitize.column(Cashflow),
Principal = sanitize.column(Principal))]
}, warning=function(w){
- message(conditionMessage(w))
+ logwarning(conditionMessage(w))
NULL})
data <- df[data, roll=TRUE]
data$Discounts[is.na(data$Discounts)] <- 1
@@ -165,16 +167,16 @@ getdealcf <- function(dealnames, zipfiles, tradedate=Sys.Date()){
cf <- cf-min(dealdata$"Principal Bal", 0)
cfdata[[dealname]]$price <- cf/dealdata$mv
cfdata[[dealname]]$wapbasis <- (mean(cf)- dealdata$mv)/dealdata$mv
- program <- tryCatch(KLfit(t(cf)/1e8, rep(1/n.scenarios, n.scenarios),
- dealdata$mv/1e8), error=function(e) e)
- if(inherits(program, "error")){
- cat("error computing the weights for deal:", dealname,"\n")
- cfdata[[dealname]] <- NULL
- next
- }else{
- cfdata[[dealname]]$weight <- program$weight
- cat(dealname, "\n")
- }
+ cfdata[[dealname]]$weight
+ cfdata[[dealname]] <- tryCatch({cfdata[[dealname]]$weight <-
+ KLfit(t(cf)/1e8, rep(1/n.scenarios, n.scenarios),
+ dealdata$mv/1e8)$weight;
+ loginfo(dealname);
+ cfdata[[dealname]]},
+ error = function(e) {
+ logerror(cat("error computing the weights for deal:", dealname))
+ NULL
+ })
}
unlink(tmp)
}
@@ -183,13 +185,15 @@ getdealcf <- function(dealnames, zipfiles, tradedate=Sys.Date()){
getcusip_indicdata <- function(Cusip, dealname, date){
sqlstr <- "SELECT DISTINCT isin FROM cusip_universe WHERE cusip=$1"
- r <- dbGetQuery(etdb, sqlstr, params=list(Cusip))
+ r <- tryCatch(dbGetQuery(etdb, sqlstr, params=list(Cusip)),
+ error = function(w) logerror(w$message))
if(length(r$isin)>1){
stop("We have a problem")
}
isinval <- r$isin[1]
sqlstr <- "SELECT * FROM historical_dealname_universe($1, $2)"
- r <- dbGetQuery(etdb, sqlstr, params = list(dealname, date))
+ r <- tryCatch(dbGetQuery(etdb, sqlstr, params = list(dealname, date)),
+ error = function(w) logerror(w$message))
if(!is.na(isinval)){
return(r %>% group_by(isin) %>% slice(1) %>%
summarize(cusip, curr_balance, orig_balance, spread, curr_attach) %>%
@@ -214,7 +218,7 @@ getcusipcf <- function(params, cfdata, dist, tradedate=Sys.Date()){
fields <- c("Cashflow", "Principal", "Interest", "wal", "duration")
for(i in 1:length(cusips)){
cusip <- cusips[i]
- cat("processing", cusip, "\n")
+ loginfo(paste("processing", cusip))
zip <- params$zipfiles[params$cusips[[cusip]]]
dealname <- dealnames[i]
dealdata <- getdealdata(dealname, tradedate)
@@ -273,7 +277,7 @@ getcusipcf <- function(params, cfdata, dist, tradedate=Sys.Date()){
indicdata$cum_bal-1,
mvcoverage = 1+(cfdata[[dealname]]$mv+cfdata[[dealname]]$principalbal-indicdata$cum_bal)/indicdata$curr_balance,
fields=r)
- cat("done", cusip, "\n")
+ loginfo(paste("done", cusip))
}
}
@@ -324,9 +328,12 @@ save(cusipdata, cfdata, file=file.path(save.dir, "cashflows.RData"),
sqlstring <- paste0("UPDATE et_deal_model_numbers SET ",
"wapbasis = $1 WHERE dealname= $2 AND updatedate = $3")
for(dealname in names(cfdata)){
- r <- dbSendQuery(etdb, sqlstring, params = list(cfdata[[dealname]]$wapbasis*100,
- dealname,
- tradedate))
+ r <- tryCatch(dbSendQuery(etdb, sqlstring, params = list(cfdata[[dealname]]$wapbasis*100,
+ dealname,
+ tradedate)),
+ error = function(w) {
+ logerror(w$message)
+ })
dbClearResult(r)
}
@@ -335,7 +342,8 @@ dawndb <- dbConn("dawndb")
for(cusip in names(cusipdata)){
sqlstring <- paste0("SELECT updatedate from et_cusip_model_numbers",
" WHERE cusip=$1")
- sqldata <- dbGetQuery(etdb, sqlstring, params=list(cusip))
+ sqldata <- tryCatch(dbGetQuery(etdb, sqlstring, params=list(cusip)),
+ error = function(w) logerror(w$message))
columns <- c("price", "wal", "duration", "delta", "mvoc", "mvcoverage")
values <- cusipdata[[cusip]][match(columns, names(cusipdata[[cusip]]))]
if(nrow(sqldata) && (tradedate %in% as.Date(sqldata$updatedate))){
@@ -349,10 +357,12 @@ for(cusip in names(cusipdata)){
paste(names(params), collapse=","),
paste(paste0("$", 1:length(params)), collapse=","))
}
- r <- dbSendQuery(etdb, sqlstring, params=params)
+ r <- tryCatch(dbSendQuery(etdb, sqlstring, params=params),
+ error = function(w) cat(w$message))
dbClearResult(r)
- identifier <- dbGetQuery(dawndb, "SELECT identifier from securities WHERE cusip=$1",
- params=list(cusip))
+ identifier <- tryCatch(dbGetQuery(dawndb, "SELECT identifier from securities WHERE cusip=$1",
+ params=list(cusip)),
+ error = function(w) logerror(w$message))
identifier <- if(nrow(identifier)>0) identifier$identifier else NULL
if(!is.null(identifier)){
if(nrow(sqldata) && (tradedate %in% as.Date(sqldata$updatedate))){
@@ -365,7 +375,9 @@ for(cusip in names(cusipdata)){
"VALUES($1, $2, $3, $4, $5, $6, $7)")
params <- c(identifier, as.character(tradedate), 'HY', values[1:4])
}
- r <- dbSendQuery(dawndb, sqlstring, params=params)
+
+ r <- tryCatch(dbSendQuery(dawndb, sqlstring, params=params),
+ error = function(w) logerror(w$message))
dbClearResult(r)
}
}