diff options
| -rw-r--r-- | R/load_cf.R | 104 |
1 files changed, 1 insertions, 103 deletions
diff --git a/R/load_cf.R b/R/load_cf.R index bdcf29da..2bc37bc8 100644 --- a/R/load_cf.R +++ b/R/load_cf.R @@ -50,42 +50,6 @@ processzipfiles <- function(workdate=Sys.Date()){ pricesdir <- file.path(root.dir, "Scenarios", paste0("Prices_", workdate))
zipfiles <- file.path(pricesdir, list.files(pricesdir, "*.zip"))
zipfiles <- zipfiles[order(file.info(zipfiles)$ctime)]
- colnames <- paste0("column",1:20)
- tb <- list()
- for(n in seq_along(zipfiles)){
- zip <- zipfiles[n]
- r <- list()
- for(i in 1:100){
- conn <- unz(zip, filename=sprintf("CF-Scen%s.txt", i))
- data <- read.table(conn, sep="\t", header=F, colClasses="character", col.names=colnames,
- comment.char="", fill=TRUE, stringsAsFactors=F)
- newcolnames <- data[1,]
- newcolnames <- newcolnames[newcolnames!=""]
- data <- data[-1,1:length(newcolnames)]
- colnames(data) <- newcolnames
- cleandata <- data.table(Dealname = data[,1], Date=as.Date(data$Date, "%b %d, %Y"),
- Cashflow=sanitize.column(data$Cashflow),
- Principal = sanitize.column(data$Principal),
- Interest = sanitize.column(data$Interest),
- Balance = sanitize.column(data$Balance),
- `Accum Interest Shortfall` = sanitize.column(data$`Accum Interest Shortfall`),
- Scenario=i)
- r[[paste0("Scen",i)]] <- cleandata
- }
- r <- rbindlist(r)
- r <- r[Dealname!="TOTAL"]
- if(n==1){
- tb <- r
- }else{
- tb <- rbind(tb, r)
- }
- }
- return(tb)
-}
-processzipfiles2 <- function(workdate=Sys.Date()){
- pricesdir <- file.path(root.dir, "Scenarios", paste0("Prices_", workdate))
- zipfiles <- file.path(pricesdir, list.files(pricesdir, "*.zip"))
- zipfiles <- zipfiles[order(file.info(zipfiles)$ctime)]
for(n in seq_along(zipfiles)){
zip <- zipfiles[n]
allfiles <- unzip(zip, list=TRUE)$Name
@@ -110,72 +74,6 @@ processzipfiles2 <- function(workdate=Sys.Date()){ return(list(dealnames=dealnames.hash, cusips=cusips.hash, zipfiles=zipfiles))
}
-getdealcf2 <- function(tb){
- uniqdealnames <- unique(tb[,Dealname])
- uniqdealnames <- uniqdealnames[uniqdealnames!="TOTAL"]
- dealnames <- grep("COLLAT", uniqdealnames, value=TRUE)
- cusips <- grep("COLLAT", uniqdealnames, invert=TRUE, value=TRUE)
- alldates <- unique(tb$Date)
- n.scenarios <- 100
- T <- ifelse(alldates>=L3m$params$tradeDate, yearFrac(L3m$params$tradeDate, alldates), 0)
- DC <- DiscountCurve(L3m$params, L3m$tsQuotes, T)
- df <- data.table(Date=alldates,
- Discounts=DC$discounts,
- T=T)
- setkey(df, Date)
- setkey(tb, Date)
- tb[,Balance:=max(Balance-`Accum Interest Shortfall`, 0), by=1:nrow(tb)]
- sqlstring <- sprintf(paste("select cusip, dealname, curr_balance, spread from historical_cusip_universe",
- "where cusip in ('%s')"), paste(cusips, collapse="','"))
- cusipdata <- data.table(dbGetQuery(dbCon, sqlstring), key="cusip")
- data <- tb[df][,list(Cashflow=temp <- sum(Cashflow*Discounts),
- Principal=sum(Principal*Discounts),
- Interest=sum(Interest*Discounts),
- wal=sum(-diff(Balance)*T[-1])/cusipdata[Dealname]$curr_balance,
- duration=if(temp==0) 0 else sum(Cashflow * Discounts * T)/temp
- ), by=list(Dealname,Scenario)]
-
- setkey(data, "Dealname")
- cfdata <- list()
- for(dealname in dealnames){
- dealname.split <- unlist(strsplit(dealname, ","))
- dealname.short <- tolower(dealname.split[1])
- tranche <- dealname.split[2]
- if(is.null(cfdata[[dealname.short]])){
- sqlstring <- sprintf("select marketvalue from latest_deal_model_numbers where dealname='%s'",
- dealname.short)
- mv <- dbGetQuery(dbCon, sqlstring)$marketvalue
- sqlstring <- sprintf(paste0("select \"Curr Collat Bal\", \"Reinv End Date\" from ",
- "latest_clo_universe where dealname='%s'"), dealname.short)
- currbal <- dbGetQuery(dbCon, sqlstring)$"Curr Collat Bal"
- cfdata[[dealname.short]] <- list(currbal = currbal,
- mv = mv)
- }
- cfdata[[dealname.short]][[tranche]] <- data[dealname]
- }
- for(dealname in names(cfdata)){
- cf <- rep(0, n.scenarios)
- for(name in grep("COLLAT", names(cfdata[[dealname]]), value=TRUE)){
- cf <- cf + cfdata[[dealname]][[name]][,Cashflow]
- }
- cfdata[[dealname]]$wapbasis <- (mean(cf)- cfdata[[dealname]]$mv)/cfdata[[dealname]]$mv
- program <- KLfit(t(cf)/1e8, rep(1/n.scenarios, n.scenarios),
- cfdata[[dealname]]$mv/1e8)
- cfdata[[dealname]]$weight <- program$weight
- cat(dealname, "\n")
- }
- setnames(cusipdata, "cusip", "Dealname")
- cusipdata <- data[cusipdata,list(Cashflow=temp <- sum(cfdata[[dealname]]$weight * Cashflow),
- wal = sum(cfdata[[dealname]]$weight * wal),
- duration = sum(cfdata[[dealname]]$weight * duration),
- price = 100 * temp/curr_balance,
- delta = compute.delta(dist, cfdata[[dealname]]$weight,
- Cashflow/curr_balance, workdate)
- )]
- return( list(cusipdata, cfdata) )
-}
-
-
getdealcf <- function(params, workdate=Sys.Date()){
cfdata <- list()
fields <- c("Cashflow", "Principal", "Interest")
@@ -348,7 +246,7 @@ if(length(args)>=2){ cusips <- args[-1]
dealnames <- unique(dealnamefromcusip(cusips))
}else{
- params <- processzipfiles2(workdate)
+ params <- processzipfiles(workdate)
}
cfdata <- getdealcf(params, workdate)
|
