diff options
| -rw-r--r-- | R/build_portfolios.R | 58 | ||||
| -rw-r--r-- | R/build_scenarios.R | 26 |
2 files changed, 62 insertions, 22 deletions
diff --git a/R/build_portfolios.R b/R/build_portfolios.R index 8a53c547..7e63d548 100644 --- a/R/build_portfolios.R +++ b/R/build_portfolios.R @@ -8,10 +8,22 @@ if(.Platform$OS.type == "unix"){ }
source(file.path(root.dir, "code", "R", "intex_deal_functions.R"))
+
+dealnames <- unique(dealnamefromcusip(read.table(file.path(root.dir, "scripts", "cusips_to_price.txt"))$V1))
+unlink(file.path(root.dir, "scripts", "cusips_to_price.txt"))
source(file.path(root.dir, "code", "R", "index_definitions.R"))
-workdate <- as.Date('2013-01-24')
-MarkitData <- getMarkitIRData(workdate)
+prevBusDay <- function(){
+ i <- 1
+ while(!isBusinessDay(calendar = "UnitedStates/GovernmentBond", Sys.Date() - i)){
+ i <- i+1
+ }
+ return( Sys.Date() - i )
+}
+
+workdate <- Sys.Date()
+calibration.date <- prevBusDay()
+MarkitData <- getMarkitIRData(calibration.date)
L1m <- buildMarkitYC(MarkitData, dt = 1/12)
L2m <- buildMarkitYC(MarkitData, dt = 1/6)
@@ -47,32 +59,50 @@ global.params$alpha <- 0.25 global.params$beta <- 15
global.params$shape <- function(T)0.25+(1-exp(-T/5))
-dealnames <- listdealnames()
-
-calibration.date <- Sys.Date()
-calibration.date <- '2013-01-24'
cusipdata <- cusip.data()
-do <- function(deal.name){
+
+currdealnames <- dbGetQuery(dbCon, "select updatedate, dealname from latest_deal_model_numbers")
+## build portfolio data
+for(deal.name in dealnames){
deal.data <- getdealdata(deal.name, calibration.date)
- if(deal.data$"Curr Collat Bal" < 1 ||is.na(deal.data$maturity)||deal.data$maturity<=today()+90){
+ if(deal.data$"Curr Collat Bal" < 1 ||is.na(deal.data$maturity)||deal.data$maturity <= today()+90){
return()
}
- deal.portfolio <- buildSC.portfolio(deal.name, deal.data, cusipdata, global.params)
+ deal.portfolio <- buildSC.portfolio(deal.name, deal.data, cusipdata, global.params, workdate)
A <- SPmatrix2(deal.portfolio$SC, deal.data, freq="3 months")
S <- 1 - sapply(deal.portfolio$SC, attr, "recov")
deal.weights <- deal.portfolio$notional/sum(deal.portfolio$notional)
deal.dates <- getdealschedule(deal.data)
deal.spread <- portfoliospread(deal.portfolio, hy19$maturity)
- save.dir <- file.path(root.dir, "Scenarios", paste("Portfolios", calibration.date, sep="_"))
+ 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.dates, deal.spread,
file=file.path(save.dir, paste0(deal.name, ".RData")))
cat(deal.name, "... done\n")
+ dealupdatedate <- currdealnames$updatedate[currdealnames$dealname %in% deal.name]
+ if(length(dealupdatedate) && dealupdatedate == workdate){
+ sqlstring <- sprintf(paste0("UPDATE et_deal_model_numbers SET dealspread = %s, cdopercentage = %s,",
+ "stalepercentage= %s WHERE dealname= '%s' and updatedate = '%s'"),
+ deal.spread,
+ deal.portfolio$cdopercentage,
+ deal.portfolio$stale,
+ deal.name,
+ as.Date(workdate))
+ dbGetQuery(dbCon, sqlstring)
+ }else{
+ sqlstring <- sprintf(paste0("INSERT INTO et_deal_model_numbers ",
+ "VALUES('%s', %s, %s, %s, %s, '%s')"),
+ deal.name,
+ deal.portfolio$cdopercentage,
+ deal.portfolio$stale,
+ deal.spread,
+ crossprod(deal.portfolio$notional, deal.portfolio$price)/100,
+ workdate)
+ dbGetQuery(dbCon, sqlstring)
+ currdealnames <- c(currdealnames, deal.name)
+ }
}
-## build portfolio data
-for(deal.name in dealnames){
- do(deal.name)
-}
+write.table(dealnames, 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 46d4ae3a..076672d1 100644 --- a/R/build_scenarios.R +++ b/R/build_scenarios.R @@ -5,10 +5,20 @@ if(.Platform$OS.type == "unix"){ }
source(file.path(root.dir, "code", "R", "intex_deal_functions.R"))
+dealnames <- read.table(file.path(root.dir, "scripts", "scenarios.txt"))$V1
+unlink(file.path(root.dir, "scripts", "scenarios.txt"))
source(file.path(root.dir, "code", "R", "index_definitions.R"))
-workdate <- as.Date('2013-01-24')
-calibration.date <- as.Date('2013-01-24')
+prevBusDay <- function(){
+ i <- 1
+ while(!isBusinessDay(calendar = "UnitedStates/GovernmentBond", Sys.Date() - i)){
+ i <- i+1
+ }
+ return( Sys.Date() - i )
+}
+
+workdate <- Sys.Date()
+calibration.date <- prevBusDay()
calibration <- read.table(file.path(root.dir, "Scenarios", "Calibration",
paste0("calibration-", calibration.date,".csv")), sep=",", header=T)
@@ -17,13 +27,13 @@ w <- calibration$w rho <- 0.45
Ngrid <- 201
-dealnames <- list.files(file.path(root.dir, "Scenarios", paste0("Portfolios_", calibration.date)),
- pattern="*.RData")
-dealnames <- sapply(strsplit(dealnames, "\\."), function(x)x[1])
+## dealnames <- list.files(file.path(root.dir, "Scenarios", paste0("Portfolios_", calibration.date)),
+## pattern="*.RData")
+## dealnames <- sapply(strsplit(dealnames, "\\."), function(x)x[1])
support <- seq(0, 1, length = Ngrid)
for(deal.name in dealnames){
- load(file.path(root.dir, "Scenarios", paste("Portfolios", calibration.date, sep="_"),
+ load(file.path(root.dir, "Scenarios", paste("Portfolios", workdate, sep="_"),
paste(deal.name, "RData", sep=".")))
dp <- A$DP
@@ -32,7 +42,7 @@ for(deal.name in dealnames){ ppmod <- MFupdate.probC(-Z, w, rho, pp)
dist.joint <- MFlossdist.prepay.joint2(w, Z, rho, dp, dpmod, pp, ppmod,
deal.weights, 1-S, Ngrid)
-
+
distDR <- dist.transform(dist.joint)
## compute E(R|D)
@@ -91,7 +101,7 @@ for(deal.name in dealnames){ recoverymonthly[i,] <- approx(deal.dates, intexrecov[i,], deal.datesmonthly, rule=2)$y
}
- save.dir <- file.path(root.dir, "Scenarios", paste("Intex curves", calibration.date, sep="_"), "csv")
+ save.dir <- file.path(root.dir, "Scenarios", paste("Intex curves", workdate, sep="_"), "csv")
if(!file.exists(save.dir)){
dir.create(save.dir, recursive = T)
}
|
