diff options
| -rw-r--r-- | R/thetas-durations.R | 29 |
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], |
