diff options
| -rw-r--r-- | R/intex_deal_functions.R | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/R/intex_deal_functions.R b/R/intex_deal_functions.R index 6396136d..5184129a 100644 --- a/R/intex_deal_functions.R +++ b/R/intex_deal_functions.R @@ -344,19 +344,34 @@ 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]
+getpayday <- function(dealdata, tradedate){
+ ## try to compute the previous deal pay date
+ m <- as.numeric(format(dealdata$first_pay_date, "%m"))
+ m <- m %%3+9
+ y <- as.numeric(format(tradedate, "%Y"))
+ y <- y - 1
+ payday <- as.Date(sprintf("%s-%s-%s",y, m, dealdata$pay_day))
+ i <- 1
+ nextdate <- advance(calendar = "UnitedStates", dates=payday, 3*i, 2, bdc=4)
+ while(nextdate < tradedate){
+ payday <- nextdate
+ i <- i+1
+ nextdate <- advance(calendar = "UnitedStates", dates=payday, 3*i, 2, bdc=4)
}
+ return(payday)
+}
+
+getdealschedule <- function(dealdata, freq="1 month", tradedate=Sys.Date(), lag=0, adjust=FALSE){
+ payday <- getpayday(dealdata, tradedate)
n <- if(freq == "1 month") 1 else 3
- sched <- dealdata$"Pay Day"
+ sched <- payday
i <- 1
bdc <- if(adjust) 0 else 4
- nextdate <- advance(calendar = "UnitedStates", dates=dealdata$"Pay Day", n*i, 2, bdc=bdc)
+ nextdate <- advance(calendar = "UnitedStates", dates=payday, 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)
+ nextdate <- advance(calendar = "UnitedStates", dates=payday, n*i, 2, bdc=bdc)
}
##always add the maturity
if(sched[length(sched)] < dealdata$maturity){
|
