aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--R/load_cf.R15
1 files changed, 10 insertions, 5 deletions
diff --git a/R/load_cf.R b/R/load_cf.R
index 73601c7b..a3aec9c7 100644
--- a/R/load_cf.R
+++ b/R/load_cf.R
@@ -194,7 +194,8 @@ getcusipcf <- function(params, cfdata, dist, tradedate=Sys.Date()){
T=T, key="Date")
r <- matrix(0, n.scenarios, 5)
colnames(r) <- fields
- sqlstring <- sprintf("select curr_balance, spread from historical_cusip_universe('%s', '%s')",
+ sqlstring <- sprintf(paste("select curr_balance, orig_balance, spread",
+ "from historical_cusip_universe('%s', '%s')"),
cusip, tradedate)
indicdata <- dbGetQuery(dbCon, sqlstring)
flag <- TRUE
@@ -223,15 +224,19 @@ getcusipcf <- function(params, cfdata, dist, tradedate=Sys.Date()){
wal=sum(-diff(Balance)*T[-1])/indicdata$curr_balance,
duration=if(temp==0) 0 else sum(Cashflow * Discounts * T)/temp)])
}
+ if(indicdata$curr_balance==0){
+ cusip.pv <- r[,"Cashflow"]/indicdata$orig_balance
+ }else{
+ cusip.pv <- r[,"Cashflow"]/indicdata$curr_balance
+ }
if(flag){
cusipdata[[cusip]] <- list(currbal=indicdata$curr_balance,
spread=indicdata$spread,
- Cashflow=temp <- crossprod(cfdata[[dealname]]$weight, r[,"Cashflow"]),
+ Cashflow=crossprod(cfdata[[dealname]]$weight, r[,"Cashflow"]),
wal = crossprod(cfdata[[dealname]]$weight, r[,"wal"]),
duration = crossprod(cfdata[[dealname]]$weight, r[,"duration"]),
- price = 100 * temp/indicdata$curr_balance,
- delta = compute.delta(dist, cfdata[[dealname]],
- r[,"Cashflow"]/indicdata$curr_balance),
+ price = 100 * crossprod(cusip.pv, cfdata[[dealname]]$weight),
+ delta = compute.delta(dist, cfdata[[dealname]], cusip.pv),
fields=r)
cat("done", cusip, "\n")
}