diff options
Diffstat (limited to 'R/intex_deal_functions.R')
| -rw-r--r-- | R/intex_deal_functions.R | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/R/intex_deal_functions.R b/R/intex_deal_functions.R index 5950f0e0..91ebe60e 100644 --- a/R/intex_deal_functions.R +++ b/R/intex_deal_functions.R @@ -173,9 +173,9 @@ buildSC <- function(line.item, reinvdate, dealmaturity, global.params, startdate 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){
- orig.moody <- "NR"
+ line.item$orig.moody <- "NR"
}
- line.item$price <- as.numeric(global.params$cdoprices[orig.moody])
+ line.item$price <- as.numeric(global.params$cdoprices[line.item$orig.moody])
}
##build survival curve
SC <- new("creditcurve", recovery=recovery(line.item), startdate=startdate,
@@ -183,17 +183,17 @@ buildSC <- function(line.item, reinvdate, dealmaturity, global.params, startdate SC@curve <- new("defaultprepaycurve", dates=as.Date(character(0)))
## defaulted asset
if(!is.na(line.item$defaultedflag) && line.item$defaultedflag){
- if(!is.na(line.item$price)){
- line.item$currentbalance <- line.item$currentbalance * line.item$price/100
- }else{
- line.item$currentbalance <- line.item$currentbalance * recovery(line.item)
+ if(is.na(line.item$price)){
+ line.item$price <- recovery(line.item) * 100
}
+ line.item$currentbalance <- line.item$currentbalance * line.item$price/100
+
SC@startdate <- startdate + global.params$defaultedlag
line.item$maturity <- min(dealmaturity, SC@startdate + global.params$rollingmaturity)
line.item$nextpaydate <- SC@startdate
## automatic reinvest
SC<- stackcurve(SC, line.item, global.params, SC@startdate)
- }else if(line.item$maturity<=startdate){#matured asset
+ }else if(line.item$maturity <= startdate){#matured asset
SC <- buildSC.matured(SC, line.item, reinvdate, dealmaturity, global.params, startdate)
}else if(is.na(line.item$price)){ #missing price
SC <- stackcurve(SC, line.item, global.params, SC@startdate)
@@ -218,7 +218,10 @@ buildSC <- function(line.item, reinvdate, dealmaturity, global.params, startdate line.item$maturity <- min(dealmaturity, newstartdate + global.params$rollingmaturity)
SC <- stackcurve(SC, line.item, global.params, newstartdate)
}
- return( list(SC=SC, notional=line.item$currentbalance) )
+ if(is.na(line.item$price)){
+ ## TODO
+ }
+ return( list(SC=SC, notional=line.item$currentbalance, price = line.item$price) )
}
buildSC.portfolio <- function(dealname, dealdata, cusipdata, global.params, startdate=today()) {
@@ -227,6 +230,7 @@ buildSC.portfolio <- function(dealname, dealdata, cusipdata, global.params, star notionalvec <- c()
SCvec <- c()
betavec <- c()
+ pricevec <- c()
fields <- c("maturity", "fixedorfloat", "spread", "grosscoupon", "orig_moody")
for(i in 1:nrow(collatdata)){
line.item <- collatdata[i,]
@@ -251,6 +255,7 @@ buildSC.portfolio <- function(dealname, dealdata, cusipdata, global.params, star 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)
}
|
