args <- commandArgs(trailingOnly=TRUE) if(.Platform$OS.type == "unix"){ root.dir <- "/home/serenitas/CorpCDOs" }else{ root.dir <- "//diskstation/share/CorpCDOs" } source("cds_utils.R") source("cds_functions_generic.R") source("tranche_functions.R") source("yieldcurve.R") source("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 1: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") }