aboutsummaryrefslogtreecommitdiffstats
path: root/R/tranches_RV_BC.R
diff options
context:
space:
mode:
Diffstat (limited to 'R/tranches_RV_BC.R')
-rw-r--r--R/tranches_RV_BC.R218
1 files changed, 109 insertions, 109 deletions
diff --git a/R/tranches_RV_BC.R b/R/tranches_RV_BC.R
index b0ecae9e..29a922f7 100644
--- a/R/tranches_RV_BC.R
+++ b/R/tranches_RV_BC.R
@@ -1,109 +1,109 @@
-if(.Platform$OS.type == "unix"){
- root.dir <- "/home/share/CorpCDOs"
-}else{
- root.dir <- "//WDSENTINEL/share/CorpCDOs"
-}
-library(logging)
-basicConfig()
-removeHandler('basic.stdout')
-addHandler(writeToFile, file=file.path(root.dir, "logs", "tranches_RV_BC.log"))
-library(optparse)
-option_list <- list(
- make_option(c("-u", "--update"), action="store_true", default=FALSE,
- help="Update from the last run date [default %default]"),
- make_option(c("-c", "--config"), metavar="config_file",
- help="Runs the list of indices provided in CONFIG_FILE"),
- make_option(c("-i1", "--index1"), help="Reference index name"),
- make_option(c("-i2", "--index2"), help="Mapped index name"),
- make_option(c("-t1", "--tenor1"), default="5yr",
- help="Tenor of index1 [default %default]"),
- make_option(c("-t2", "--tenor2"), default="5yr",
- help="Tenor of index2 [default %default]"),
- make_option("--until", default=Sys.Date()-1, type="character",
- help="last day to run [default %default]"))
-
-args <- parse_args(OptionParser(option_list=option_list,
- description=
- "This script prices index2 using the skew from index1."))
-if(is.null(args$config)){
- if(is.null(args$index1) || is.null(args$index2)){
- stop("Please provide both index1 and index2")
- }
- runs <- list(mappings=list(c(args$index1, args$tenor1, args$index2, args$tenor2)))
-}else{
- library(yaml)
- runs <- yaml.load_file(file.path(root.dir, "code", "etc", args$config))
-}
-
-source(file.path(root.dir, "code", "R", "optimization.R"))
-source(file.path(root.dir, "code", "R", "calibration.R"), chdir=TRUE)
-source(file.path(root.dir, "code", "R", "serenitasdb.R"))
-source(file.path(root.dir, "code", "R", "creditIndex.R"))
-source(file.path(root.dir, "code", "R", "tranche_functions.R"))
-
-for(r in runs$mappings){
- index.name1 <- r[1]
- tenor1 <- r[2]
- index.name2 <- r[3]
- tenor2 <- r[4]
- filename <- file.path(root.dir,"Tranche_data","Runs",
- paste0(paste(index.name2, tenor2, "using", index.name1, tenor1),".csv"))
- if(!file.exists(filename)){
- args$update <- FALSE
- }
- if(args$update){
- runfile <- read.csv(filename)
- begin.date <- as.Date(runfile[nrow(runfile), 1])+1
- }else{
- begin.date <- switch(index.name1,
- hy23 = as.Date("2014-10-16"),
- hy21 = as.Date("2013-10-04"),
- hy19 = as.Date("2013-10-04"),
- ig21 = as.Date("2013-09-26"),
- ig23 = as.Date("2014-10-14"),
- ig25 = as.Date("2015-09-22"),
- ig27 = as.Date("2015-09-27"),
- hy25 = as.Date("2015-10-01"),
- hy27 = as.Date("2016-10-04"),
- xo24 = as.Date("2015-09-28"),
- eu24 = as.Date("2015-09-23"))
- }
- if(begin.date > as.Date(args$until)){
- next
- }
- alldates <- seq(begin.date, as.Date(as.character(args$until)), by="1 day")
- cal <- Calendar$new("UnitedStates/GovernmentBond")
- bus.dates <- alldates[cal$isBusinessDay(alldates)]
- addheaders <- TRUE
- for(j in seq_along(bus.dates)){
- tradedate <- bus.dates[j]
- index1 <- load.index(index.name1, tenor1, tradedate)
- index2 <- load.index(index.name2, tenor2, tradedate)
- if(any(c(is.null(index1), is.null(index2)))){
- loginfo(paste("skipping pair", index.name1, tenor1, index.name2, tenor2,
- "for date", as.character(tradedate)))
- next
- }
- accrued2 <- cdsAccrued(tradedate, index2$tranches$running)
- mappedpv <- list()
- for(method in c("ATM", "TLP", "PM")){
- index2$rho <- adjust.skew(index1, index2, method)
- if(tolower(substr(index2$name, 1, 2)) %in% c("ig", "xo", "eu")){
- mappedpv[[method]] <- BCtranche.pv(index2, protection=TRUE)$bp + accrued2
- }else{
- mappedpv[[method]] <- BCtranche.pv(index2)$bp - accrued2
- }
- }
- row <- c(as.character(tradedate), index2$tranches$upfront, unlist(mappedpv)*100)
- if(addheaders && !args$update){
- headers <- c("date", paste(index2$name, row.names(index2$tranches), "Quotes"),
- paste(index2$name, row.names(index2$tranches), "ATM PV"),
- paste(index2$name, row.names(index2$tranches), "TLP PV"),
- paste(index2$name, row.names(index2$tranches), "PM PV"))
- cat(paste(headers, collapse=","), "\n", file=filename)
- }
- addheaders <- FALSE
- cat(paste(row, collapse=","), sep="\n", file=filename, append=TRUE)
- }
-
-}
+if(.Platform$OS.type == "unix"){
+ root.dir <- "/home/share/CorpCDOs"
+}else{
+ root.dir <- "//WDSENTINEL/share/CorpCDOs"
+}
+library(logging)
+basicConfig()
+removeHandler('basic.stdout')
+addHandler(writeToFile, file=file.path(root.dir, "logs", "tranches_RV_BC.log"))
+library(optparse)
+option_list <- list(
+ make_option(c("-u", "--update"), action="store_true", default=FALSE,
+ help="Update from the last run date [default %default]"),
+ make_option(c("-c", "--config"), metavar="config_file",
+ help="Runs the list of indices provided in CONFIG_FILE"),
+ make_option(c("-i1", "--index1"), help="Reference index name"),
+ make_option(c("-i2", "--index2"), help="Mapped index name"),
+ make_option(c("-t1", "--tenor1"), default="5yr",
+ help="Tenor of index1 [default %default]"),
+ make_option(c("-t2", "--tenor2"), default="5yr",
+ help="Tenor of index2 [default %default]"),
+ make_option("--until", default=Sys.Date()-1, type="character",
+ help="last day to run [default %default]"))
+
+args <- parse_args(OptionParser(option_list=option_list,
+ description=
+ "This script prices index2 using the skew from index1."))
+if(is.null(args$config)){
+ if(is.null(args$index1) || is.null(args$index2)){
+ stop("Please provide both index1 and index2")
+ }
+ runs <- list(mappings=list(c(args$index1, args$tenor1, args$index2, args$tenor2)))
+}else{
+ library(yaml)
+ runs <- yaml.load_file(file.path(root.dir, "code", "etc", args$config))
+}
+
+source(file.path(root.dir, "code", "R", "optimization.R"))
+source(file.path(root.dir, "code", "R", "calibration.R"), chdir=TRUE)
+source(file.path(root.dir, "code", "R", "serenitasdb.R"))
+source(file.path(root.dir, "code", "R", "creditIndex.R"))
+source(file.path(root.dir, "code", "R", "tranche_functions.R"))
+
+for(r in runs$mappings){
+ index.name1 <- r[1]
+ tenor1 <- r[2]
+ index.name2 <- r[3]
+ tenor2 <- r[4]
+ filename <- file.path(root.dir,"Tranche_data","Runs",
+ paste0(paste(index.name2, tenor2, "using", index.name1, tenor1),".csv"))
+ if(!file.exists(filename)){
+ args$update <- FALSE
+ }
+ if(args$update){
+ runfile <- read.csv(filename)
+ begin.date <- as.Date(runfile[nrow(runfile), 1])+1
+ }else{
+ begin.date <- switch(index.name1,
+ hy23 = as.Date("2014-10-16"),
+ hy21 = as.Date("2013-10-04"),
+ hy19 = as.Date("2013-10-04"),
+ ig21 = as.Date("2013-09-26"),
+ ig23 = as.Date("2014-10-14"),
+ ig25 = as.Date("2015-09-22"),
+ ig27 = as.Date("2015-09-27"),
+ hy25 = as.Date("2015-10-01"),
+ hy27 = as.Date("2016-10-04"),
+ xo24 = as.Date("2015-09-28"),
+ eu24 = as.Date("2015-09-23"))
+ }
+ if(begin.date > as.Date(args$until)){
+ next
+ }
+ alldates <- seq(begin.date, as.Date(as.character(args$until)), by="1 day")
+ cal <- Calendar$new("UnitedStates/GovernmentBond")
+ bus.dates <- alldates[cal$isBusinessDay(alldates)]
+ addheaders <- TRUE
+ for(j in seq_along(bus.dates)){
+ tradedate <- bus.dates[j]
+ index1 <- load.index(index.name1, tenor1, tradedate)
+ index2 <- load.index(index.name2, tenor2, tradedate)
+ if(any(c(is.null(index1), is.null(index2)))){
+ loginfo(paste("skipping pair", index.name1, tenor1, index.name2, tenor2,
+ "for date", as.character(tradedate)))
+ next
+ }
+ accrued2 <- cdsAccrued(tradedate, index2$tranches$running)
+ mappedpv <- list()
+ for(method in c("ATM", "TLP", "PM")){
+ index2$rho <- adjust.skew(index1, index2, method)
+ if(tolower(substr(index2$name, 1, 2)) %in% c("ig", "xo", "eu")){
+ mappedpv[[method]] <- BCtranche.pv(index2, protection=TRUE)$bp + accrued2
+ }else{
+ mappedpv[[method]] <- BCtranche.pv(index2)$bp - accrued2
+ }
+ }
+ row <- c(as.character(tradedate), index2$tranches$upfront, unlist(mappedpv)*100)
+ if(addheaders && !args$update){
+ headers <- c("date", paste(index2$name, row.names(index2$tranches), "Quotes"),
+ paste(index2$name, row.names(index2$tranches), "ATM PV"),
+ paste(index2$name, row.names(index2$tranches), "TLP PV"),
+ paste(index2$name, row.names(index2$tranches), "PM PV"))
+ cat(paste(headers, collapse=","), "\n", file=filename)
+ }
+ addheaders <- FALSE
+ cat(paste(row, collapse=","), sep="\n", file=filename, append=TRUE)
+ }
+
+}