diff options
Diffstat (limited to 'R')
| -rw-r--r-- | R/cds_functions_generic.R | 2 | ||||
| -rw-r--r-- | R/intex_deal_functions.R | 29 |
2 files changed, 25 insertions, 6 deletions
diff --git a/R/cds_functions_generic.R b/R/cds_functions_generic.R index 9f31d226..338b62f1 100644 --- a/R/cds_functions_generic.R +++ b/R/cds_functions_generic.R @@ -530,7 +530,7 @@ portfoliospread <- function(portfolio, maturity){ d <- rep(0, length(portfolio))
for(i in 1:length(portfolio)){
d[i] <- cdsduration(portfolio$SC[[i]]@curve, maturity) * portfolio$notional[i]
- S <- S + d[i] * cdsspread(portfolio$SC[[i]]@curve, index$maturity, portfolio$SC[[i]]@recovery)
+ S <- S + d[i] * cdsspread(portfolio$SC[[i]]@curve, maturity, portfolio$SC[[i]]@recovery)
}
S <- S/sum(d)
return(S)
diff --git a/R/intex_deal_functions.R b/R/intex_deal_functions.R index 5771b279..0fe0c380 100644 --- a/R/intex_deal_functions.R +++ b/R/intex_deal_functions.R @@ -1,7 +1,8 @@ library(RQuantLib)
library(statmod)
+library(hash)
root.dir <- "//WDSENTINEL/share/CorpCDOs/"
-source(file.path(root.dir, "code" "R", "yieldCurve.R"))
+source(file.path(root.dir, "code", "R", "yieldCurve.R"))
source(file.path(root.dir, "code", "R", "cds_functions_generic.R"))
source(file.path(root.dir, "code", "R", "etdb.R"))
source(file.path(root.dir, "code", "R", "tranche_functions.R"))
@@ -28,6 +29,14 @@ listdealnames <- function(){ return( dbGetQuery(dbCon, sqlstring))
}
+cusip.data <- function(){
+ sqlstring <- "SELECT a.cusip, b.maturity, a.coupon AS grosscoupon, a.spread,
+CASE WHEN a.floater_index like 'LIBOR%' THEN 'FLOAT' ELSE 'FIXED' END
+AS fixedorfloat from cusip_universe a LEFT JOIN latest_clo_universe b ON a.dealname = b.dealname"
+ data <- dbGetQuery(dbCon, sqlstring)
+ return( data )
+}
+
recovery <- function(collateral) {
## return assumed recovery based on assumptions from recovery.assumptions
if(!is.na(collateral$secondlien) && collateral$secondlien){
@@ -124,7 +133,11 @@ maturity <- function(creditcurve){ }
stackcurve <- function(SC, line.item, global.params, startdate){
- newdates <- seq(startdate, line.item$maturity, by="3 months")
+ 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"){
hvec <- global.params$shape(yearFrac(today(), newdates[-1])) * global.params$defaultloanhazardrate
kvec <- global.params$alpha * exp(-global.params$beta * hvec)
@@ -145,7 +158,7 @@ buildSC.matured <- function(SC, line.item, reinvdate, dealmaturity, global.param }else{ #no reinvestment
SC@curve@dates <- startdate
SC@curve@hazardrates <- 0
- SC@curveprepayrates <- 0
+ SC@curve@prepayrates <- 0
}
return( SC )
}
@@ -201,12 +214,13 @@ buildSC <- function(line.item, reinvdate, dealmaturity, global.params, startdate return( list(SC=SC, notional=line.item$currentbalance) )
}
-buildSC.portfolio <- function(dealname, global.params, startdate=today()) {
- dealdata <- getdealdata(dealname)
+buildSC.portfolio <- function(dealname, dealdata, cusipdata, global.params, startdate=today()) {
collatdata <- getcollateral(dealname)
+ index <- hash(cusipdata$cusip, 1:length(cusipdata$cusip))
notionalvec <- c()
SCvec <- c()
betavec <- c()
+ fields <- c("maturity", "fixedorfloat", "spread", "grosscoupon")
for(i in 1:nrow(collatdata)){
line.item <- collatdata[i,]
if( is.na(line.item$maturity) ){
@@ -216,6 +230,11 @@ buildSC.portfolio <- function(dealname, global.params, startdate=today()) { if(line.item$currentbalance < 1){
next
}
+ ## overwrite the data with cusipdata info, because it should be higher quality
+ ## e.g all cdos in acacl061 had wrong maturity
+ if(has.key(line.item$cusip, index)){
+ line.item[,fields] <- cusipdata[index[[line.item$cusip]],fields]
+ }
temp <- buildSC(line.item, dealdata$"Reinv End Date", dealdata$maturity, global.params, startdate)
notionalvec <- c(notionalvec, temp$notional)
SCvec <- c(SCvec, temp$SC)
|
