diff options
Diffstat (limited to 'R')
| -rw-r--r-- | R/build_scenarios.R | 97 |
1 files changed, 50 insertions, 47 deletions
diff --git a/R/build_scenarios.R b/R/build_scenarios.R index 577d6169..16c995c6 100644 --- a/R/build_scenarios.R +++ b/R/build_scenarios.R @@ -23,6 +23,7 @@ if(length(args) >=2){ source(file.path(root.dir, "code", "R", "intex_deal_functions.R"))
source(file.path(root.dir, "code", "R", "index_definitions.R"))
+source(file.path(root.dir, "code", "R", "etdb.R"))
prevBusDay <- function(workdate = Sys.Date()){
i <- 1
@@ -33,26 +34,22 @@ prevBusDay <- function(workdate = Sys.Date()){ return( workdate - i )
}
-get.reinvassets <- function(dealname){
- r <- list(REINV_TBA1=character(0), REINV_TBA2=character(0))
- collatfolders <- list.dirs(file.path(root.dir, "data"), recursive=FALSE)
- collatfolders <- sort(collatfolders[grep("Collaterals", collatfolders)])
- filename <- paste0(toupper(dealname), ",AD.txt")
- for(folder in collatfolders){
- l = list.files(pattern=filename, folder)
- if(length(l)!=0){
- data <- read.csv(file.path(folder, filename), header=T, sep="\t", quote="")
- r$REINV_TBA1 <- data[data[,"ID.Number"]=="REINV_TBA1","Fixed.or.Float"]
- r$REINV_TBA2 <- data[data[,"ID.Number"]=="REINV_TBA2","Fixed.or.Float"]
- }
+get.reinvassets <- function(dealname, workdate){
+ r <- vector("list", 2)
+ names(r) <- paste0("REINV_TBA", 1:2)
+ sqlstr <- sprintf("select * from et_historicaldealinfo('%s', '%s') where ReinvFlag Is true",
+ dealname, workdate)
+ data <- dbGetQuery(dbCon, sqlstr)
+ for(i in 1:dim(data)[1]){
+ r[[data$issuername[i]]] <- data$fixedorfloat[i]
}
return( r )
}
convert.reinvtoperct <- function(d){
newd <- list(REINV_TBA1=numeric(0), REINV_TBA2=numeric(0))
- if(length(d$REINV_TBA2)==0 || d$REINV_TBA1 == d$REINV_TBA2){
- if(d$REINV_TBA1=="Float"){
+ if(is.null(d["REINV_TBA2"]) || d["REINV_TBA1"] == d["REINV_TBA2"]){
+ if(d["REINV_TBA1"]=="Float"){
return(c(1,0))
}else{
return(c(0,1))
@@ -214,41 +211,47 @@ for(j in seq_along(dealnames)){ DC <- DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(L3m$params$tradeDate, deal.datesmonthlylagged))
df <- DC$discounts
forwards <- DC$forwards
+ #we need to jack up the reinvestment prices somehow so let's add 1% tweak...
+ reinvprices.tweak <- compute.reinvprices(df, forwards, cdrmonthly, recoverymonthly, reinvspread+0.0075,
+ reinvfixed+0.0075, rollingmaturity, reinvlag)
reinvprices <- compute.reinvprices(df, forwards, cdrmonthly, recoverymonthly, reinvspread,
- reinvfixed, rollingmaturity, reinvlag)
+ reinvfixed, rollingmaturity, reinvlag)
- reinvassets <- convert.reinvtoperct(get.reinvassets(dealnames[j]))
- ## all amounts are in units of current collateral balance
- reinvdollar <- matrix(0, n.scenarios, length(deal.datesmonthly))
- maturingbalance <- matrix(0, n.scenarios, length(deal.datesmonthly))
- reinvdollar[,1] <- scenariosrmonthly[,1] + deal.data$"Principal Bal"/deal.data$"Curr Collat Bal"
- loanprices <- crossprod(reinvdollar[,1], reinvprices$loan[,1])/sum(reinvdollar[,1])
- bondprices <- c(crossprod(reinvdollar[,1], reinvprices$bond[,1])/sum(reinvdollar[,1]))
- maturingbalance[,min(1+rollingmaturity, length(deal.datesmonthly))] <-
- reinvdollar[,1]/crossprod(reinvassets, c(loanprices[1], bondprices[1]))
- reinvbalance <- matrix(0, n.scenarios, length(deal.datesmonthly))
- for(t in 2:dim(cdrmonthly)[2]){
- reinvdollar <- scenariosrmonthly[,t]-scenariosrmonthly[,t-1] +
- reinvbalance * cdrmonthly[,t]/100 * recoverymonthly[,t] *
- yearFrac(deal.datesmonthly[t-1], deal.datesmonthly[t])
- if(t==(dim(cdrmonthly)[2]-1)){
- reinvbalance[,t] <- maturingbalance[,length(deal.datesmonthly)]
- }else if(t==dim(cdrmonthly)[2]){
- reinvbalance[,t] <- 0
- }else{
- reinvbalance[,t] <- rowSums(maturingbalance[,(t+1):length(deal.datesmonthly)])
- }
- reinvdollar[,t] <- scenariosrmonthly[,t] - scenariosrmonthly[,t-1] +
- reinvbalance[,t] * cdrmonthly[,t]/100 * recoverymonthly[,t] *
- yearFrac(deal.datesmonthly[t-1], deal.datesmonthly[t])
- loanprices <- c(loanprices, crossprod(reinvdollar[,t], reinvprices$loan[,t])/sum(reinvdollar[,t]))
- bondprices <- c(bondprices, crossprod(reinvdollar[,t], reinvprices$bond[,t])/sum(reinvdollar[,t]))
- maturingbalance[,min(t+rollingmaturity, length(deal.datesmonthly))] <-
- reinvdollar[,t]/crossprod(reinvassets, c(loanprices[t], bondprices[t]))
- maturingbalance[,min(t+rollingmaturity, length(deal.datesmonthly))] <-
- maturingbalance[,min(t+rollingmaturity, length(deal.datesmonthly))] +
- reinvdollar[,t]/loanprices[t]
- }
+ loanprices <- apply(reinvprices.tweak$loan, 2, mean)
+ bondprices <- apply(reinvprices.tweak$bond, 2, mean)
+
+ ## reinvassets <- convert.reinvtoperct(get.reinvassets(dealnames[j]))
+ ## ## all amounts are in units of current collateral balance
+ ## reinvdollar <- matrix(0, n.scenarios, length(deal.datesmonthly))
+ ## maturingbalance <- matrix(0, n.scenarios, length(deal.datesmonthly))
+ ## reinvdollar[,1] <- scenariosrmonthly[,1] + deal.data$"Principal Bal"/deal.data$"Curr Collat Bal"
+ ## loanprices <- crossprod(reinvdollar[,1], reinvprices$loan[,1])/sum(reinvdollar[,1])
+ ## bondprices <- c(crossprod(reinvdollar[,1], reinvprices$bond[,1])/sum(reinvdollar[,1]))
+ ## maturingbalance[,min(1+rollingmaturity, length(deal.datesmonthly))] <-
+ ## reinvdollar[,1]/crossprod(reinvassets, c(loanprices[1], bondprices[1]))
+ ## reinvbalance <- matrix(0, n.scenarios, length(deal.datesmonthly))
+ ## for(t in 2:dim(cdrmonthly)[2]){
+ ## reinvdollar <- scenariosrmonthly[,t]-scenariosrmonthly[,t-1] +
+ ## reinvbalance * cdrmonthly[,t]/100 * recoverymonthly[,t] *
+ ## yearFrac(deal.datesmonthly[t-1], deal.datesmonthly[t])
+ ## if(t==(dim(cdrmonthly)[2]-1)){
+ ## reinvbalance[,t] <- maturingbalance[,length(deal.datesmonthly)]
+ ## }else if(t==dim(cdrmonthly)[2]){
+ ## reinvbalance[,t] <- 0
+ ## }else{
+ ## reinvbalance[,t] <- rowSums(maturingbalance[,(t+1):length(deal.datesmonthly)])
+ ## }
+ ## reinvdollar[,t] <- scenariosrmonthly[,t] - scenariosrmonthly[,t-1] +
+ ## reinvbalance[,t] * cdrmonthly[,t]/100 * recoverymonthly[,t] *
+ ## yearFrac(deal.datesmonthly[t-1], deal.datesmonthly[t])
+ ## loanprices <- c(loanprices, crossprod(reinvdollar[,t], reinvprices$loan[,t])/sum(reinvdollar[,t]))
+ ## bondprices <- c(bondprices, crossprod(reinvdollar[,t], reinvprices$bond[,t])/sum(reinvdollar[,t]))
+ ## maturingbalance[,min(t+rollingmaturity, length(deal.datesmonthly))] <-
+ ## reinvdollar[,t]/crossprod(reinvassets, c(loanprices[t], bondprices[t]))
+ ## maturingbalance[,min(t+rollingmaturity, length(deal.datesmonthly))] <-
+ ## maturingbalance[,min(t+rollingmaturity, length(deal.datesmonthly))] +
+ ## reinvdollar[,t]/loanprices[t]
+ ## }
}
save.dir <- file.path(root.dir, "Scenarios", paste("Intex curves", workdate, sep="_"), "csv")
|
