diff options
Diffstat (limited to 'R')
| -rw-r--r-- | R/thetas-durations.R | 113 |
1 files changed, 56 insertions, 57 deletions
diff --git a/R/thetas-durations.R b/R/thetas-durations.R index bb57cfad..e08f2ef9 100644 --- a/R/thetas-durations.R +++ b/R/thetas-durations.R @@ -83,75 +83,74 @@ fasttheta <- function(sc, cs, recov, tradedate, maturities, quotes, fixedrate=0. return( r ) } -index <- 'HY' tenors <- c("3yr", "5yr", "7yr") -recov <- 0.3 sqlstr.duration <- paste("UPDATE index_quotes set duration=$1 where date=$2 and index=$3", "and series=$4 and tenor=$5") sqlstr.theta <- paste("UPDATE index_quotes set theta=$1 where date=$2 and index=$3", "and series=$4 and tenor=$5") +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(index, series) + indexquotes <- indexquotes[!(is.na(indexquotes[,"3yr"]) & is.na(indexquotes[,"5yr"]) + & is.na(indexquotes[,"7yr"])),] + 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"] + 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")) + 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), + fasttheta(sc, cs, recov, tradedate, maturities$maturity, quotes$upfront)) + } + r <- c() + for(i in 1:nrow(indexquotes)){ + tradedate <- indexquotes[i, "date"] + exportYC(tradedate) + cs <- couponSchedule(IMMDate(tradedate, noadj=TRUE), 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))) + } -for(series in c(16, 17, 18, 19, 20, 21, 22, 23, 24)){ - indexquotes <- get.indexquotes(index, series) - indexquotes <- indexquotes[!(is.na(indexquotes[,"3yr"]) & is.na(indexquotes[,"5yr"]) - & is.na(indexquotes[,"7yr"])),] - 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"] - 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")) - 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), - fasttheta(sc, cs, recov, tradedate, maturities$maturity, quotes$upfront)) - } - r <- c() - for(i in 1:nrow(indexquotes)){ - tradedate <- indexquotes[i, "date"] - exportYC(tradedate) - cs <- couponSchedule(IMMDate(tradedate, noadj=TRUE), 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) - for(i in 1:nrow(df.durations)){ - for(tenor in tenors){ - if(!is.na(df.durations[i, tenor])){ - r <- dbSendQuery(serenitasdb, sqlstr.duration, - params = list(df.durations[i, tenor], - df.durations[i,"date"], index, series, tenor)) - if(dbHasCompleted(r)){ - dbClearResult(r) + 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) + for(i in 1:nrow(df.durations)){ + for(tenor in tenors){ + if(!is.na(df.durations[i, tenor])){ + r <- dbSendQuery(serenitasdb, sqlstr.duration, + params = list(df.durations[i, tenor], + df.durations[i,"date"], index, series, tenor)) + if(dbHasCompleted(r)){ + dbClearResult(r) + } } - } - if(!is.na(df.thetas[i,tenor])){ - r <- dbSendQuery(serenitasdb, sqlstr.theta, - params = list(df.thetas[i, tenor], - df.thetas[i, "date"], index, series, tenor)) - if(dbHasCompleted(r)){ - dbClearResult(r) + if(!is.na(df.thetas[i,tenor])){ + r <- dbSendQuery(serenitasdb, sqlstr.theta, + params = list(df.thetas[i, tenor], + df.thetas[i, "date"], index, series, tenor)) + if(dbHasCompleted(r)){ + dbClearResult(r) + } } } } } } - ## ## nice plot, now I'm just showing off ## ggplot(df.durations, aes(x=date))+geom_line(aes(y=`3yr`, colour="3yr"))+ ## geom_line(aes(y=`5yr`, colour="5yr"))+ |
