aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--R/build_portfolios.R3
-rw-r--r--R/build_scenarios.R42
-rw-r--r--R/cds_functions_generic.R10
-rw-r--r--R/intex_deal_functions.R27
4 files changed, 38 insertions, 44 deletions
diff --git a/R/build_portfolios.R b/R/build_portfolios.R
index 91fa666e..acb61c17 100644
--- a/R/build_portfolios.R
+++ b/R/build_portfolios.R
@@ -67,14 +67,13 @@ for(i in seq_along(dealnames)){
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)
deal.spread5y <- portfoliospread(deal.portfolio, hy21$maturity)
deal.spreadatmaturity <- portfoliospread(deal.portfolio)
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.spread5y,
+ 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")
dealupdatedate <- currdealnames$updatedate[currdealnames$dealname %in% deal.name]
diff --git a/R/build_scenarios.R b/R/build_scenarios.R
index 95f47ce7..98b55122 100644
--- a/R/build_scenarios.R
+++ b/R/build_scenarios.R
@@ -16,9 +16,9 @@ if(.Platform$OS.type == "unix"){
}
if(length(args) >= 1){
- workdate <- as.Date(args[1])
+ tradedate <- as.Date(args[1])
}else{
- workdate <- Sys.Date()
+ tradedate <- Sys.Date()
}
if(length(args) >=2){
@@ -39,20 +39,8 @@ source(file.path(root.dir, "code", "R", "etdb.R"))
source(file.path(root.dir, "code", "R", "cds_functions_generic.R"))
source(file.path(root.dir, "code", "R", "cds_utils.R"))
-get.reinvassets <- function(dealname, workdate){
- r <- list()
- sqlstr <- sprintf("select * from et_historicaldealinfo('%s', '%s') where ReinvFlag Is true",
- dealname, workdate)
- data <- dbGetQuery(dbCon, sqlstr)
- if(nrow(data)>0){
- for(i in 1:nrow(data)){
- r[[data$issuername[i]]] <- list(coupontype=data$fixedorfloat[i], liborfloor=data$liborfloor[i])
- }
- }
- return( r )
-}
-
-calibration.date <- prevBusDay(workdate)
+calibration.date <- prevBusDay(tradedate)
+settledate <- getsettledate(tradedate)
calibration <- read.table(file.path(root.dir, "Scenarios", "Calibration",
paste0("calibration-", calibration.date,".csv")), sep=",", header=T)
Z <- calibration$Z
@@ -82,7 +70,7 @@ n.scenarios <- 100
recov.adj <- 1
for(j in seq_along(dealnames)){
- load(file.path(root.dir, "Scenarios", paste("Portfolios", workdate, sep="_"),
+ load(file.path(root.dir, "Scenarios", paste("Portfolios", tradedate, sep="_"),
paste(dealnames[j], "RData", sep=".")))
if(is.na(deal.data$"Reinv End Date")){
reinvflags[j] <- FALSE
@@ -137,12 +125,16 @@ for(j in seq_along(dealnames)){
intexrecov[,i] <- recov.adj * (scenariosr[,i]-scenariosr[,i-1])/(scenariosd[,i]-scenariosd[,i-1])
}
}
-
- cdr <- cdrfromscenarios(scenariosd, deal.dates)
+ deal.dates <- getdealschedule(deal.data, "3 months")
+ deal.dates <- deal.dates[deal.dates>=settledate]
+ cdr <- cdrfromscenarios(scenariosd, deal.dates, tradedate)
## linear approximation for monthly scenarios
- deal.data <- getdealdata(dealnames[j])
+ deal.data <- getdealdata(dealnames[j], tradedate)
deal.datesmonthly <- getdealschedule(deal.data, "1 month")
- deal.datesmonthlylagged <- getdealschedule(deal.data, "1 month", workdate, 92)
+ deal.datesmonthlylagged <- getdealschedule(deal.data, "1 month", lag=92)
+ deal.datesmonthly <- deal.datesmonthly[deal.datesmonthly>=settledate]
+ deal.datesmonthlylagged <- deal.datesmonthly[deal.datesmonthlylagged>=settledate]
+
cdrmonthly <- matrix(0, n.scenarios, length(deal.datesmonthly))
recoverymonthly <- matrix(0, n.scenarios, length(deal.datesmonthly))
scenariosrmonthly <- matrix(0, n.scenarios, length(deal.datesmonthly))
@@ -156,11 +148,11 @@ for(j in seq_along(dealnames)){
recoverymonthly <- pmin(recoverymonthly,1)
recoverymonthly[!is.finite(recoverymonthly)] <- 100
## compute reinvestment price
- if(!is.na(deal.data$"Reinv End Date") && deal.data$"Reinv End Date" <= workdate){
+ if(!is.na(deal.data$"Reinv End Date") && deal.data$"Reinv End Date" <= tradedate){
## we cap rolling maturity at the current weighted average maturity of the portfolio
rollingmaturity <- (crossprod(sapply(deal.portfolio$SC, creditcurve.maturity),
deal.portfolio$notional)/sum(deal.portfolio$notional)
- - as.numeric(workdate))/365*12
+ - as.numeric(tradedate))/365*12
}else{
rollingmaturity <- basecase.rollingmaturity
}
@@ -169,7 +161,7 @@ for(j in seq_along(dealnames)){
## forwards <- DC$forwards
cdrmonthly.dt <- data.table(date=deal.datesmonthly, t(cdrmonthly), key="date")
recoverymonthly.dt <- data.table(date=deal.datesmonthly, t(recoverymonthly), key="date")
- reinvassets <- get.reinvassets(dealnames[j], workdate)
+ reinvassets <- get.reinvassets(dealnames[j], tradedate)
reinvprices <- list()
if(reinvflags[j] && length(reinvassets)>0){
@@ -204,7 +196,7 @@ for(j in seq_along(dealnames)){
}
}
- save.dir <- file.path(root.dir, "Scenarios", paste("Intex curves", workdate, sep="_"), "csv")
+ save.dir <- file.path(root.dir, "Scenarios", paste("Intex curves", tradedate, sep="_"), "csv")
if(!file.exists(save.dir)){
dir.create(save.dir, recursive = T)
}
diff --git a/R/cds_functions_generic.R b/R/cds_functions_generic.R
index 1db5ea7b..aadd99ba 100644
--- a/R/cds_functions_generic.R
+++ b/R/cds_functions_generic.R
@@ -720,7 +720,7 @@ DP2 <- function(sc, dates, startdate=Sys.Date()){
## return( dates )
## }
-getdealschedule <- function(dealdata, freq="1 month", startdate= Sys.Date(), lag=0, adjust=FALSE){
+getdealschedule <- function(dealdata, freq="1 month", lag=0, adjust=FALSE){
if(is.null(dealdata$"Pay Day")||(abs(as.numeric(dealdata$"Deal Next Pay Date"- dealdata$"Pay Day") - 90)>10)){
dealdata$"Pay Day" <- seq(dealdata$"Deal Next Pay Date", length=2, by="-3 months")[2]
}
@@ -735,14 +735,18 @@ getdealschedule <- function(dealdata, freq="1 month", startdate= Sys.Date(), lag
sched <- c(adjust(calstring, sched[-length(sched)]), sched[length(sched)])
base::names(sched) <- NULL
}
-
return(sched)
}
+getsettledate <- function(tradedate, settledays = 3, calendar="UnitedStates/GovernmentBond"){
+ return(advance(calendar=calendar, tradedate, n = settledays, timeUnit = 0))
+}
+
SPmatrix2 <- function(portfolio, dealdata, freq="3 months", startdate=Sys.Date()){
## computes the default and prepay probability matrix of a portfolio
## at the dates specified from dealdata
- dates <- getdealschedule(dealdata, freq, startdate)
+ dates <- getdealschedule(dealdata, freq)
+ dates <- dates[dates>=getsettledate(startdate)]
DP <- matrix(0, length(portfolio), length(dates))
PP <- matrix(0, length(portfolio), length(dates))
for(i in seq_along(portfolio)){
diff --git a/R/intex_deal_functions.R b/R/intex_deal_functions.R
index 40791526..306eb345 100644
--- a/R/intex_deal_functions.R
+++ b/R/intex_deal_functions.R
@@ -276,12 +276,12 @@ buildSC.portfolio <- function(dealname, dealdata, cusipdata, global.params, star
) )
}
-cdrfromscenarios <- function(scenarios, dates){
+cdrfromscenarios <- function(scenarios, dates, tradedate){
## compute the forward cdr rates to pass to intex
## so that we match the default curves in scenarios
cdr <- matrix(0, nrow(scenarios), ncol(scenarios))
for(i in 1:nrow(scenarios)){
- cdr[i,] <- 100*(1-exp(diff(c(0, log(1-scenarios[i,])))))/diff(c(0, yearFrac(today(), dates)))
+ cdr[i,] <- 100*(1-exp(diff(c(0, log(1-scenarios[i,])))))/diff(c(0, yearFrac(tradedate, dates)))
}
return( cdr )
}
@@ -335,16 +335,15 @@ severityfromscenarios <- function(scenariosd, scenariosr){
return(intexseverity)
}
-load.portfolio <- function(dealname){
- load(file.path(root.dir, "Scenarios", paste("Portfolios", calibration.date, sep="_"),
- paste0(dealname, ".RData")), .GlobalEnv)
-}
-
-dealupdatedates <- function(dealnames){
- sqlstring <- sprintf("select dealname, \"Latest Update\" from latest_clo_universe where dealname in ('%s')",
- paste(dealnames, collapse="','"))
- data <- dbGetQuery(dbCon, sqlstring)
- data <- data[match(dealnames, data$dealname),]
- rownames(data) <- c()
- return ( data )
+get.reinvassets <- function(dealname, tradedate){
+ r <- list()
+ sqlstr <- sprintf("select * from et_historicaldealinfo('%s', '%s') where ReinvFlag Is true",
+ dealname, tradedate)
+ data <- dbGetQuery(dbCon, sqlstr)
+ if(nrow(data)>0){
+ for(i in 1:nrow(data)){
+ r[[data$issuername[i]]] <- list(coupontype=data$fixedorfloat[i], liborfloor=data$liborfloor[i])
+ }
+ }
+ return( r )
}