aboutsummaryrefslogtreecommitdiffstats
path: root/R/intex_deal_functions.R
diff options
context:
space:
mode:
Diffstat (limited to 'R/intex_deal_functions.R')
-rw-r--r--R/intex_deal_functions.R40
1 files changed, 37 insertions, 3 deletions
diff --git a/R/intex_deal_functions.R b/R/intex_deal_functions.R
index 640b7cd0..aaff1bb7 100644
--- a/R/intex_deal_functions.R
+++ b/R/intex_deal_functions.R
@@ -95,7 +95,7 @@ vanillabondprice <- function(h, collateral, prepay=TRUE) {
}
return( bondprice(cs, dpc, R) )
}
-f
+
dvanillabondprice <- function(hazardrate, collateral) {
R <- recovery(collateral)
cs <- couponSchedule(collateral$nextpaydate, collateral$maturity,
@@ -172,7 +172,7 @@ buildSC <- function(line.item, reinvdate, dealmaturity, global.params, startdate
## cat(line.item$issuername, "\n")
if(!is.na(line.item$iscdo) && line.item$iscdo && is.na(line.item$price)){
##we have prices for some cdos e.g. 210795PS3
- if(length(line.item$orig_moody)==0){
+ if(line.item$orig_moody == "NA" || length(line.item$orig_moody)==0){
line.item$orig_moody <- "NR"
}
line.item$price <- as.numeric(global.params$cdoprices[gsub("\\d", "", line.item$orig_moody)])
@@ -239,6 +239,9 @@ buildSC.portfolio <- function(dealname, dealdata, cusipdata, global.params, star
betavec <- c()
pricevec <- c()
fields <- c("maturity", "fixedorfloat", "spread", "grosscoupon", "orig_moody")
+ cdonotional <- 0
+ missingpricenotional <- 0
+ totalnotional <- 0
for(i in 1:nrow(collatdata)){
line.item <- collatdata[i,]
if( is.na(line.item$maturity) ){
@@ -259,6 +262,14 @@ buildSC.portfolio <- function(dealname, dealdata, cusipdata, global.params, star
}
}
}
+ totalnotional <- totalnotional + line.item$currentbalance
+ if(!is.na(line.item$iscdo) && line.item$iscdo){
+ cdonotional <- cdonotional + line.item$currentbalance
+ }else{
+ if(is.na(line.item$price)){
+ missingpricenotional <- missingpricenotional + line.item$currentbalance
+ }
+ }
temp <- buildSC(line.item, dealdata$"Reinv End Date", dealdata$maturity, global.params, startdate)
notionalvec <- c(notionalvec, temp$notional)
SCvec <- c(SCvec, temp$SC)
@@ -266,7 +277,9 @@ buildSC.portfolio <- function(dealname, dealdata, cusipdata, global.params, star
betavec <- c(betavec, if(!is.na(line.item$iscdo) && line.item$iscdo) 1 else
global.params$defaultcorr)
}
- return( list(notional=notionalvec, SC=SCvec, beta=betavec, price = pricevec) )
+ return( list(notional=notionalvec, SC=SCvec, beta=betavec, price = pricevec,
+ cdopercentage = cdonotional/totalnotional,
+ stale = missingpricenotional/totalnotional, totalnotional) )
}
cdrfromscenarios <- function(scenarios, dates){
@@ -285,6 +298,7 @@ recoveryfromscenarios <- function(scenariosd, scenariosr){
## we run into trouble for very stressed scenarios
## this code should cap the scenarios at 0 if this happens
intexrecov <- matrix(0, n.scenarios, ncol(scenariosr))
+ scenariosr <- scenariosr
for(i in 1:n.scenarios){
current <- 1
intexrecov[i,1] <- scenariosr[i,1]
@@ -303,6 +317,12 @@ recoveryfromscenarios <- function(scenariosd, scenariosr){
return(intexrecov)
}
+recoveryfromscenarios.fast <- function(scenariosr, scenariosd){
+ r <- rbind(scenariosr[,1]/scenariosd[,1],
+ apply(scenariosr, 1, diff)/apply(scenariosd, 1, diff))
+ return( t(r) )
+}
+
severityfromscenarios <- function(scenariosd, scenariosr){
## compute the forward recovery rate based on the term
## structure of recovery scenarios
@@ -320,3 +340,17 @@ 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 )
+}