aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--R/thetas-durations.R29
1 files changed, 14 insertions, 15 deletions
diff --git a/R/thetas-durations.R b/R/thetas-durations.R
index 916e68c0..9f308cdd 100644
--- a/R/thetas-durations.R
+++ b/R/thetas-durations.R
@@ -90,21 +90,20 @@ sqlstr.theta <- paste("UPDATE index_quotes set theta=$1 where date=$2 and index=
for(index in c('IG', 'HY')){
recov <- if(index=='IG') 0.4 else 0.3
for(series in c(18, 19, 20, 21, 22, 23, 24)){
- indexquotes <- get.indexquotes.table(index, series)
+ indexquotes <- get.indexquotes.table(index, series, tenors)
if(nrow(indexquotes)==0){
next
}
maturities <- get.indexmaturity(index, series)
- maturities <- maturities[maturities$tenor %in% tenors,]
- indexquotes <- indexquotes[indexquotes$date<=maturities$maturity[3],]
- durations <- matrix(0, nrow(indexquotes), length(tenors))
- thetas <- matrix(0, nrow(indexquotes), length(tenors))
- maturity <- maturities[nrow(maturities), "maturity"]
+ maturities <- maturities[maturities$tenor %in% colnames(indexquotes)[-1],]
+ durations <- matrix(0, nrow(indexquotes), nrow(maturities))
+ thetas <- matrix(0, nrow(indexquotes), nrow(maturities))
+ last_maturity <- maturities[nrow(maturities), "maturity"]
durandthetas <- foreach(i = 1:nrow(indexquotes), .combine='rbind') %dopar% {
tradedate <- indexquotes[i, "date"]
exportYC(tradedate)
- cs <- couponSchedule(IMMDate(tradedate, noadj=TRUE), maturity,"Q", "FIXED", 1,
- 0, tradedate, IMMDate(tradedate, "prev"))
+ cs <- couponSchedule(IMMDate(tradedate, noadj=TRUE), last_maturity,"Q", "FIXED", 1,
+ 0, tradedate, IMMDate(tradedate, "prev"))
quotes <- data.frame(upfront=(100-as.numeric(indexquotes[i,-1]))/100, maturities)
sc <- cdshazardrate(quotes, recov, tradedate, cs)
c(fastduration(sc, cs, tradedate, maturities$maturity),
@@ -114,20 +113,20 @@ for(index in c('IG', 'HY')){
for(i in 1:nrow(indexquotes)){
tradedate <- indexquotes[i, "date"]
exportYC(tradedate)
- cs <- couponSchedule(IMMDate(tradedate, noadj=TRUE), maturity,"Q", "FIXED", 1,
+ cs <- couponSchedule(IMMDate(tradedate, noadj=TRUE), last_maturity,"Q", "FIXED", 1,
0, tradedate, IMMDate(tradedate, "prev"))
quotes <- data.frame(upfront=(100-as.numeric(indexquotes[i,-1]))/100, maturities)
sc <- cdshazardrate(quotes, recov, tradedate, cs)
r <- rbind(r, c(fastduration(sc, cs, tradedate, maturities$maturity),
fasttheta(sc, cs, recov, tradedate, maturities$maturity, quotes$upfront)))
}
-
- df.durations <- data.frame(date=indexquotes$date, r[,1:3, drop=F])
- df.thetas <- data.frame(date=indexquotes$date, r[,4:6, drop=F])
- colnames(df.durations) <- c("date", tenors)
- colnames(df.thetas) <- c("date", tenors)
+ n <- nrow(maturities)
+ df.durations <- data.frame(date=indexquotes$date, r[,1:n, drop=F])
+ df.thetas <- data.frame(date=indexquotes$date, r[,(n+1):(2*n), drop=F])
+ colnames(df.durations) <- c("date", maturities$tenor)
+ colnames(df.thetas) <- c("date", maturities$tenor)
for(i in 1:nrow(df.durations)){
- for(tenor in tenors){
+ for(tenor in maturities$tenor){
if(!is.na(df.durations[i, tenor])){
r <- dbSendQuery(serenitasdb, sqlstr.duration,
params = list(df.durations[i, tenor],