diff options
| -rw-r--r-- | R/calibration.R | 5 | ||||
| -rw-r--r-- | R/zerorecovery_index.R | 65 |
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") |
