diff options
| -rw-r--r-- | R/build_portfolios.R | 17 | ||||
| -rw-r--r-- | R/build_scenarios.R | 36 | ||||
| -rw-r--r-- | python/intex_scenarios.py | 19 |
3 files changed, 47 insertions, 25 deletions
diff --git a/R/build_portfolios.R b/R/build_portfolios.R index 3a38b0bd..69c1e20b 100644 --- a/R/build_portfolios.R +++ b/R/build_portfolios.R @@ -13,7 +13,11 @@ source(file.path(root.dir, "code", "R", "intex_deal_functions.R")) if(length(args) >=2){
dealnames <- args[2:length(args)]
}else{
- dealnames <- unique(dealnamefromcusip(read.table(file.path(root.dir, "scripts", "cusips_to_price.txt"))$V1))
+ data <- read.table(file.path(root.dir, "scripts", "cusips_to_price.txt"))
+ dealnames <- dealnamefromcusip(data$V1)
+ uniqdealnames <- unique(dealnames)
+ reinvflags <- data$V2[match(uniqdealnames, dealnames)]
+ dealnames <- uniqdealnames
unlink(file.path(root.dir, "scripts", "cusips_to_price.txt"))
}
@@ -62,12 +66,17 @@ global.params$defaultloanhazardrate <- 1500 * bps global.params$alpha <- 0.25
global.params$beta <- 15
global.params$shape <- function(T)0.25+(1-exp(-T/5))
-
+global.params$reinvflag <- TRUE
cusipdata <- cusip.data()
currdealnames <- dbGetQuery(dbCon, "select updatedate, dealname from latest_deal_model_numbers")
## build portfolio data
+i <- 1
for(deal.name in dealnames){
+ if(exists("reinvflags")){
+ global.params$reinvflag <- !reinvflags[i]
+ }
+ i <- i+1
if(is.na(deal.name)){
next
}
@@ -76,7 +85,7 @@ for(deal.name in dealnames){ next
}
deal.portfolio <- buildSC.portfolio(deal.name, deal.data, cusipdata, global.params, workdate)
- A <- SPmatrix2(deal.portfolio$SC, deal.data, freq="3 months")
+ 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.dates <- getdealschedule(deal.data)
@@ -120,4 +129,4 @@ for(deal.name in dealnames){ }
}
-write.table(dealnames, file = file.path(root.dir, "scripts", "scenarios.txt"), row.names = F, col.names = F)
+write.table(data.frame(dealnames, as.integer(!reinvflags)), file = file.path(root.dir, "scripts", "scenarios.txt"), row.names = F, col.names = F)
diff --git a/R/build_scenarios.R b/R/build_scenarios.R index 4f0ebee5..bcd561f4 100644 --- a/R/build_scenarios.R +++ b/R/build_scenarios.R @@ -13,10 +13,12 @@ if(length(args) >= 1){ }
if(length(args) >=2){
- dealnames <- args[2:length(args)]
+ dealnames <- args[2:length(args)]
}else{
- dealnames <- read.table(file.path(root.dir, "scripts", "scenarios.txt"))$V1
- unlink(file.path(root.dir, "scripts", "scenarios.txt"))
+ data <- read.table(file.path(root.dir, "scripts", "scenarios.txt"))
+ dealnames <- data$V1
+ reinvflags <- data$V2
+ unlink(file.path(root.dir, "scripts", "scenarios.txt"))
}
source(file.path(root.dir, "code", "R", "intex_deal_functions.R"))
@@ -93,6 +95,7 @@ setEvaluationDate(as.Date(MarkitData$effectiveasof)) support <- seq(0, 1, length = Ngrid)
## 3 months
recoverylag <- 90
+j <- 1
for(deal.name in dealnames){
load(file.path(root.dir, "Scenarios", paste("Portfolios", workdate, sep="_"),
paste(deal.name, "RData", sep=".")))
@@ -165,11 +168,12 @@ for(deal.name in dealnames){ }
## compute reinvestment price
- DC <- DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(L3m$params$tradeDate, deal.datesmonthlylagged))
- df <- DC$discounts
- forwards <- DC$forwards
- reinvprices <- compute.reinvprices(df, forwards, cdrmonthly, recoverymonthly, 0.025, 0.07, 84, 3)
-
+ if(reinvflags[j]){
+ DC <- DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(L3m$params$tradeDate, deal.datesmonthlylagged))
+ df <- DC$discounts
+ forwards <- DC$forwards
+ reinvprices <- compute.reinvprices(df, forwards, cdrmonthly, recoverymonthly, 0.025, 0.07, 84, 3)
+ }
## prev <- scenariosrmonthly[,1]
## loanprices <- c()
## bondprices <- c()
@@ -192,13 +196,17 @@ for(deal.name in dealnames){ write.table(100 * recoverymonthly,
file=file.path(save.dir, paste0(deal.name,"-recovery.csv")),
row.names=F, col.names=F, sep=",")
- write.table(100 * reinvprices$loan,
- file = file.path(save.dir, paste0(deal.name, "-floatreinvprices.csv")),
- row.names=F, col.names=F, sep=",")
- write.table(100 * reinvprices$bond,
- file = file.path(save.dir, paste0(deal.name, "-fixedreinvprices.csv")),
- row.names=F, col.names=F, sep=",")
+ if(reinvflags[j]){
+ write.table(100 * reinvprices$loan,
+ file = file.path(save.dir, paste0(deal.name, "-floatreinvprices.csv")),
+ row.names=F, col.names=F, sep=",")
+ write.table(100 * reinvprices$bond,
+ file = file.path(save.dir, paste0(deal.name, "-fixedreinvprices.csv")),
+ row.names=F, col.names=F, sep=",")
+ }
save(scenariosd, scenariosr, dist.joint, file=file.path(save.dir, paste0(deal.name, ".RData")),
compress="xz")
+
cat("generated scenarios for:", deal.name, "\n")
+ j <- j+1
}
diff --git a/python/intex_scenarios.py b/python/intex_scenarios.py index 331bc31a..55cbbfb0 100644 --- a/python/intex_scenarios.py +++ b/python/intex_scenarios.py @@ -83,13 +83,15 @@ def generate_scenarios(workdate, dealnames, conn, cursor): basedir = os.path.join(common.root, "Scenarios", "Intex curves_" + workdate)
floatreinvprices = []
fixedreinvprices = []
-
- with open(os.path.join(basedir, "csv", dealname + "-floatreinvprices.csv"), "rb") as fhreinv:
- for line in fhreinv:
- floatreinvprices.append(line.rstrip("\n").split(","))
- with open(os.path.join(basedir, "csv", dealname + "-fixedreinvprices.csv"), "rb") as fhreinv:
- for line in fhreinv:
- fixedreinvprices.append(line.rstrip("\n").split(","))
+ try:
+ with open(os.path.join(basedir, "csv", dealname + "-floatreinvprices.csv"), "rb") as fhreinv:
+ for line in fhreinv:
+ floatreinvprices.append(line.rstrip("\n").split(","))
+ with open(os.path.join(basedir, "csv", dealname + "-fixedreinvprices.csv"), "rb") as fhreinv:
+ for line in fhreinv:
+ fixedreinvprices.append(line.rstrip("\n").split(","))
+ except IOError:
+ reinvflag=False
output = os.path.join(basedir, "sss", dealname + ".sss")
if not os.path.exists(os.path.join(basedir, "sss")):
@@ -113,6 +115,9 @@ def generate_scenarios(workdate, dealnames, conn, cursor): newline = "DEAL_NAME=" + dealname.upper() + "\n"
fh2.write(newline)
continue
+ if not reinvflag and "DO_REINV" in line:
+ fh2.write("DO_REINV[DEAL]=0\n")
+ continue
if reinvflag:
if pattern11.match(line):
line = re.sub(pattern11, r"\1{0}\2", line).format(dealname.upper()).rstrip()
|
