aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cds_functions_generic.R22
1 files changed, 20 insertions, 2 deletions
diff --git a/cds_functions_generic.R b/cds_functions_generic.R
index 4f73e2d9..df7912ef 100644
--- a/cds_functions_generic.R
+++ b/cds_functions_generic.R
@@ -160,11 +160,11 @@ setMethod("dcouponleg", signature("data.frame", "shapedcurve", "missing"),
## define cdsduration generic
-setGeneric("cdsduration", function(sc, maturity, accruedondefault) {
+setGeneric("cdsduration", function(sc, maturity, ...) {
standardGeneric("cdsduration")
})
-setMethod("cdsduration", signature("abstractcurve", "Date", "logical"),
+setMethod("cdsduration", signature("abstractcurve", "Date"),
## computes the risky PV01, also called risky annuity of a cds
function(sc, maturity, accruedondefault=TRUE){
cs <- couponSchedule(nextIMMDate(today()), maturity, "Q", "FIXED", 1)
@@ -497,6 +497,23 @@ indexpv <- function(portfolio, index, epsilon=0){
return( 1+mean(r) )
}
+indexduration <- function(portfolio, index){
+ ## compute the duration of a portfolio of survival curves
+ durations <- sapply(sapply(portfolio, attr, "curve"), cdsduration, index$maturity)
+ return( mean(durations) )
+}
+
+indexspread <- function(portfolio, index){
+ ## computes the spread of a portfolio of survival curves
+ S <- 0
+ d <- rep(0, length(portfolio))
+ for(i in 1:length(portfolio)){
+ d[i] <- cdsduration(portfolio[[i]]@curve, index$maturity)
+ S <- S + d[i] * cdsspread(portfolio[[i]]@curve, index$maturity, portfolio[[i]]@recovery)
+ }
+ return(S/sum(d))
+}
+
tweakcurves <- function(portfolio, index){
## computes the tweaking factor
epsilon <- 0
@@ -609,3 +626,4 @@ SPmatrix2 <- function(portfolio, dealdata){
}
return(list(DP=DP, PP=PP))
}
+