aboutsummaryrefslogtreecommitdiffstats
path: root/R/build_portfolios.R
diff options
context:
space:
mode:
Diffstat (limited to 'R/build_portfolios.R')
-rw-r--r--R/build_portfolios.R220
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)
+ }
+}