library("RQuantLib") library("yaml") args <- commandArgs(trailingOnly=TRUE) if(.Platform$OS.type == "unix"){ root.dir <- "/home/share/CorpCDOs" }else{ root.dir <- "//WDSENTINEL/share/CorpCDOs" } code.dir <- if(Sys.getenv("CODE_DIR")=="") root.dir else Sys.getenv("CODE_DIR") source(file.path(code.dir, "code", "R", "intex_deal_functions.R"), chdir=TRUE) source(file.path(code.dir, "code", "R", "yieldcurve.R")) source(file.path(code.dir, "code", "R", "serenitasdb.R"), chdir=TRUE) source(file.path(code.dir, "code", "R", "creditIndex.R")) if(interactive()) { ## enter the parameters here workdate <- as.Date("2016-02-17") dealnames <- c("cent15") reinvflags <- c(TRUE) } else { 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 } workdate <- if(length(args) >=1) as.Date(args[1]) else Sys.Date() } calibration.date <- addBusDay(workdate, -1) exportYC(calibration.date) index <- creditIndex("hy27") index <- set.index.desc(index, calibration.date) global.params <- yaml.load_file(file.path(root.dir, "code", "etc", "params.yml")) cusipdata <- cusip.data(workdate) cashspread.discount <- 0 currdealnames <- dbGetQuery(etdb, "select dealname from et_deal_model_numbers where updatedate=$1", list(workdate)) ## 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) mv <- crossprod(deal.portfolio$notional, deal.portfolio$price)/100 nullcurves <- unlist(lapply(deal.portfolio$SC, is.null)) deal.portfolio$SC <- deal.portfolio$SC[!nullcurves] deal.portfolio$notional <- deal.portfolio$notional[!nullcurves] A <- SPmatrix2(deal.portfolio$SC, deal.data, freq="Quarterly", workdate) S <- 1 - sapply(deal.portfolio$SC, attr, "recov") deal.weights <- deal.portfolio$notional/sum(deal.portfolio$notional) deal.spread5y <- portfoliospread(deal.portfolio, index$maturity, workdate) deal.spreadatmaturity <- portfoliospread(deal.portfolio, ,workdate) 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") if(deal.name %in% currdealnames$dealname){ sqlstring <- paste0("UPDATE et_deal_model_numbers SET dealspread5y = $1,", "dealspread = $2, cdopercentage = $3, stalepercentage= $4, ", "marketvalue = $5", "WHERE dealname= $6 and updatedate = $7") r <- dbSendQuery(etdb, sqlstring,params = list(deal.spread5y, deal.spreadatmaturity, deal.portfolio$cdopercentage, deal.portfolio$stale, mv, deal.name, workdate)) if(dbHasCompleted(r)){ dbClearResult(r) } }else{ sqlstring <- paste0("INSERT INTO et_deal_model_numbers", "(dealname, cdopercentage, stalepercentage,", "dealspread5y, marketvalue, updatedate, dealspread) ", "VALUES($1, $2, $3, $4, $5, $6, $7)") r <- dbSendQuery(etdb, sqlstring, params = list(deal.name, deal.portfolio$cdopercentage, deal.portfolio$stale, deal.spread5y, mv, workdate, deal.spreadatmaturity)) if(dbHasCompleted(r)){ dbClearResult(r) } currdealnames <- c(currdealnames, deal.name) } }