diff options
Diffstat (limited to 'R/load_cf.R')
| -rw-r--r-- | R/load_cf.R | 143 |
1 files changed, 142 insertions, 1 deletions
diff --git a/R/load_cf.R b/R/load_cf.R index ebd8956b..2bdc4ea0 100644 --- a/R/load_cf.R +++ b/R/load_cf.R @@ -32,6 +32,7 @@ L6m <- buildMarkitYC(MarkitData, dt = 1/2) L12m <- buildMarkitYC(MarkitData, dt = 1)
setEvaluationDate(as.Date(MarkitData$effectiveasof))
dm <- 0
+
sanitize.column <- function(vec){
vec <- gsub(",", "", vec)
index <- grep("\\(", vec)
@@ -54,6 +55,146 @@ if(length(args)>=2){ dealnames <- tolower(dealnames)
}
+processzipfiles <- function(){
+ zipfiles <- file.path(pricesdir, list.files(pricesdir, "*.zip"))
+ zipfiles <- zipfiles[order[file.info(zipfiles)$ctime]]
+ colnames <- paste0("column",1:20)
+ result <- data.frame()
+ r <- list()
+ for(zip in zipfiles){
+ for(i in 1:100){
+ conn <- unz(file.path(pricesdir, zipfiles), 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
+ }
+ tb <- rbindlist(r)
+ tb <- tb[Dealname!="TOTAL"]
+ setkey(Dealname)
+ }
+ if(tb[,Dealname]){
+
+ }
+ setkey(tb, "Dealname", "Scenario")
+ return(tb)
+}
+
+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)
+ cfdata <- list()
+ n.scenarios <- 100
+ alldates <- unique(tb$Date)
+ futuredates <- alldates[alldates>=L3m$params$tradeDate]
+ pastdates <- alldates[alldates<L3m$params$tradeDate]
+ DC <- DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(L3m$params$tradeDate, futuredates))
+
+ df <- data.table(Date=c(pastdates, futuredates),
+ Discounts=c(rep(1, length(pastdates)), DC$discounts))
+ setkey(df, "Date")
+ data <- tb[df][, list(Cashflow=sum(Discounts * Cashflow),
+ Principal=sum(Discounts * Principal),
+ Interest=sum(Discounts * Interest)), by="Dealname,Scenario"]
+ setkey(data, "Dealname")
+ for(dealname in dealnames){
+ dealname.split <- unlist(strsplit(dealname, ","))
+ dealname.short <- tolower(dealname.split[1])
+ tranche <- dealname.split[2]
+ cfdata[[dealname.short]] <- list()
+ sqlstring <- sprintf("select marketvalue from latest_deal_model_numbers where dealname='%s'",
+ dealname.short)
+ mv <- dbGetQuery(dbCon, sqlstring)$marketvalue
+ cfdata[[dealname.short]]$mv <- mv
+ sqlstring <- sprintf(paste0("select \"Curr Collat Bal\", \"Reinv End Date\" from ",
+ "latest_clo_universe where dealname='%s'"), dealname)
+ sqldata <- dbGetQuery(dbCon, sqlstring)
+ cfdata[[dealname.short]]$currbal <- sqldata$"Curr Collat Bal"
+ }
+ dealnames <- unique(tolower(unlist(lapply(strsplit(dealnames, ","), function(x){x[1]}))))
+ for(dealname in dealnames){
+ 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")
+ }
+ return( cfdata )
+}
+
+getcusipcf2 <- function(tb, cfdata, dist, workdate=Sys.Date()){
+ uniqdealnames <- unique(tb[,Dealname])
+ uniqdealnames <- uniqdealnames[uniqdealnames!="TOTAL"]
+ cusips <- grep("COLLAT", uniqdealnames, invert=TRUE, value=TRUE)
+ dealnames <- dealnamefromcusip(cusips)
+ n.scenarios <- 100
+ cusipdata <- list()
+ intexfields <- quote(list(Cashflow, Principal, Interest, Balance, `Accum Interest Shortfall`))
+ fields <- c("Cashflow", "Principal", "Interest")
+ for(i in 1:length(cusips)){
+ cusip <- cusips[i]
+ dealname <- dealnames[i]
+ dealdata <- getdealdata(dealname)
+ schedule <- getdealschedule(dealdata)
+ r <- matrix(0, n.scenarios, 5)
+ colnames(r) <- c(fields, "wal", "duration")
+ sqlstring <- sprintf("select curr_balance, spread from latest_cusip_universe where cusip = '%s'", cusip)
+ indicdata <- dbGetQuery(dbCon, sqlstring)
+ cusipdata[[cusip]]$currbal <- indicdata$curr_balance
+ cusipdata[[cusip]]$spread <- indicdata$spread
+ alldates <- unique(tb[cusip,Date]$Date)
+ futuredates <- alldates[alldates>=L3m$params$tradeDate]
+ pastdates <- alldates[alldates<L3m$params$tradeDate]
+ DC <- DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(L3m$params$tradeDate, futuredates))
+ df <- data.table(Date=c(pastdates, futuredates),
+ Discounts=c(rep(1, length(pastdates)), DC$discounts))
+ setkey(df, "Date")
+ for(j in 1:n.scenarios){
+ data <- tb[J(cusip,j), list(Date, Cashflow, Principal, Interest,
+ Balance, `Accum Interest Shortfall`)]
+ setkey(data, "Date")
+ data <- data[df]
+ pv <-crossprod(data$Discounts, as.matrix(data[,list(Cashflow, Principal, Interest)]))
+ data[,Balance:=pmax(data[,Balance]-data[,`Accum Interest Shortfall`], 0)]
+ T <- yearFrac(workdate, data$Date)
+ wal <- crossprod(yearFrac(workdate, data$Date)[-1], -diff(data[,Balance]))/
+ indicdata$curr_balance
+ if(pv[1] == 0){
+ duration <- 0
+ }else{
+ duration <- crossprod(data[,Cashflow], data[,Discounts] * T)/pv[1]
+ }
+ r[j,] <- c(pv, wal, duration)
+ }
+ val <- crossprod(cfdata[[dealname]]$weight, r[,c("Cashflow", "wal", "duration")])
+ cusipdata[[cusip]] <- c(cusipdata[[cusip]],
+ fields = r,
+ price = 100 * val[,"Cashflow"]/cusipdata[[cusip]]$currbal,
+ wal = val[,"wal"],
+ duration = val[,"duration"],
+ delta = compute.delta(dist, cfdata[[dealname]]$weight,
+ r[,"Cashflow"]/cusipdata[[cusip]]$currbal, workdate))
+ cat("done", cusip, "\n")
+ }
+ return(cusipdata)
+}
+
getdealcf <- function(dealnames, workdate=Sys.Date()){
cfdata <- list()
fields <- c("Cashflow", "Principal", "Interest")
@@ -153,10 +294,10 @@ getdealcf <- function(dealnames, workdate=Sys.Date()){ cf <- cfdata[[dealname]][[tranches]][,"Cashflow"]
}
cfdata[[dealname]]$wapbasis <- (mean(cf)- cfdata[[dealname]]$mv)/cfdata[[dealname]]$mv
- cat(dealname, "\n")
program <- KLfit(t(cf)/1e8, rep(1/n.scenarios, n.scenarios),
cfdata[[dealname]]$mv/1e8)
cfdata[[dealname]]$weight <- program$weight
+ cat(dealname, "\n")
}
return( cfdata )
}
|
