aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--R/load_cf.R106
1 files changed, 49 insertions, 57 deletions
diff --git a/R/load_cf.R b/R/load_cf.R
index 4a1b1823..e342a800 100644
--- a/R/load_cf.R
+++ b/R/load_cf.R
@@ -108,31 +108,24 @@ getdealcf <- function(dealnames, zipfiles, tradedate=Sys.Date()){
tranches <- c("COLLAT_INITIAL", "COLLAT_REINVEST")
}
for(tranche in tranches){
- cfdata[[dealname]][[tranche]] <- callCC(function(k){
- r <- matrix(0, n.scenarios, 3)
- colnames(r) <- fields
- for(i in 1:n.scenarios){
- filename <- paste0(
- paste(toupper(dealname), tranche, "CF", paste0("Scen", i), sep="-"), ".txt")
- conn <- unz(zip, filename)
- data <- read.table(conn, sep="\t", header=TRUE, colClasses="character", comment.char="")
- data <- data.table(data)
- if("Error" %in% names(data)){
- k(NULL)
- }
- ## data <- fread(file.path(root.dir, "Scenarios", paste0("Prices_", tradedate), filename),
- ## sep="\t", colClasses="character")
- data <- data[-c(1,2),][,`:=`(Date=as.Date(Date, "%b %d, %Y"),
- Cashflow = sanitize.column(Cashflow),
- Principal = sanitize.column(Principal),
- Interest = sanitize.column(Interest))]
- setkey(data, "Date")
- r[i,] <- as.numeric(df[data, roll=TRUE][,list(sum(Cashflow*Discounts),
- sum(Principal*Discounts),
- sum(Interest*Discounts))])
- }
- k(r)
- })
+ r <- matrix(0, n.scenarios, 3)
+ colnames(r) <- fields
+ for(i in 1:n.scenarios){
+ filename <- paste0(paste(toupper(dealname), tranche, "CF", paste0("Scen", i), sep="-"),
+ ".txt")
+ conn <- unz(zip, filename)
+ data <- read.table(conn, sep="\t", header=TRUE, colClasses="character", comment.char="")
+ data <- data.table(data)
+ data <- data[-c(1,2),][,`:=`(Date=as.Date(Date, "%b %d, %Y"),
+ Cashflow = sanitize.column(Cashflow),
+ Principal = sanitize.column(Principal),
+ Interest = sanitize.column(Interest))]
+ setkey(data, "Date")
+ r[i,] <- as.numeric(df[data, roll=TRUE][,list(sum(Cashflow*Discounts),
+ sum(Principal*Discounts),
+ sum(Interest*Discounts))])
+ }
+ cfdata[[dealname]][[tranche]] <- r
}
if(length(cfdata[[dealname]])<2+length(tranches)){##meaning we existed early in the above loop
cfdata[[dealname]] <- NULL
@@ -187,39 +180,38 @@ 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)
- cusipdata[[cusip]] <- callCC(function(k){
- 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))
- data <- data[-c(1,2),]
- if("Error" %in% names(data)){
- k(NULL)
- }
- data[,`:=`(Date=as.Date(Date, "%b %d, %Y"),
- Cashflow=sanitize.column(Cashflow),
- Principal=sanitize.column(Principal),
- Interest=sanitize.column(Interest),
- Balance=sanitize.column(Balance),
- `Accum Interest Shortfall`=sanitize.column(`Accum Interest Shortfall`))]
- data[,Balance:=pmax(Balance-`Accum Interest Shortfall`, 0)]
- setkey(data, "Date")
- r[j,] <- as.numeric(df[data, roll=TRUE][,list(Cashflow=temp <- sum(Cashflow*Discounts),
- Principal=sum(Principal*Discounts),
- Interest=sum(Interest*Discounts),
- wal=sum(-diff(Balance)*T[-1])/indicdata$curr_balance,
- duration=if(temp==0) 0 else sum(Cashflow * Discounts * T)/temp)])
+ 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")
}
- k(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))
- })
+ data <- data[-c(1,2),]
+ data[,`:=`(Date=as.Date(Date, "%b %d, %Y"),
+ Cashflow=sanitize.column(Cashflow),
+ Principal=sanitize.column(Principal),
+ Interest=sanitize.column(Interest),
+ Balance=sanitize.column(Balance),
+ `Accum Interest Shortfall`=sanitize.column(`Accum Interest Shortfall`))]
+ data[,Balance:=pmax(Balance-`Accum Interest Shortfall`, 0)]
+ setkey(data, "Date")
+ r[j,] <- as.numeric(df[data, roll=TRUE][,list(Cashflow=temp <- sum(Cashflow*Discounts),
+ Principal=sum(Principal*Discounts),
+ Interest=sum(Interest*Discounts),
+ 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")
}