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.R84
1 files changed, 35 insertions, 49 deletions
diff --git a/R/intex_deal_functions.R b/R/intex_deal_functions.R
index bf3ba927..5ca6d6aa 100644
--- a/R/intex_deal_functions.R
+++ b/R/intex_deal_functions.R
@@ -2,6 +2,14 @@ library(RQuantLib)
library(statmod)
library(data.table)
options(datatable.nomatch=0)
+library(doParallel)
+
+hostname <- system("hostname", intern=TRUE)
+if(hostname=="debian"){
+ registerDoParallel(8)
+}else{
+ registerDoParallel(4)
+}
if(.Platform$OS.type == "unix"){
root.dir <- "/home/share/CorpCDOs/"
@@ -240,58 +248,36 @@ buildSC <- function(line.item, reinvdate, dealmaturity, global.params, startdate
if(is.na(line.item$price)){
## TODO
}
- return( list(SC=SC, notional=line.item$currentbalance, price = line.item$price) )
+ beta <- if(!is.na(line.item$iscdo) && line.item$iscdo) 1 else global.params$defaultcorr
+ return( list(SC=SC, notional=line.item$currentbalance, price = line.item$price, beta = beta) )
}
buildSC.portfolio <- function(dealname, dealdata, cusipdata, global.params, startdate = Sys.Date()) {
- collatdata <- getcollateral(dealname, startdate)
- notionalvec <- c()
- SCvec <- c()
- 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) ){
- stop("empty maturity")
- }
- ##most likely equity, doesn't impact the risk anyway
- if(line.item$currentbalance < 1 || line.item$assettype=="Equity"){
- next
- }
- ## overwrite the data with cusipdata info if not NA,
- ## because it should be higher quality
- ## e.g all cdos in acacl061 had wrong maturity
- newcusipdata <- cusipdata[line.item$cusip]
- if(dim(newcusipdata)[1]>0){
- line.item$iscdo <- TRUE
- for(field in fields){
- if(!is.na(newcusipdata$field)){
- line.item[field] <- newcusipdata$field
- }
- }
- }
- 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) && line.item$maturity>startdate){
- 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)
- pricevec <- c(pricevec, temp$price)
- 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,
- cdopercentage = cdonotional/totalnotional,
- stale = missingpricenotional/totalnotional, collatbalance = totalnotional) )
+ collatdata <- data.table(getcollateral(dealname, startdate))
+ setkey(collatdata, "cusip")
+
+ ## replace the cdo fields by bloomberg data
+ collatdata[cusipdata[collatdata$cusip],
+ `:=`(maturity=i.maturity, fixedorfloat=i.fixedorfloat,
+ spread=i.spread, grosscoupon=i.grosscoupon, orig_moody=i.orig_moody)]
+
+ portfolio <- foreach(line.item = iter(collatdata, by='row')) %:% {
+ when( !is.na(line.item$maturity) && line.item$currentbalance > 1
+ && line.item$assettype!="Equity") } %dopar% {
+ buildSC(line.item, dealdata$"Reinv End Date", dealdata$maturity, global.params, startdate)
+ }
+ missingpricenotional <- sum(collatdata[is.na(price) & maturity>startdate,currentbalance])
+ cdonotional <- sum(collatdata[iscdo==TRUE,currentbalance])
+ collatbalance <- sum(collatdata[,currentbalance])
+
+ return( list(notional=vapply(portfolio, function(x)x$notional, numeric(1)),
+ beta = vapply(portfolio, function(x)x$beta, numeric(1)),
+ price = vapply(portfolio, function(x)x$price, numeric(1)),
+ SC = lapply(portfolio, function(x)x$SC),
+ stale = missingpricenotional/collatbalance,
+ cdopercentage = cdonotional/collatbalance,
+ collatbalance = collatbalance
+ ) )
}
cdrfromscenarios <- function(scenarios, dates){