library("RQuantLib") library("yaml") 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", "cds_utils.R")) source(file.path(root.dir, "code", "R", "cds_functions_generic.R")) source(file.path(root.dir, "code", "R", "yieldcurve.R")) hy21 <- load.index("hy21") if(length(args) >=2){ argslist <- strsplit(args[-1], ",") dealnames <- unlist(lapply(argslist, function(x)x[1])) reinvflags <- as.logical(unlist(lapply(argslist, function(x)x[2]))) }else{ data <- read.table(file.path(root.dir, "scripts", "deals_to_price.txt"), colClasses=c("character", "logical")) dealnames <- data$V1 reinvflags <- data$V2 } if(length(args) >= 1){ workdate <- as.Date(args[1]) }else{ workdate <- Sys.Date() } calibration.date <- addBusDay(workdate, -1) exportYC(calibration.date) global.params <- yaml.load_file(file.path(root.dir, "code", "R", "params.yml")) cusipdata <- cusip.data() cashspread.discount <- 0 currdealnames <- dbGetQuery(dbCon, "select updatedate, dealname from latest_deal_model_numbers") ## build portfolio data for(i in seq_along(dealnames)){ deal.name <- dealnames[i] global.params$reinvflag <- reinvflags[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) ##deal.portfolio$SC <- tweakportfolio(deal.portfolio$SC, -cashspread.discount, multiplicative=FALSE) 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.spread5y <- portfoliospread(deal.portfolio, hy21$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.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) } }