diff options
| -rw-r--r-- | R/build_SC.R | 16 | ||||
| -rw-r--r-- | R/calibrate_tranches.R | 9 | ||||
| -rw-r--r-- | R/cds_functions_generic.R | 2 | ||||
| -rw-r--r-- | R/intex_deal_functions.R | 34 | ||||
| -rw-r--r-- | R/load_cf.R | 36 |
5 files changed, 66 insertions, 31 deletions
diff --git a/R/build_SC.R b/R/build_SC.R index ccd272d0..2a2d07b4 100644 --- a/R/build_SC.R +++ b/R/build_SC.R @@ -47,6 +47,11 @@ global.params$shape <- function(T)0.25+(1-exp(-T/5)) dealnames <- listdealnames()
dealnames <- c("abcl071", "ammcclo5", "atr4cdo", "atr5cdo", "blumt3", "callid6", "goldl5", "limes", "oceant2", "symph4")
calibration.date <- Sys.Date()
+r <- c()
+for(deal in dealnames){
+ load.portfolio(deal)
+ r <- rbind(r, c(sum(deal.portfolio$notional), crossprod(deal.portfolio$notional, deal.portfolio$price)/100))
+}
cusipdata <- cusip.data()
do <- function(deal.name){
@@ -70,7 +75,8 @@ do <- function(deal.name){ }
load.portfolio <- function(dealname){
- load(file.path(root.dir, "Scenarios", paste("Portfolios", calibration.date, sep="_"), paste0(dealname, ".RData")), .GlobalEnv)
+ load(file.path(root.dir, "Scenarios", paste("Portfolios", calibration.date, sep="_"),
+ paste0(dealname, ".RData")), .GlobalEnv)
}
## build portfolio data
@@ -78,8 +84,9 @@ for(deal.name in dealnames){ do(deal.name)
}
-calibration <- read.table(file.path(root.dir, "Scenarios", paste0("calibration-", calibration.date,".csv")),
- sep=",", header=T)
+calibration <- read.table(file.path(root.dir, "Scenarios", "Calibration",
+ paste0("calibration-", calibration.date,".csv")), sep=",", header=T)
+
Z <- calibration$Z
w <- calibration$w
@@ -90,7 +97,7 @@ clusterExport(cl, list("root.dir", "shockprob", "lossdistC.prepay.joint", "lossr support <- seq(0, 1, length=Ngrid)
useCluster <- TRUE
-for(deal.name in dealnames){
+for(deal.name in dealnames[10]){
load(file.path(root.dir, "Scenarios", paste("Portfolios", calibration.date, sep="_"), paste(deal.name, "RData", sep=".")))
dp <- A$DP
@@ -147,7 +154,6 @@ for(deal.name in dealnames){ cdr <- cdrfromscenarios(scenariosd, deal.dates)
intexrecov <- recoveryfromscenarios(scenariosd, scenariosr)
-
## linear approximation for monthly scenarios
deal.data <- getdealdata(deal.name)
deal.datesmonthly <- getdealschedule(deal.data, "1 month")
diff --git a/R/calibrate_tranches.R b/R/calibrate_tranches.R index f71ec719..55315587 100644 --- a/R/calibrate_tranches.R +++ b/R/calibrate_tranches.R @@ -59,14 +59,14 @@ for(i in 1:nrow(nondefaulted)){ }
issuerweights <- rep(1/length(hy19portfolio), length(hy19portfolio))
-hy19$indexref <- 1.0125
+hy19$indexref <- 1.025
hy19portfolio.tweaked <- tweakcurves(hy19portfolio, hy19)
SurvProb <- SPmatrix(hy19portfolio.tweaked, hy19)
## load common parameters
K <- c(0, 0.15, 0.25, 0.35, 1)
Kmodified <- adjust.attachments(K, hy19$loss, hy19$factor)
-tranche.upf <- c(40.625, 94.15, 105.6525, 116)
+tranche.upf <- c(42.25, 95.375, 108.28125, 116.8125)
tranche.running <- c(0.05, 0.05, 0.05, 0.05)
Ngrid <- 2*nrow(nondefaulted)+1
@@ -110,7 +110,7 @@ defaultprob <- 1 - SurvProb p <- defaultprob
rho <- 0.45
-clusterExport(cl, list("shockprob", "issuerweights", "rho", "Z", "lossrecovdist.term",
+clusterExport(cl, list("root.dir", "shockprob", "issuerweights", "rho", "Z", "lossrecovdist.term",
"lossrecovdist", "lossdistC", "Ngrid",
"tranche.pvvec", "tranche.pv", "tranche.pl", "tranche.cl",
"trancheloss", "trancherecov", "pos", "Kmodified", "cs"))
@@ -152,7 +152,8 @@ for(l in 1:100){ cat(err,"\n")
}
-write.table(data.frame(Z=Z, w=w.mod), file=file.path(root.dir, "Scenarios", paste0("calibration-", Sys.Date(), ".csv")), col.names=T, row.names=F, sep=",")
+write.table(data.frame(Z=Z, w=w.mod), file=file.path(root.dir, "Scenarios", "Calibration", paste0("calibration-", Sys.Date(), ".csv")), col.names=T, row.names=F, sep=",")
+save(singlenames.data, hy19, tranche.upf, file = file.path(root.dir, "Scenarios", "Calibration", paste0("marketdata-", Sys.Date(), ".RData")))
## computes MFdeltas
newportf <- hy19portfolio.tweaked
diff --git a/R/cds_functions_generic.R b/R/cds_functions_generic.R index 155b5024..08b5f508 100644 --- a/R/cds_functions_generic.R +++ b/R/cds_functions_generic.R @@ -485,7 +485,7 @@ bondhazardrate.shaped <- function(collateral, shape, R=0.4, alpha=0.25, beta=15) }
sc@h <- sc@h+dh
counter <- counter+1
- if(counter>=100){
+ if(counter >= 100){
return( NULL )
stop("didn't reach convergence")
}
diff --git a/R/intex_deal_functions.R b/R/intex_deal_functions.R index bb8c09d3..640b7cd0 100644 --- a/R/intex_deal_functions.R +++ b/R/intex_deal_functions.R @@ -283,20 +283,40 @@ recoveryfromscenarios <- function(scenariosd, scenariosr){ ## compute the forward recovery rate based on the term
## structure of recovery scenarios
## we run into trouble for very stressed scenarios
- ## this code should cap the scenarios at 0 it this happens
+ ## this code should cap the scenarios at 0 if this happens
intexrecov <- matrix(0, n.scenarios, ncol(scenariosr))
for(i in 1:n.scenarios){
current <- 1
intexrecov[i,1] <- scenariosr[i,1]
for(t in 2:ncol(scenariosr)){
w <- scenariosd[i,current]/scenariosd[i,t]
- if(scenariosr[i,t]-w*scenariosr[i,current]>=0){
- intexrecov[i,t] <- (scenariosr[i,t]-w*scenariosr[i,current])/(1-w)
- current <- current+1
- }else{
- intexrecov[i,t] <- 0
- }
+ ## if(scenariosr[i,t]-w*scenariosr[i,current]>=0){
+ ## intexrecov[i,t] <- (scenariosr[i,t]-w*scenariosr[i,current])/(1-w)
+ ## current <- current+1
+ ## }else{
+ ## intexrecov[i,t] <- 0
+ ## }
+ intexrecov[i,t] <- (scenariosr[i,t]-w*scenariosr[i,current])/(1-w)
+ current <- current + 1
}
}
return(intexrecov)
}
+
+severityfromscenarios <- function(scenariosd, scenariosr){
+ ## compute the forward recovery rate based on the term
+ ## structure of recovery scenarios
+ ## we run into trouble for very stressed scenarios
+ ## this code should cap the scenarios at 0 if this happens
+ intexseverity <- matrix(0, n.scenarios, ncol(scenariosr))
+ for(i in 1:n.scenarios){
+ current <- 1
+ intexseverity[i,1] <- 1-scenariosr[i,1]
+ for(t in 2:ncol(scenariosr)){
+ w <- scenariosd[i,current]/scenariosd[i,t]
+ intexseverity[i,t] <- 1 - (scenariosr[i,t]-w*scenariosr[i,current])/(1-w)
+ current <- current+1
+ }
+ }
+ return(intexseverity)
+}
diff --git a/R/load_cf.R b/R/load_cf.R index ac25f3d0..0172bca5 100644 --- a/R/load_cf.R +++ b/R/load_cf.R @@ -11,22 +11,30 @@ sanitize.column <- function(vec){ }
fields <- c("Cashflow", "Principal", "Interest")
-dealnames <- c("abcl071", "ammccl05")
+dealnames <- c("abcl071")
+tranches <- c("", "COLLAT_REINVEST", "COLLAT_INITIAL")
for(dealname in dealnames){
r <- matrix(0, n.scenarios, 3)
- for(i in 1:n.scenarios){
- filename <- paste0(paste(toupper(dealname), "CF", paste0("Scen", i), sep="-"), ".txt")
- data <- read.table(file.path(root.dir, "Scenarios", paste0("Prices_", workdate), filename), sep="\t", header=T)
- data <- data[-(1:2),1:4]
- data$Date <- as.Date(data$Date, "%b %d, %Y")
- data <- data[data$Date>=today(),]
- DC <- DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(L3m$params$tradeDate, data$Date))
- pv <- c()
- for(field in fields){
- data[,field] <- sanitize.column(data[,field])
- pv <- c(pv, crossprod(DC$discounts, data[,field]))
+ for(tranche in tranches){
+ for(i in 1:n.scenarios){
+ if(tranche == ""){
+ filename <- paste0(paste(toupper(dealname), "CF", paste0("Scen", i), sep="-"), ".txt")
+ }else{
+ filename <- paste0(paste(toupper(dealname), tranche, "CF", paste0("Scen", i), sep="-"), ".txt")
+ }
+
+ data <- read.table(file.path(root.dir, "Scenarios", paste0("Prices_", workdate), filename), sep="\t", header=T)
+ data <- data[-(1:2),1:4]
+ data$Date <- as.Date(data$Date, "%b %d, %Y")
+ data <- data[data$Date>=today(),]
+ DC <- DiscountCurve(L3m$params, L3m$tsQuotes, yearFrac(L3m$params$tradeDate, data$Date))
+ pv <- c()
+ for(field in fields){
+ data[,field] <- sanitize.column(data[,field])
+ pv <- c(pv, crossprod(DC$discounts, data[,field]))
+ }
+ r[i,] <- pv
}
- r[i,] <- pv
}
+ colnames(r) <- fields
}
-colnames(r) <- fields
|
