aboutsummaryrefslogtreecommitdiffstats
path: root/R/intex_deal_functions.R
diff options
context:
space:
mode:
Diffstat (limited to 'R/intex_deal_functions.R')
-rw-r--r--R/intex_deal_functions.R23
1 files changed, 22 insertions, 1 deletions
diff --git a/R/intex_deal_functions.R b/R/intex_deal_functions.R
index 89fecb40..b1d3582f 100644
--- a/R/intex_deal_functions.R
+++ b/R/intex_deal_functions.R
@@ -29,7 +29,7 @@ getdealdata <- function(dealname, workdate){
sqlstring <- sprintf(sqlstring, dealname, dealname, workdate)
mv <- dbGetQuery(dbCon, sqlstring)$marketvalue
sqlstring <- sprintf(paste0("select \"Curr Collat Bal\", \"Reinv End Date\", ",
- "\"Deal Next Pay Date\" , maturity, \"Principal Bal\" from ",
+ "\"Deal Next Pay Date\" , maturity, \"Principal Bal\" , \"Pay Day\" from ",
"historical_clo_universe('%s', '%s')"), dealname, workdate)
dealdata <- dbGetQuery(dbCon, sqlstring)
dealdata$mv <- mv
@@ -348,6 +348,27 @@ get.reinvassets <- function(dealname, tradedate){
return( r )
}
+getdealschedule <- function(dealdata, freq="1 month", lag=0, adjust=FALSE){
+ if(is.na(dealdata$"Pay Day")||(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="-3 months")[2]
+ }
+ n <- if(freq == "1 month") 1 else 3
+ sched <- dealdata$"Pay Day"
+ i <- 1
+ bdc <- if(adjust) 0 else 4
+ nextdate <- advance(calendar = "UnitedStates", dates=dealdata$"Pay Day", n*i, 2, bdc=bdc)
+ while(nextdate<= dealdata$"maturity" + lag){
+ sched <- c(sched, nextdate)
+ i <- i+1
+ nextdate <- advance(calendar = "UnitedStates", dates=dealdata$"Pay Day", n*i, 2, bdc=bdc)
+ }
+ ##always add the maturity
+ if(sched[length(sched)] < dealdata$maturity){
+ sched <- c(sched, dealdata$maturity)
+ }
+ return(sched)
+}
+
intexportfolio.forwardprice <- function(cdrmonthly, recoverymonthly, startdate, maturity,
coupontype, margin, liborfloor){
if(missing(liborfloor)||is.na(liborfloor)){