library("RQuantLib") library("parallel") 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")) dealnames <- unique(dealnamefromcusip(read.table(file.path(root.dir, "scripts", "cusips_to_price.txt"))$V1)) unlink(file.path(root.dir, "scripts", "cusips_to_price.txt")) source(file.path(root.dir, "code", "R", "index_definitions.R")) prevBusDay <- function(){ i <- 1 while(!isBusinessDay(calendar = "UnitedStates/GovernmentBond", Sys.Date() - i)){ i <- i+1 } return( Sys.Date() - i ) } workdate <- Sys.Date() calibration.date <- prevBusDay() 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)) cusipdata <- cusip.data() currdealnames <- dbGetQuery(dbCon, "select updatedate, dealname from latest_deal_model_numbers") ## build portfolio data for(deal.name in dealnames){ deal.data <- getdealdata(deal.name, calibration.date) if(deal.data$"Curr Collat Bal" < 1 ||is.na(deal.data$maturity)||deal.data$maturity <= today()+90){ return() } deal.portfolio <- buildSC.portfolio(deal.name, deal.data, cusipdata, global.params, workdate) A <- SPmatrix2(deal.portfolio$SC, deal.data, freq="3 months") S <- 1 - sapply(deal.portfolio$SC, attr, "recov") deal.weights <- deal.portfolio$notional/sum(deal.portfolio$notional) deal.dates <- getdealschedule(deal.data) deal.spread <- portfoliospread(deal.portfolio, hy19$maturity) 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.spread, 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 dealspread = %s, cdopercentage = %s,", "stalepercentage= %s WHERE dealname= '%s' and updatedate = '%s'"), deal.spread, deal.portfolio$cdopercentage, deal.portfolio$stale, deal.name, as.Date(workdate)) dbGetQuery(dbCon, sqlstring) }else{ sqlstring <- sprintf(paste0("INSERT INTO et_deal_model_numbers ", "VALUES('%s', %s, %s, %s, %s, '%s')"), deal.name, deal.portfolio$cdopercentage, deal.portfolio$stale, deal.spread, crossprod(deal.portfolio$notional, deal.portfolio$price)/100, workdate) dbGetQuery(dbCon, sqlstring) currdealnames <- c(currdealnames, deal.name) } } write.table(dealnames, file = file.path(root.dir, "scripts", "scenarios.txt"), row.names = F, col.names = F)