diff options
| -rw-r--r-- | R/thetas-durations.R | 18 | ||||
| -rw-r--r-- | R/yieldcurve.R | 5 |
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) { |
