aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--R/thetas-durations.R18
-rw-r--r--R/yieldcurve.R5
2 files changed, 16 insertions, 7 deletions
diff --git a/R/thetas-durations.R b/R/thetas-durations.R
index ec95d2de..ad738112 100644
--- a/R/thetas-durations.R
+++ b/R/thetas-durations.R
@@ -19,7 +19,9 @@ get.indexquotes.table <- function(indextype, series, tenors=c("3yr", "5yr", "7yr
tbl("index_quotes") %>%
filter(index == !!indextype, series == !!series, tenor %in% !!tenors) %>%
{if(onlymissing) filter(., is.null(duration)) else .} %>%
- arrange(date) %>% select(date, tenor, closeprice) %>% collect()
+ arrange(date) %>% select(date, tenor, closeprice) %>%
+ collect() %>%
+ mutate(tenor=factor(tenor, !!tenors))
if(nrow(df) == 0) {
return( df )
} else {
@@ -31,8 +33,9 @@ get.indexmaturity <- function(index, series){
index.maturity <- tbl(serenitasdb, "index_maturity")
df <- index.maturity %>%
filter(index == !!index, series == !!series) %>%
- mutate(running = coupon/1000) %>%
+ mutate(running = coupon/10000) %>%
select(maturity, running, tenor) %>%
+ arrange(maturity) %>%
collect()
return( df )
}
@@ -80,6 +83,7 @@ sqlstr.duration <- paste("UPDATE index_quotes set duration=$1 where date=$2 and
"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
coupon <- if(index=='IG') 0.01 else 0.05
@@ -99,19 +103,23 @@ for(index in c('IG', 'HY')) {
exportYC(tradedate)
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)
+ quotes <- data.frame(upfront=(100-as.numeric(indexquotes[i,maturities$tenor]))/100,
+ maturities)
sc <- cdshazardrate(quotes, recov, tradedate, cs)
c(fastduration(sc, cs, tradedate, maturities$maturity),
fasttheta(sc, cs, recov, tradedate, maturities$maturity, quotes$upfront, coupon))
}
- ## ## non parallel version for easier debugging
+ ## non parallel version for easier debugging
## durandthetas <- c()
## for(i in 1:nrow(indexquotes)) {
## tradedate <- indexquotes %>% slice(i) %>% pull(date)
## exportYC(tradedate)
## 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)
+ ## 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)
## 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)))
diff --git a/R/yieldcurve.R b/R/yieldcurve.R
index a73b28bd..7e39a0f2 100644
--- a/R/yieldcurve.R
+++ b/R/yieldcurve.R
@@ -4,9 +4,10 @@ source("db.R")
getMarkitIRData <- function(date=Sys.Date(), currency=c("USD", "EUR")) {
## returns Markit rates from serenitasdb
currency <- match.arg(currency)
- sqlstr <- sprintf("SELECT * FROM %s_rates WHERE effective_date = $1", currency)
+ table_name <- paste(tolower(currency), "rates", sep="_")
serenitasdb <- dbConn("serenitasdb")
- return( dbGetQuery(serenitasdb, sqlstr, params = list(date)) )
+ return( serenitasdb %>% tbl(table_name)
+ %>% filter(effective_date == date) %>% collect() )
}
thirdwed <- function(x) {