aboutsummaryrefslogtreecommitdiffstats
path: root/R/load_cf.R
diff options
context:
space:
mode:
Diffstat (limited to 'R/load_cf.R')
-rw-r--r--R/load_cf.R35
1 files changed, 11 insertions, 24 deletions
diff --git a/R/load_cf.R b/R/load_cf.R
index d7fbe17c..35c792f2 100644
--- a/R/load_cf.R
+++ b/R/load_cf.R
@@ -84,17 +84,6 @@ getconfig <- function(dealname, workdate){
}
}
-get_dealschedule <- function(dealdata, freq="1 month"){
- if(is.null(dealdata$"Pay Day")){
- dealdata$"Pay Day" = seq(dealdata$"Deal Next Pay Date", length=2, by="-3 months")[2]
- }
- if (abs(as.numeric(dealdata$"Deal Next Pay Date"- dealdata$"Pay Day") - 90)>10){
- dealdata$"Pay Day" = seq(dealdata$"Deal Next Pay Date", length=2, by="-6 months")[2]
- }
- return(seq(dealdata$"Pay Day", dealdata$"maturity", by=freq))
-}
-
-
getdealcf <- function(dealnames, zipfiles, workdate=Sys.Date()){
cfdata <- list()
fields <- c("Cashflow", "Principal", "Interest")
@@ -102,10 +91,7 @@ getdealcf <- function(dealnames, zipfiles, workdate=Sys.Date()){
for(dealname in keys(dealnames)){
zip <- zipfiles[dealnames[[dealname]]]
dealdata <- getdealdata(dealname, workdate)
- ## to get the list of payment dates, we backtrack a little bit, because sometimes the first
- ## date in intex vector is pre current date.
- ## we also add some wiggle room at the end to make sure we're not missing one date
- alldates <- get_dealschedule(dealdata, "1 month")
+ alldates <- getdealschedule(dealdata, "1 month")
config <- getconfig(dealname, workdate)
T <- ifelse(alldates>=L3m$params$tradeDate, yearFrac(L3m$params$tradeDate, alldates), 0)
@@ -140,9 +126,9 @@ getdealcf <- function(dealnames, zipfiles, workdate=Sys.Date()){
data <- data[-c(1,2),]
data[,Date:=as.Date(Date, "%b %d, %Y")]
data <- data.table(Date=data[,Date], data[,lapply(.SD, sanitize.column),.SDcols=2:4],key="Date")
- r[i,] <- as.numeric(df[data,roll=TRUE][,list(sum(Cashflow*Discounts),
- sum(Principal*Discounts),
- sum(Interest*Discounts))])
+ r[i,] <- as.numeric(df[data, nomatch=NA][,list(sum(Cashflow*Discounts),
+ sum(Principal*Discounts),
+ sum(Interest*Discounts))])
}
k(r)
})
@@ -185,7 +171,7 @@ getcusipcf <- function(params, cfdata, dist, workdate=Sys.Date()){
zip <- params$zipfiles[params$cusips[[cusip]]]
dealname <- dealnames[i]
dealdata <- getdealdata(dealname, workdate)
- alldates <- getdealschedule(dealdata,"1 month", startdate=workdate)
+ alldates <- getdealschedule(dealdata,"1 month", startdate=workdate, adjust=TRUE)
T <- ifelse(alldates>=L3m$params$tradeDate, yearFrac(L3m$params$tradeDate, alldates), 0)
DC <- DiscountCurve(L3m$params, L3m$tsQuotes, T)
df <- data.table(Date=alldates,
@@ -202,6 +188,7 @@ getcusipcf <- function(params, cfdata, dist, workdate=Sys.Date()){
conn <- unz(zip, filename)
data <- data.table(read.table(conn, sep="\t", header=TRUE, colClasses="character",
check.names=FALSE))
+ browser()
data <- data[-c(1,2),]
if("Error" %in% names(data)){
k(NULL)
@@ -209,11 +196,11 @@ getcusipcf <- function(params, cfdata, dist, workdate=Sys.Date()){
data <- data[,Date:=as.Date(Date, "%b %d, %Y")]
data <- data.table(Date=data[,Date],data[,lapply(.SD,sanitize.column),.SDcols=2:6],key="Date")
data[,Balance:=max(Balance-`Accum Interest Shortfall`, 0), by=1:nrow(data)]
- 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)])
+ r[j,] <- as.numeric(df[data][,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)])
}
k(list(currbal=indicdata$curr_balance,
spread=indicdata$spread,