aboutsummaryrefslogtreecommitdiffstats
path: root/R/thetas-durations.R
diff options
context:
space:
mode:
Diffstat (limited to 'R/thetas-durations.R')
-rw-r--r--R/thetas-durations.R7
1 files changed, 5 insertions, 2 deletions
diff --git a/R/thetas-durations.R b/R/thetas-durations.R
index 90646b06..a9a74b83 100644
--- a/R/thetas-durations.R
+++ b/R/thetas-durations.R
@@ -112,6 +112,9 @@ for(index in c('IG', 'HY', 'EU', 'XO')) {
0, tradedate, IMMDate(tradedate, "prev"))
quotes <- data.frame(upfront=(100-as.numeric(indexquotes[i,maturities$tenor]))/100,
maturities)
+ ## prevent negative hazardrates
+ quotes$upfront <- pmax(yearFrac(tradedate + 1, quotes$maturity, "act/360") *
+ quotes$running + 1e-6, quotes$upfront)
sc <- cdshazardrate(quotes, recov, tradedate, cs)
c(fastduration(sc, cs, tradedate, maturities$maturity),
fasttheta(sc, cs, recov, tradedate, maturities$maturity, quotes$upfront, coupon))
@@ -125,8 +128,8 @@ for(index in c('IG', 'HY', 'EU', 'XO')) {
## 0, tradedate, IMMDate(tradedate, "prev"))
## quotes <- data.frame(upfront=(100-as.numeric(indexquotes[i,maturities$tenor]))/100,
## maturities)
- ## quotes <- data.frame(upfront=(100-as.numeric(indexquotes[i,-1]))/100, maturities) %>%
- ## arrange(maturity)
+ ## quotes$upfront <- pmax(yearFrac(tradedate + 1, quotes$maturity, "act/360") *
+ ## quotes$running + 1e-6, quotes$upfront)
## sc <- cdshazardrate(quotes, recov, tradedate, cs)
## durandthetas <- rbind(durandthetas, c(fastduration(sc, cs, tradedate, maturities$maturity),
## fasttheta(sc, cs, recov, tradedate, maturities$maturity, quotes$upfront, coupon)))