diff options
Diffstat (limited to 'R/cds_utils.R')
| -rw-r--r-- | R/cds_utils.R | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/R/cds_utils.R b/R/cds_utils.R index f97e00c2..51409b55 100644 --- a/R/cds_utils.R +++ b/R/cds_utils.R @@ -75,17 +75,16 @@ couponSchedule <- function(nextpaydate=NULL, maturity, frequency, coupontype, cu }
}
dates <- dates[ dates >= tradedate]
- if(length(dates)>0){
- dates <- adjust(calendar="UnitedStates/GovernmentBond", dates)
+ ## we want to make sure maturity is last date
+ if(length(dates)==0 || dates[length(dates)] < maturity){
+ dates <- c(dates, maturity)
}
- if(length(dates)==0){
- dates <- maturity
- }else{
- if(dates[length(dates)]<maturity){
- dates <- c(dates, maturity)
- }
+ unadj.dates <- dates
+ if(length(dates)>1){
+ dates[-length(dates)] <- adjust(calendar="UnitedStates/GovernmentBond", dates[-length(dates)])
}
names(dates) <- NULL
+
DC <- switch(frequency,
S = DiscountCurve(L6m$params, L6m$tsQuotes, yearFrac(L6m$params$tradeDate, dates)),
Q = DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(L3m$params$tradeDate, dates)),
@@ -100,14 +99,17 @@ couponSchedule <- function(nextpaydate=NULL, maturity, frequency, coupontype, cu }else{
coupons <- rep(currentcoupon, length(dates))
}
- coupons <- diff(c(0, yearFrac(prevpaydate, dates, "act/360"))) * coupons
+ yf <- diff(c(0, yearFrac(prevpaydate, dates, "act/360")))
+ #the last accrued period includes the maturity date
+ yf[length(yf)] <- yf[length(yf)]+1/360
+ coupons <- yf * coupons
if(tradedate!=DC$params$tradeDate){
df <- cumprod(exp(-DC$forwards * diff(c(0, yearFrac(tradedate, dates)))))
}else{
df <- DC$discounts
}
- return( data.frame(dates=dates, coupons=coupons, df = df) )
+ return( data.frame(dates=dates, unadj.dates = unadj.dates, coupons=coupons, df = df) )
}
IMMDate <- function(tradedate, type="next", noadj=FALSE) {
|
