aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--R/load_cf.R26
1 files changed, 18 insertions, 8 deletions
diff --git a/R/load_cf.R b/R/load_cf.R
index 208ef21f..23a78825 100644
--- a/R/load_cf.R
+++ b/R/load_cf.R
@@ -96,7 +96,9 @@ getdealcf <- function(dealnames, zipfiles, tradedate=Sys.Date()){
df <- data.table(Date=alldates,
Discounts=DC$discounts,
T=T, key="Date")
- cfdata[[dealname]] <- list(mv = dealdata$mv, currbal = dealdata$"Curr Collat Bal")
+ cfdata[[dealname]] <- list(mv = dealdata$mv,
+ currbal = dealdata$"Curr Collat Bal",
+ principalbal = dealdata$"Principal Bal")
if(is.na(dealdata$reinv_end_date)||!config$reinvflag){
tranches <- "COLLAT"
@@ -172,6 +174,14 @@ getdealcf <- function(dealnames, zipfiles, tradedate=Sys.Date()){
return( cfdata )
}
+getcusip_indicdata <- function(cusip, dealname, date){
+ sqlstr <- "SELECT * FROM historical_dealname_universe($1, $2)"
+ r <- dbGetQuery(etdb, sqlstr, params = list(dealname, date))
+ r <- r[order(r$curr_attach, decreasing=TRUE),]
+ r$cum_bal <- cumsum(r$curr_balance)
+ return( r[r$cusip==cusip,c("curr_balance", "orig_balance", "spread", "cum_bal")] )
+}
+
getcusipcf <- function(params, cfdata, dist, tradedate=Sys.Date()){
cusipdata <- list()
cusips <- keys(params$cusips)
@@ -196,10 +206,7 @@ getcusipcf <- function(params, cfdata, dist, tradedate=Sys.Date()){
T=T, key="Date")
r <- matrix(0, n.scenarios, 5)
colnames(r) <- fields
- sqlstring <- sprintf(paste("select curr_balance, orig_balance, spread",
- "from historical_cusip_universe('%s', '%s')"),
- cusip, tradedate)
- indicdata <- dbGetQuery(etdb, sqlstring)
+ indicdata <- getcusip_indicdata(cusip, dealname, tradedate)
flag <- TRUE
for(j in 1:n.scenarios){
filename <- sprintf("%s-CF-Scen%s.txt", cusip, j)
@@ -242,6 +249,9 @@ getcusipcf <- function(params, cfdata, dist, tradedate=Sys.Date()){
duration = crossprod(cfdata[[dealname]]$weight, r[,"duration"]),
price = 100 * crossprod(cusip.pv, cfdata[[dealname]]$weight),
delta = compute.delta(dist, cfdata[[dealname]], cusip.pv),
+ mvoc = (cfdata[[dealname]]$mv+cfdata[[dealname]]$principalbal)/
+ indicdata$cum_bal-1,
+ mvcoverage = 1+(cfdata[[dealname]]$mv-indicdata$cum_bal)/indicdata$curr_bal,
fields=r)
cat("done", cusip, "\n")
}
@@ -308,16 +318,16 @@ for(cusip in names(cusipdata)){
sqlstring <- paste0("SELECT updatedate from et_cusip_model_numbers",
" WHERE cusip=$1")
sqldata <- dbGetQuery(etdb, sqlstring, params=list(cusip))
- columns <- c("price", "wal", "duration", "delta")
+ 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))){
params <- c(values, cusip, as.character(tradedate))
sqlstring <- paste0("UPDATE et_cusip_model_numbers SET price=$1, wal=$2, duration=$3,",
- "delta=$4 WHERE cusip=$5 and updatedate=$6")
+ "delta=$4, mvoc=$5, mvcoverage=$6 WHERE cusip=$7 and updatedate=$8")
}else{
sqlstring <- paste0("INSERT INTO et_cusip_model_numbers ",
- "VALUES($1, $2, $3, $4, $5, $6)")
+ "VALUES($1, $2, $3, $4, $5, $6, $7, $8)")
params <- c(cusip, values, as.character(tradedate))
}