aboutsummaryrefslogtreecommitdiffstats
path: root/cds_utils.R
diff options
context:
space:
mode:
Diffstat (limited to 'cds_utils.R')
-rw-r--r--cds_utils.R26
1 files changed, 19 insertions, 7 deletions
diff --git a/cds_utils.R b/cds_utils.R
index f9e6be03..f0799a8f 100644
--- a/cds_utils.R
+++ b/cds_utils.R
@@ -65,7 +65,14 @@ creditSchedule <- function(startdate, enddate) {
seq(newdate, enddate, by="3 months")
}
-couponSchedule <- function(nextpaydate=NULL, maturity, frequency, coupontype, currentcoupon, margin){
+couponSchedule <- function(nextpaydate=NULL, maturity, frequency, coupontype, currentcoupon,
+ margin, startdate=today()){
+ ## computes the coupon schedule
+ ## inputs:
+ ## nextpaydate: first payment date of the coupon schedule
+ ## maturity: last payment date of the schedule
+ ## frequency: letter specifying the frequency amon "Q", "M", "B", or "S"
+ ## if startdate is provided, this generates the forward coupon schedule starting from that date.
bystring <- switch(frequency,
Q = "3 months",
M = "1 month",
@@ -81,17 +88,22 @@ couponSchedule <- function(nextpaydate=NULL, maturity, frequency, coupontype, cu
}
dates <- dates[ dates >= today()]
DC <- switch(frequency,
- S = DiscountCurve(L6m$params, L6m$tsQuotes, yearFrac(today(), dates)),
- Q = DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(today(), dates)),
- M = DiscountCurve(L1m$params, L1m$tsQuotes, yearFrac(today(), dates)),
- B = DiscountCurve(L2m$params, L2m$tsQuotes, yearFrac(today(), dates)))
+ S = DiscountCurve(L6m$params, L6m$tsQuotes, yearFrac(L6m$params$tradeDate, dates)),
+ Q = DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(L3m$params$tradeDate, dates)),
+ M = DiscountCurve(L1m$params, L1m$tsQuotes, yearFrac(L1m$params$tradeDate, dates)),
+ B = DiscountCurve(L2m$params, L2m$tsQuotes, yearFrac(L2m$params$tradeDate, dates)))
if(coupontype=="FLOAT" && !is.na(margin)){ #if is.na(margin) probably letter of credit
coupons <- pmax(currentcoupon, DC$forwards + margin)
}else{
coupons <- rep(currentcoupon, length(dates))
}
- coupons <- diff(c(0, yearFrac(today(), dates, "act/360"))) * coupons
- return( data.frame(dates=dates, coupons=coupons, df = DC$discounts) )
+ coupons <- diff(c(0, yearFrac(startdate, dates, "act/360"))) * coupons
+ if(startdate!=DC$params$tradeDate){
+ df <- cumprod(exp(-DC$forwards * diff(c(0, yearFrac(startdate, dates)))))
+ }else{
+ df <- DC$discounts
+ }
+ return( data.frame(dates=dates, coupons=coupons, df = df) )
}
nextIMMDate <- function(date) {