diff options
Diffstat (limited to 'R/cds_functions_generic.R')
| -rw-r--r-- | R/cds_functions_generic.R | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/R/cds_functions_generic.R b/R/cds_functions_generic.R index b1fd4dfc..1491db69 100644 --- a/R/cds_functions_generic.R +++ b/R/cds_functions_generic.R @@ -537,10 +537,18 @@ indexspread <- function(portfolio, index){ }
portfoliospread <- function(portfolio, maturity){
- ## computes the spread of a portfolio of survival curves and notional for a given maturity
+ ## computes the spread of a portfolio defined by notionals and survivalcurves
+ ## for a given maturity.
+ ## if maturity is missing, we use the intrinsic maturity for each curve
S <- 0
d <- rep(0, length(portfolio$SC))
+ if(missing(maturity)){
+ maturityvec <- as.Date(sapply(portfolio$SC, creditcurve.maturity), origin="1970-01-01")
+ }
for(i in 1:length(portfolio$SC)){
+ if(missing(maturity)){
+ maturity <- maturityvec[i]
+ }
d[i] <- cdsduration(portfolio$SC[[i]]@curve, maturity) * portfolio$notional[i]
S <- S + d[i] * cdsspread(portfolio$SC[[i]]@curve, maturity, portfolio$SC[[i]]@recovery)
}
@@ -685,3 +693,17 @@ forwardportfolioprice <- function(portfolio, startdate, maturity, coupontype, ma }
return(mean(r))
}
+
+
+creditcurve.maturity <- function(creditcurve){
+ if(class(creditcurve)=="creditcurve"){
+ dates <- creditcurve@curve@dates
+ if(length(dates)){
+ return( dates[length(dates)] )
+ }else{
+ return( creditcurve@startdate )
+ }
+ }else{
+ stop("not of class creditcurve")
+ }
+}
|
