diff options
| -rw-r--r-- | R/load_cf.R | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/R/load_cf.R b/R/load_cf.R index e342a800..c97247cc 100644 --- a/R/load_cf.R +++ b/R/load_cf.R @@ -5,6 +5,7 @@ library(hash) library(data.table)
options(stringsAsFactors = FALSE)
args <- commandArgs(trailingOnly=TRUE)
+options(warn=2)
if(.Platform$OS.type == "unix"){
root.dir <- "/home/share/CorpCDOs"
@@ -107,6 +108,7 @@ getdealcf <- function(dealnames, zipfiles, tradedate=Sys.Date()){ }else{
tranches <- c("COLLAT_INITIAL", "COLLAT_REINVEST")
}
+ flag <- TRUE
for(tranche in tranches){
r <- matrix(0, n.scenarios, 3)
colnames(r) <- fields
@@ -116,6 +118,11 @@ getdealcf <- function(dealnames, zipfiles, tradedate=Sys.Date()){ conn <- unz(zip, filename)
data <- read.table(conn, sep="\t", header=TRUE, colClasses="character", comment.char="")
data <- data.table(data)
+ if(nrow(data)<2){
+ cat(dealname, i, tranche, "\n")
+ break
+ flag <- FALSE
+ }
data <- data[-c(1,2),][,`:=`(Date=as.Date(Date, "%b %d, %Y"),
Cashflow = sanitize.column(Cashflow),
Principal = sanitize.column(Principal),
@@ -125,7 +132,9 @@ getdealcf <- function(dealnames, zipfiles, tradedate=Sys.Date()){ sum(Principal*Discounts),
sum(Interest*Discounts))])
}
- cfdata[[dealname]][[tranche]] <- r
+ if(flag){
+ cfdata[[dealname]][[tranche]] <- r
+ }
}
if(length(cfdata[[dealname]])<2+length(tranches)){##meaning we existed early in the above loop
cfdata[[dealname]] <- NULL
@@ -180,13 +189,16 @@ getcusipcf <- function(params, cfdata, dist, tradedate=Sys.Date()){ sqlstring <- sprintf("select curr_balance, spread from historical_cusip_universe('%s', '%s')",
cusip, tradedate)
indicdata <- dbGetQuery(dbCon, sqlstring)
+ flag <- TRUE
for(j in 1:n.scenarios){
filename <- sprintf("%s-CF-Scen%s.txt", cusip, j)
conn <- unz(zip, filename)
data <- data.table(read.table(conn, sep="\t", header=TRUE, colClasses="character",
check.names=FALSE))
if(nrow(data)<=2){
- cat(dealname, "Scenario", j, "\n")
+ cat(cusip, "Scenario", j, "\n")
+ flag <- FALSE
+ break
}
data <- data[-c(1,2),]
data[,`:=`(Date=as.Date(Date, "%b %d, %Y"),
@@ -203,16 +215,18 @@ getcusipcf <- function(params, cfdata, dist, tradedate=Sys.Date()){ wal=sum(-diff(Balance)*T[-1])/indicdata$curr_balance,
duration=if(temp==0) 0 else sum(Cashflow * Discounts * T)/temp)])
}
- cusipdata[[cusip]] <- list(currbal=indicdata$curr_balance,
- spread=indicdata$spread,
- Cashflow=temp <- crossprod(cfdata[[dealname]]$weight, r[,"Cashflow"]),
- wal = crossprod(cfdata[[dealname]]$weight, r[,"wal"]),
- duration = crossprod(cfdata[[dealname]]$weight, r[,"duration"]),
- price = 100 * temp/indicdata$curr_balance,
- delta = compute.delta(dist, cfdata[[dealname]],
- r[,"Cashflow"]/indicdata$curr_balance),
- fields=r)
- cat("done", cusip, "\n")
+ if(flag){
+ cusipdata[[cusip]] <- list(currbal=indicdata$curr_balance,
+ spread=indicdata$spread,
+ Cashflow=temp <- crossprod(cfdata[[dealname]]$weight, r[,"Cashflow"]),
+ wal = crossprod(cfdata[[dealname]]$weight, r[,"wal"]),
+ duration = crossprod(cfdata[[dealname]]$weight, r[,"duration"]),
+ price = 100 * temp/indicdata$curr_balance,
+ delta = compute.delta(dist, cfdata[[dealname]],
+ r[,"Cashflow"]/indicdata$curr_balance),
+ fields=r)
+ cat("done", cusip, "\n")
+ }
}
return(cusipdata)
|
