aboutsummaryrefslogtreecommitdiffstats
path: root/R/cds_functions_generic.R
diff options
context:
space:
mode:
Diffstat (limited to 'R/cds_functions_generic.R')
-rw-r--r--R/cds_functions_generic.R63
1 files changed, 41 insertions, 22 deletions
diff --git a/R/cds_functions_generic.R b/R/cds_functions_generic.R
index a38e38ef..1db5ea7b 100644
--- a/R/cds_functions_generic.R
+++ b/R/cds_functions_generic.R
@@ -695,29 +695,48 @@ DP2 <- function(sc, dates, startdate=Sys.Date()){
prepayprob = cumsum(pfun(x2T) * Qmid * dT)))
}
-getdealschedule <- function(dealdata, freq="3 months", startdate = Sys.Date(), lag = 0){
- calstring <- "UnitedStates/GovernmentBond"
- settledate <- advance(calendar = calstring,
- dates = startdate,
- n = 3,
- timeUnit = 0)
- nextpaydate <- dealdata$"Deal Next Pay Date"
- ## "Deal Next Pay Date" might be stale in the database
- if(dealdata$"Deal Next Pay Date" < settledate){
- prevpaydate <- nextpaydate
- nextpaydate <- advance(calendar = calstring,
- dates = nextpaydate,
- n = 3,
- timeUnit = 2)
- }else{
- prevpaydate <- advance(calendar = calstring,
- dates = nextpaydate,
- n = -3,
- timeUnit = 2)
+## getdealschedule <- function(dealdata, freq="3 months", startdate = Sys.Date(), lag = 0){
+## calstring <- "UnitedStates/GovernmentBond"
+## settledate <- advance(calendar = calstring,
+## dates = startdate,
+## n = 3,
+## timeUnit = 0)
+## nextpaydate <- dealdata$"Deal Next Pay Date"
+## ## "Deal Next Pay Date" might be stale in the database
+## if(dealdata$"Deal Next Pay Date" < settledate){
+## prevpaydate <- dealdata$"Deal Next Pay Date"
+## nextpaydate <- advance(calendar = calstring,
+## dates = dealdata$"Deal Next Pay Date",
+## n = 3,
+## timeUnit = 2)
+## }else{
+## prevpaydate <- advance(calendar = calstring,
+## dates = dealdata$"Deal Next Pay Date",
+## n = -3,
+## timeUnit = 2)
+## }
+## dates <- seq(prevpaydate, dealdata$maturity + lag, by=freq)
+## dates <- dates[dates>settledate]
+## return( dates )
+## }
+
+getdealschedule <- function(dealdata, freq="1 month", startdate= Sys.Date(), lag=0, adjust=FALSE){
+ if(is.null(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]
+ }
+ sched <- seq(dealdata$"Pay Day", dealdata$"maturity" + lag, by=freq)
+ ##always add the maturity
+ if(sched[length(sched)] < dealdata$maturity){
+ sched <- c(sched, dealdata$maturity)
}
- dates <- seq(prevpaydate, dealdata$maturity + lag, by=freq)
- dates <- dates[dates>settledate]
- return( dates )
+ if(adjust){
+ calstring <- "UnitedStates"
+ ## never adjust the maturity
+ sched <- c(adjust(calstring, sched[-length(sched)]), sched[length(sched)])
+ base::names(sched) <- NULL
+ }
+
+ return(sched)
}
SPmatrix2 <- function(portfolio, dealdata, freq="3 months", startdate=Sys.Date()){