aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--R/calibration.R5
-rw-r--r--R/zerorecovery_index.R65
2 files changed, 39 insertions, 31 deletions
diff --git a/R/calibration.R b/R/calibration.R
index 3cb7c54e..e5d9cb50 100644
--- a/R/calibration.R
+++ b/R/calibration.R
@@ -22,7 +22,7 @@ get.cdsSchedule <- function(tradedate){
cdsdates=cdsdates) )
}
-set.singlenamesdata <- function(index, tradedate){
+set.singlenamesdata <- function(index, tradedate, recov=NULL){
cds.cs <- get.cdsSchedule(tradedate)
quotes <- get.singlenamesquotes(index$name, tradedate)
tenor <- names(cds.cs$cdsdates)
@@ -39,7 +39,8 @@ set.singlenamesdata <- function(index, tradedate){
quote <- list(ticker = quotes$ticker[i],
running = quotes$spread_curve[i, tenor] * 1e-4,
upfront = quotes$upfront_curve[i, tenor] * 0.01,
- recovery = as.double(quotes$recovery[i,tenor][1]))
+ recovery = if(is.null(recov)) as.double(quotes$recovery[i,tenor][1])
+ else recov)
if(all(is.na(quote$upfront))){
loginfo(paste("no quotes available for", quote$ticker, "on day",
as.character(tradedate)))
diff --git a/R/zerorecovery_index.R b/R/zerorecovery_index.R
index a7694d79..58df61c8 100644
--- a/R/zerorecovery_index.R
+++ b/R/zerorecovery_index.R
@@ -7,48 +7,55 @@ source(file.path(code.dir, "R", "creditIndex.R"))
source(file.path(code.dir, "R", "tranche_functions.R"))
##HY
-tradedate <- as.Date("2017-03-31")
+tradedate <- as.Date("2017-04-04")
exportYC(tradedate, "USD")
index <- creditIndex("HY28", "5yr")
index <- set.index.desc(index, tradedate)
-index <- set.singlenamesdata(index, tradedate)
+
index$cs <- couponSchedule(IMMDate(tradedate, noadj=TRUE), index$maturity, "Q", "FIXED", 1,
0, tradedate, IMMDate(tradedate, "prev"))
index$quotes <- data.frame(maturity=as.Date("2022-06-20"), spread=0.05, price=1.0716)
-tweak <- tweakcurves(index)
-zerorecov.portfolio <- lapply(tweak$portfolio, function(x){x@recovery=0;return(x)})
-
-cs <- index$cs
startdate <- tradedate + 1
-pl.list <- vapply(zerorecov.portfolio, function(x) {
- pl <- defaultleg(cs, x@curve, x@recovery, startdate, TRUE)
- if(is.na(pl)) {
- logerror(paste("couldn't compute single name protection leg for", x@issuer))
- return( NA )
- }
- return( pl )
-}, numeric(1))
-
+upfront <- c()
+for(R in seq(0.2, 0.45, 0.01)) {
+ index <- set.singlenamesdata(index, tradedate, R)
+ tweak <- tweakcurves(index)
+ zerorecov.portfolio <- lapply(tweak$portfolio, function(x){x@recovery=0;return(x)})
+ pl.list <- vapply(zerorecov.portfolio, function(x) {
+ pl <- defaultleg(index$cs, x@curve, x@recovery, startdate, TRUE)
+ if(is.na(pl)) {
+ logerror(paste("couldn't compute single name protection leg for", x@issuer))
+ return( NA )
+ }
+ return( pl )
+ }, numeric(1))
+ upfront <- c(upfront, mean(pl.list))
+}
##ITRX
-tradedate <- as.Date("2017-03-31")
+tradedate <- as.Date("2017-04-04")
exportYC(tradedate, "EUR")
index <- creditIndex("XO27", "5yr")
index <- set.index.desc(index, tradedate)
-index <- set.singlenamesdata(index, tradedate)
+
index$cs <- couponSchedule(IMMDate(tradedate, noadj=TRUE), index$maturity, "Q", "FIXED", 1,
0, tradedate, IMMDate(tradedate, "prev"))
-index$quotes <- data.frame(maturity=as.Date("2022-06-20"), spread=0.05, price=1.0968)
-tweak <- tweakcurves(index)
-zerorecov.portfolio <- lapply(tweak$portfolio, function(x){x@recovery=0;return(x)})
+index$quotes <- data.frame(maturity=as.Date("2022-06-20"), spread=0.05, price=1.095)
-cs <- index$cs
startdate <- tradedate + 1
-pl.list <- vapply(zerorecov.portfolio, function(x) {
- pl <- defaultleg(cs, x@curve, x@recovery, startdate, TRUE)
- if(is.na(pl)) {
- logerror(paste("couldn't compute single name protection leg for", x@issuer))
- return( NA )
- }
- return( pl )
-}, numeric(1))
+upfront <- c()
+for(R in seq(0.2, 0.45, 0.01)) {
+ index <- set.singlenamesdata(index, tradedate, R)
+ tweak <- tweakcurves(index)
+ zerorecov.portfolio <- lapply(tweak$portfolio, function(x){x@recovery=0;return(x)})
+ pl.list <- vapply(zerorecov.portfolio, function(x) {
+ pl <- defaultleg(index$cs, x@curve, x@recovery, startdate, TRUE)
+ if(is.na(pl)) {
+ logerror(paste("couldn't compute single name protection leg for", x@issuer))
+ return( NA )
+ }
+ return( pl )
+ }, numeric(1))
+ upfront <- c(upfront, mean(pl.list))
+}
+plot(seq(0.2, 0.45, 0.01), upfront, type="l", xlab="recovery")