diff options
Diffstat (limited to 'R/load_cf.R')
| -rw-r--r-- | R/load_cf.R | 63 |
1 files changed, 17 insertions, 46 deletions
diff --git a/R/load_cf.R b/R/load_cf.R index fe8727e8..d57ae0e0 100644 --- a/R/load_cf.R +++ b/R/load_cf.R @@ -169,16 +169,23 @@ getdealcf <- function(dealnames, workdate=Sys.Date()){ flag <- FALSE
n.scenarios <- 100
for(dealname in dealnames){
- cfdata[[dealname]] <- list()
r <- matrix(0, n.scenarios, 3)
colnames(r) <- fields
sqlstring <- sprintf("select marketvalue from latest_deal_model_numbers where dealname='%s'", dealname)
mv <- dbGetQuery(dbCon, sqlstring)$marketvalue
- sqlstring <- sprintf(paste0("select \"Curr Collat Bal\", \"Reinv End Date\" from ",
+ sqlstring <- sprintf(paste0("select \"Curr Collat Bal\", \"Reinv End Date\", ",
+ "maturity from ",
"latest_clo_universe where dealname='%s'"), dealname)
sqldata <- dbGetQuery(dbCon, sqlstring)
- cfdata[[dealname]]$mv <- mv
- cfdata[[dealname]]$currbal <- sqldata$"Curr Collat Bal"
+ alldates <- rev(seq.Date(from=sqldata$maturity, to=workdate-90, by="-1 month"))
+
+ 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, key="Date")
+ cfdata[[dealname]] <- list(mv = mv, currbal = sqldata$"Curr Collat Bal")
config <- file.path(file.path(root.dir, "Scenarios", paste("Intex curves", workdate, sep="_"), "csv"),
paste0(dealname, ".config"))
config <- yaml.load_file(config)
@@ -204,48 +211,12 @@ getdealcf <- function(dealnames, workdate=Sys.Date()){ flag <- TRUE
break
}
- data <- data[,1:4]
- colnames(data) <- c("Date", "Cashflow", "Principal", "Interest")
- data$Date <- as.Date(data$Date, "%b %d, %Y")
- if(any(is.na(data$Date))){
- cat(sprintf("file: %s is messed up", filename), "\n")
- flag <- TRUE
- break
- }
- futuredates <- data$Date[data$Date>=L3m$params$tradeDate]
- pastdates <- data$Date[data$Date<L3m$params$tradeDate]
- if(length(futuredates)>0 &&
- (i==1||length(futuredates)>length(DC$times))){
- DC <- DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(L3m$params$tradeDate, futuredates))
- }
- pv <- c()
- for(field in fields){
- cleanfield <- tryCatch(sanitize.column(data[,field]),
- warning = function(w) w)
- if(inherits(cleanfield, "warning")){
- cat("garbled", dealname, i, "\n")
- flag <- TRUE
- break
- }else{
- data[,field] <- cleanfield
- }
- if(length(futuredates) == 0){
- df <- rep(1, length(pastdates))
- }else{
- df.dm <- exp(-dm*yearFrac(L3m$params$tradeDate, futuredates))
- df <- c(rep(1, length(pastdates)), df.dm*DC$discounts[1:length(futuredates)])
- }
- if(nrow(data)>0){
- pv <- c(pv, crossprod(df, data[,field]))
- }else{
- pv <- c(pv, 0)
- }
- }
- if(flag){
- break
- }else{
- r[i,] <- pv
- }
+ data <- data.table(Date= as.Date(data[,1], "%b %d, %Y"),
+ apply(data[,2:4], 2, function(x)sanitize.column(x)), key="Date")
+ setnames(data, c("Date", fields))
+ r[i,] <- as.numeric(data[df][,list(sum(Cashflow*Discounts),
+ sum(Principal*Discounts),
+ sum(Interest*Discounts))])
}
if(flag){
cfdata[[dealname]] <- NULL
|
