diff options
Diffstat (limited to 'R/intex_deal_functions.R')
| -rw-r--r-- | R/intex_deal_functions.R | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/R/intex_deal_functions.R b/R/intex_deal_functions.R index 0fe0c380..053d9c83 100644 --- a/R/intex_deal_functions.R +++ b/R/intex_deal_functions.R @@ -133,15 +133,22 @@ maturity <- function(creditcurve){ }
stackcurve <- function(SC, line.item, global.params, startdate){
+ if(line.item$nextpaydate> line.item$maturity){
+ SC@curve@hazardrates <- 0
+ SC@curve@prepayrates <- 0
+ SC@curve@dates <- line.item$maturity
+ return( SC )
+ }
newdates <- seq(line.item$nextpaydate, line.item$maturity, by="3 months")
if(newdates[length(newdates)]<line.item$maturity){
newdates <- c(newdates, line.item$maturity)
}
newdates <- c(startdate, newdates[newdates>startdate])
- if(line.item$assettype=="Loan"){
+ if(is.na(line.item$assettype) || line.item$assettype=="Loan"){
hvec <- global.params$shape(yearFrac(today(), newdates[-1])) * global.params$defaultloanhazardrate
kvec <- global.params$alpha * exp(-global.params$beta * hvec)
- }else if(line.item$assettype=="Bond" || line.item$iscdo){
+ }else if(line.item$assettype=="Bond" || line.item$assettype=="Credit Default Swap"
+ || (!is.na(line.item$iscdo) && line.item$iscdo)){
hvec <- global.params$shape(yearFrac(today(), newdates[-1])) * global.params$defaultbondhazardrate
kvec <- rep(0, length(hvec))
}
@@ -186,6 +193,7 @@ buildSC <- function(line.item, reinvdate, dealmaturity, global.params, startdate }
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
@@ -193,7 +201,7 @@ buildSC <- function(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)
}else{ #normal case
- if(line.item$assettype=="Bond"){ #no prepay rate
+ if(!is.na(line.item$assettype) && line.item$assettype=="Bond"){ #no prepay rate
alpha <- 0
}else{
alpha <- global.params$alpha
|
