aboutsummaryrefslogtreecommitdiffstats
path: root/R
diff options
context:
space:
mode:
Diffstat (limited to 'R')
-rw-r--r--R/thetas-durations.R113
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"))+