diff options
| -rw-r--r-- | R/cds_functions_generic.R | 3 | ||||
| -rw-r--r-- | R/cds_utils.R | 8 |
2 files changed, 8 insertions, 3 deletions
diff --git a/R/cds_functions_generic.R b/R/cds_functions_generic.R index b561edff..4547f8b9 100644 --- a/R/cds_functions_generic.R +++ b/R/cds_functions_generic.R @@ -172,6 +172,7 @@ setGeneric("cdsduration", function(sc, maturity, ...) { standardGeneric("cdsduration")
})
+## duration is based on the standard IMM schedule
setMethod("cdsduration", signature("abstractcurve", "Date"),
## computes the risky PV01, also called risky annuity of a cds
function(sc, maturity, accruedondefault=TRUE){
@@ -677,7 +678,7 @@ DP2 <- function(sc, dates, startdate=Sys.Date()){ getdealschedule <- function(dealdata, freq="3 months", startdate = Sys.Date(), lag = 0){
## necessary if we want monthly schedule with quaterly pay dates
prevpaydate <- seq(dealdata$"Deal Next Pay Date",
- dealdata$"Deal Next Pay Date"-92, by="-3 months")
+ dealdata$"Deal Next Pay Date"-92, by="-3 months")[2]
dates <- seq(prevpaydate, dealdata$maturity + lag, by=freq)
dates <- dates[dates>startdate]
return( dates )
diff --git a/R/cds_utils.R b/R/cds_utils.R index 3685056e..fe7bb4ec 100644 --- a/R/cds_utils.R +++ b/R/cds_utils.R @@ -94,9 +94,13 @@ couponSchedule <- function(nextpaydate=NULL, maturity, frequency, coupontype, cu stop("unknown frequency")
}
if(is.null(nextpaydate)){
- dates <- rev(seq(maturity, today(), by =paste0("-", bystring)))
+ dates <- rev(seq(maturity, startdate, by =paste0("-", bystring)))
}else{
- dates <- seq(nextpaydate, maturity, by = bystring)
+ if(nextpaydate>maturity){
+ dates <- maturity
+ }else{
+ dates <- seq(nextpaydate, maturity, by = bystring)
+ }
}
if(length(dates)==0){
dates <- maturity
|
