diff options
Diffstat (limited to 'R')
| -rw-r--r-- | R/backtest_tranches.R | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/R/backtest_tranches.R b/R/backtest_tranches.R new file mode 100644 index 00000000..8ae9baf6 --- /dev/null +++ b/R/backtest_tranches.R @@ -0,0 +1,76 @@ +args <- commandArgs(trailingOnly=TRUE) + +if(.Platform$OS.type == "unix"){ + root.dir <- "/home/share/CorpCDOs" +}else{ + root.dir <- "//WDSENTINEL/share/CorpCDOs" +} + +source(file.path(root.dir, "code", "R", "cds_utils.R")) +source(file.path(root.dir, "code", "R", "cds_functions_generic.R")) +source(file.path(root.dir, "code", "R", "tranche_functions.R")) +source(file.path(root.dir, "code", "R", "yieldcurve.R")) +source(file.path(root.dir, "code", "R", "optimization.R")) +load.index("hy21") + +## calibrate HY21 +## calibrate the single names curves +bps <- 1e-4 +files <- dir(file.path(root.dir, "Scenarios", "Calibration"), pattern="hy21_singlenames_*") +dates <- as.Date(substr(files, 18, 27)) +basis <- data.frame(row.names=dates, indexref=numeric(length(dates)), basis=numeric(length(dates))) +for(i in 50:length(files)){ + f <- files[i] + singlenames.data <- read.csv(file.path(root.dir, "Scenarios", "Calibration", f)) + nondefaulted <- singlenames.data[!singlenames.data$ticker %in% hy21$defaulted,] + calibration.date <- as.Date(substr(f, 18, 27)) + if(calibration.date == as.Date("2013-12-20")){ + next + } + MarkitData <- getMarkitIRData(calibration.date) + futurequotes <- read.csv(file.path(root.dir, "data", "Yield Curves", + sprintf("futures-%s.csv", calibration.date)), header=F) + tradedate <- adjust(dates=as.Date(MarkitData$effectiveasof)) + setEvaluationDate(tradedate) + setCalendarContext("TARGET") + L1m <- buildMarkitYC(MarkitData, futurequotes[,2], dt = 1/12) + L2m <- buildMarkitYC(MarkitData, futurequotes[,2], dt = 1/6) + L3m <- buildMarkitYC(MarkitData, futurequotes[,2]) + L6m <- buildMarkitYC(MarkitData, futurequotes[,2], dt = 1/2) + + cdsdates <- as.Date(character(0)) + for(tenor in paste0(1:5, "y")){ + cdsdates <- c(cdsdates, cdsMaturity(tenor, date=tradedate)) + } + + hy21portfolio <- c() + cs <- couponSchedule(IMMDate(tradedate), cdsdates[length(cdsdates)], "Q", "FIXED", + 1, tradedate, IMMDate(tradedate, "prev")) + for(j in 1:nrow(nondefaulted)){ + SC <- new("creditcurve", + recovery=nondefaulted$recovery[j]/100, + startdate=tradedate, + issuer=as.character(nondefaulted$ticker[j])) + quotes <- data.frame(maturity=cdsdates, upfront = as.numeric(nondefaulted[j,4:8]) /100, + running=rep(nondefaulted$running[j] * bps, 5)) + SC@curve <- cdshazardrate(quotes, nondefaulted$recovery[j]/100, tradedate, cs) + hy21portfolio <- c(hy21portfolio, SC) + } + market.data <- read.csv(file.path(root.dir, "Scenarios", "Calibration", + paste0("hy21_tranches_", calibration.date, ".csv"))) + ## get the index ref + hy21$indexref <- market.data$bidRefPrice[1]/100 + temp <- tweakcurves(hy21portfolio, hy21, tradedate) + hy21portfolio.tweaked <- temp$portfolio + basis[as.character(tradedate), "basis"] <- temp$epsilon + basis[as.character(tradedate), "indexref"] <- market.data$bidRefPrice[1] + recov <- sapply(hy21portfolio.tweaked, attr, "recovery") + cs <- couponSchedule(IMMDate(tradedate), hy21$maturity, "Q", "FIXED", 0.05, 0, tradedate) + SurvProb <- SPmatrix(hy21portfolio.tweaked, length(cs$dates)) + colnames(SurvProb) <- as.character(cs$dates) + write.csv(SurvProb, row.names=FALSE, + file=file.path(root.dir, "Data", "Backtest", paste0("survprob_", calibration.date, ".csv"))) + write(recov, ncolumns=1, + file=file.path(root.dir, "Data", "Backtest", paste0("recov_", calibration.date, ".csv"))) + cat(as.character(calibration.date), "\n") +} |
