diff options
| -rw-r--r-- | R/cds_functions_generic.R | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/R/cds_functions_generic.R b/R/cds_functions_generic.R index 32f6559b..51bb4e3c 100644 --- a/R/cds_functions_generic.R +++ b/R/cds_functions_generic.R @@ -40,6 +40,7 @@ setMethod("couponleg", signature("data.frame", "flatcurve"), function(cs, sc, startdate=Sys.Date() + 1, accruedondefault=TRUE){
stopifnot(class(startdate)=="Date")
stopifnot(is.logical(accruedondefault))
+ cs <- cs[cs$dates>=startdate,]
T <- yearFrac(startdate, cs$dates)
PD <- exp(- sc@h * T )
if(accruedondefault){
@@ -852,10 +853,21 @@ forward.prot <- function(index, exerciseDate){ return( crossprod(prot, index$issuerweights) )
}
-defaultAdjustedForwardIndexPrice <- function(index, exerciseDate){
+defaultAdjustedForwardIndexPrice <- function(index, exerciseDate, fixedRate=0.05){
tes <- addBusDay(exerciseDate)
df <- DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(tradedate, tes))$discounts
- price <- 1 - FEP(index, exerciseDate) + forward.cl(index, exerciseDate)*0.05 -
- forward.prot(index, exerciseDate)
- return( as.numeric(df*price) )
+ price <- 1 - FEP(index, exerciseDate) + 1/df*(forward.cl(index, exerciseDate)*fixedRate -
+ forward.prot(index, exerciseDate)-cdsAccrued(exerciseDate, fixedRate))
+ return( price )
+}
+
+forwardflatcds <- function(h, cs, tradeDate, exerciseDate, fixedRate=0.05, R=0.4){
+ tes <- addBusDay(exerciseDate)
+ fep <- (1-R)*(1-exp(-h*yearFrac(tradeDate, exerciseDate)))
+ df <- DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(tradeDate, tes))$discounts
+ sc <- new("flatcurve", h=h)
+ cl <- couponleg(cs, sc, startdate=exerciseDate)
+ pl <- defaultleg(cs, sc, recovery=R, startdate=exerciseDate)
+ price <- 1-fep+1/df*(cl*fixedRate-pl-cdsAccrued(exerciseDate, fixedRate))
+ return( price )
}
|
