library("RQuantLib") 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", "intex_deal_functions.R")) if(length(args) >=2){ dealnames <- args[2:length(args)] }else{ data <- read.table(file.path(root.dir, "scripts", "cusips_to_price.txt")) dealnames <- dealnamefromcusip(data$V1) uniqdealnames <- unique(dealnames) uniqdealnames <- uniqdealnames[!is.na(uniqdealnames)] disablereinvflags <- data$V2[match(uniqdealnames, dealnames)] dealnames <- uniqdealnames unlink(file.path(root.dir, "scripts", "cusips_to_price.txt")) } source(file.path(root.dir, "code", "R", "index_definitions.R")) source(file.path(root.dir, "code", "R", "cds_utils.R")) if(length(args) >= 1){ workdate <- as.Date(args[1]) }else{ workdate <- Sys.Date() } calibration.date <- prevBusDay(workdate) MarkitData <- getMarkitIRData(calibration.date) L1m <- buildMarkitYC(MarkitData, dt = 1/12) L2m <- buildMarkitYC(MarkitData, dt = 1/6) L3m <- buildMarkitYC(MarkitData) L6m <- buildMarkitYC(MarkitData, dt = 1/2) L12m <- buildMarkitYC(MarkitData, dt = 1) setEvaluationDate(as.Date(MarkitData$effectiveasof)) bps <- 1e-4 global.params <- list() global.params$recovery.assumptions <- list("Loan"=0.7, "Senior Notes"=0.7, "SecondLien"=0.3, "Bond"=0.4, "Mezzanine"=0.15, "Adj_Covlite"=0.1, "Credit Default Swap"=0) global.params$cdoprices <- list("Aaa"=90, "Aa"=88, "A"=80, "Baa"=75, "Ba"=70, "B"=65, "NR"=50) #reinvest in 7 years assets global.params$rollingmaturity <- 7 * 365 global.params$defaultedlag <- 90 global.params$defaultcorr <- 0.45 global.params$defaultbondhazardrate <- 1500 * bps global.params$defaultloanhazardrate <- 1500 * bps global.params$alpha <- 0.25 global.params$beta <- 15 global.params$shape <- function(T)0.25+(1-exp(-T/5)) global.params$reinvflag <- TRUE cusipdata <- cusip.data() currdealnames <- dbGetQuery(dbCon, "select updatedate, dealname from latest_deal_model_numbers") ## build portfolio data i <- 1 for(deal.name in dealnames){ if(exists("disablereinvflags")){ global.params$reinvflag <- !disablereinvflags[i] } i <- i+1 if(is.na(deal.name)){ next } deal.data <- getdealdata(deal.name, calibration.date) if(is.na(deal.data$"Reinv End Date")){ global.params$reinvflag <- FALSE } if(deal.data$"Curr Collat Bal" < 1 ||is.na(deal.data$maturity)||deal.data$maturity <= today()+90){ next } deal.portfolio <- buildSC.portfolio(deal.name, deal.data, cusipdata, global.params, workdate) A <- SPmatrix2(deal.portfolio$SC, deal.data, freq="3 months", workdate) S <- 1 - sapply(deal.portfolio$SC, attr, "recov") deal.weights <- deal.portfolio$notional/sum(deal.portfolio$notional) deal.dates <- getdealschedule(deal.data) deal.spread5y <- portfoliospread(deal.portfolio, hy19$maturity) deal.spreadatmaturity <- portfoliospread(deal.portfolio) save.dir <- file.path(root.dir, "Scenarios", paste("Portfolios", workdate, sep="_")) if(!file.exists(save.dir)){ dir.create(save.dir) } save(deal.portfolio, A, S, deal.weights, deal.dates, deal.spread5y, deal.spreadatmaturity, deal.data, file=file.path(save.dir, paste0(deal.name, ".RData"))) cat(deal.name, "... done\n") dealupdatedate <- currdealnames$updatedate[currdealnames$dealname %in% deal.name] if(length(dealupdatedate) && dealupdatedate == workdate){ sqlstring <- sprintf( paste0("UPDATE et_deal_model_numbers SET dealspread5y = %s,", "dealspread = %s, cdopercentage = %s, stalepercentage= %s, ", "marketvalue = %s", "WHERE dealname= '%s' and updatedate = '%s'"), deal.spread5y, deal.spreadatmaturity, deal.portfolio$cdopercentage, deal.portfolio$stale, crossprod(deal.portfolio$notional, deal.portfolio$price)/100, deal.name, as.Date(workdate)) dbSendQuery(dbCon, sqlstring) }else{ sqlstring <- sprintf(paste0("INSERT INTO et_deal_model_numbers", "(dealname, cdopercentage, stalepercentage,", "dealspread5y, marketvalue, updatedate, dealspread) ", "VALUES('%s', %s, %s, %s, %s, '%s', %s)"), deal.name, deal.portfolio$cdopercentage, deal.portfolio$stale, deal.spread5y, crossprod(deal.portfolio$notional, deal.portfolio$price)/100, workdate, deal.spreadatmaturity ) dbSendQuery(dbCon, sqlstring) currdealnames <- c(currdealnames, deal.name) } } write.table(data.frame(dealnames, as.integer(!disablereinvflags)), file = file.path(root.dir, "scripts", "scenarios.txt"), row.names = F, col.names = F)