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")) source(file.path(root.dir, "code", "R", "index_definitions.R")) source(file.path(root.dir, "code", "R", "cds_utils.R")) if(length(args) >=2){ dealnames <- args[-1] }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")) } if(length(args) >= 1){ workdate <- as.Date(args[1]) }else{ workdate <- Sys.Date() } calibration.date <- prevBusDay(workdate) MarkitData <- getMarkitIRData(calibration.date) futurequotes <- read.csv(file.path(root.dir, "data", "Yield Curves", sprintf("futures-%s.csv", calibration.date)), header=F) setEvaluationDate(as.Date(MarkitData$effectiveasof)) setCalendarContext("UnitedStates/GovernmentBond") 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) L12m <- buildMarkitYC(MarkitData, futurequotes[,2], dt = 1) 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"=97.55, "Aa"=95, "A"=92.5, "Baa"=90, "Ba"=85, "B"=80, "NR"=70) #reinvest in 7 years assets global.params$rollingmaturity <- 7 * 365 global.params$defaultedlag <- 90 global.params$defaultcorr <- 0.45 global.params$defaultbondhazardrate <- 2500 * bps global.params$defaultloanhazardrate <- 2500 * bps global.params$alpha <- 0.25 global.params$beta <- 15 global.params$shape <- function(T)0.5+(1-0.5)*(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 for(i in seq_along(dealnames)){ deal.name <- dealnames[i] if(exists("disablereinvflags")){ global.params$reinvflag <- !disablereinvflags[i] } 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 <= Sys.Date()+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) } } if(length(args)<1){ write.table(data.frame(dealnames, as.logical(!disablereinvflags)), file = file.path(root.dir, "scripts", "scenarios.txt"), row.names = F, col.names = F, quote = F) }