diff options
Diffstat (limited to 'R/cds_functions_generic.R')
| -rw-r--r-- | R/cds_functions_generic.R | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/R/cds_functions_generic.R b/R/cds_functions_generic.R index fcc5a3dd..91aa9ec7 100644 --- a/R/cds_functions_generic.R +++ b/R/cds_functions_generic.R @@ -776,15 +776,16 @@ forwardportfolioprice2 <- function(cdrmonthly, recoverymonthly, startdate, matur }else{
currentcoupon <- margin + liborfloor
}
- browser()
forwardcs <- data.table(couponSchedule(nextpaydate=startdate+45, maturity,
frequency="Q", coupontype, margin,
currentcoupon, startdate=startdate), key="dates")
notionals <- cdrmonthly[forwardcs,roll=TRUE]
+ R <- recoverymonthly[forwardcs,roll=TRUE]
outstanding <- notionals[,lapply(.SD,function(x)cumprod(1-x/100*1/12)),.SDcols=paste0("V",1:100)]
po <- as.numeric(last(outstanding))*last(notionals[,df])
io <- notionals[,outstanding[,lapply(.SD,function(x)sum(x*coupons*df)), .SDcols=paste0("V",1:100)]]
- recovery <- crossprod(-apply(rbind(1,as.matrix(outstanding)), 2, diff),t(notionals[,df]))
+ recovery <- colSums(-apply(rbind(1,as.matrix(outstanding)), 2, diff)*
+ as.matrix(R[,df*.SD,.SDcols=paste0("V",1:100)]))
mean(as.numeric(recovery+po+io))
}
|
