diff options
Diffstat (limited to 'R/build_portfolios.R')
| -rw-r--r-- | R/build_portfolios.R | 220 |
1 files changed, 110 insertions, 110 deletions
diff --git a/R/build_portfolios.R b/R/build_portfolios.R index d5ffda3d..00d65321 100644 --- a/R/build_portfolios.R +++ b/R/build_portfolios.R @@ -1,110 +1,110 @@ -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)
- }
-}
+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) + } +} |
