aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--R/yieldcurve.R89
1 files changed, 41 insertions, 48 deletions
diff --git a/R/yieldcurve.R b/R/yieldcurve.R
index b117d6f6..bd4a4258 100644
--- a/R/yieldcurve.R
+++ b/R/yieldcurve.R
@@ -51,22 +51,18 @@ nextthirdwed <- function(x) {
thirdwed(y + 30 * (y < x))
}
-buildMarkitYC <- function(MarkitData, futurequotes, tradeDate=Sys.Date()){
- settleDate <- advance(calendar="UnitedKingdom",dates=tradeDate, 2, 0)
- names(settleDate) <- NULL
- params <- list(tradeDate=tradeDate,
- settleDate=settleDate,
- dt=dt,
- interpWhat="discount",
- interpHow="loglinear")
-
- short.term <- list()
+buildMarkitYC <- function(MarkitData, futurequotes){
+ deposits <- list()
+ futures <- list()
+ swaps <- list()
if(missing(futurequotes)){
- short.term <- list(d1m=as.numeric(MarkitData$deposits[5]$curvepoint$parrate),
- d3m=as.numeric(MarkitData$deposits[7]$curvepoint$parrate))
+ keys <- c("d1m", "d2m", "d3m", "d6m", "d1y")
+ for(i in seq_along(keys)){
+ deposits[[keys[i]]] <- as.numeric(MarkitData$deposits[i+4]$curvepoint$parrate)
+ }
}else{
for(i in seq_along(futurequotes)){
- short.term[[paste0("fut",i)]] <- futurequotes[i]
+ futures[[paste0("fut",i)]] <- futurequotes[i]
}
## get last imm date
lastimmdate <- nextthirdwed(advance(dates=tradeDate, n=21, timeUnit=2, bdc=4))
@@ -74,52 +70,49 @@ buildMarkitYC <- function(MarkitData, futurequotes, tradeDate=Sys.Date()){
## find out the 2 year swap rate maturity
s2ymaturity <- advance(calendar="UnitedKingdom", dates=settleDate, 2, 3)
if(s2ymaturity == lastfuturematurity){
- short.term[["fut8"]] <- NULL
+ futures[["fut8"]] <- NULL
}
}
- tsQuotes <- c(short.term,
- list(
- s2y=as.numeric(MarkitData$swaps[8]$curvepoint$parrate),
- s3y=as.numeric(MarkitData$swaps[9]$curvepoint$parrate),
- ##s4y=as.numeric(MarkitData$swaps[10]$curvepoint$parrate),
- s5y=as.numeric(MarkitData$swaps[11]$curvepoint$parrate),
- ##s6y=as.numeric(MarkitData$swaps[12]$curvepoint$parrate),
- ##s7y=as.numeric(MarkitData$swaps[13]$curvepoint$parrate),
- ##s8y=as.numeric(MarkitData$swaps[14]$curvepoint$parrate),
- ##s9y=as.numeric(MarkitData$swaps[15]$curvepoint$parrate),
- s10y=as.numeric(MarkitData$swaps[16]$curvepoint$parrate),
- ##s12y=as.numeric(MarkitData$swaps[17]$curvepoint$parrate),
- s15y=as.numeric(MarkitData$swaps[18]$curvepoint$parrate),
- s20y=as.numeric(MarkitData$swaps[19]$curvepoint$parrate),
- ##s25y=as.numeric(MarkitData$swaps[20]$curvepoint$parrate),
- s30y=as.numeric(MarkitData$swaps[21]$curvepoint$parrate)))
- YC.USD <- list(params=params, tsQuotes=tsQuotes)
- return( YC.USD )
+ keys <- unlist(lapply(MarkitData$swaps[8:21],
+ function(x) paste0("s", tolower(x$tenor))),use.names=FALSE)
+ for(i in seq_along(keys)){
+ swaps[[keys[i]]] <- as.numeric(MarkitData$swaps[i+7]$curvepoint$parrate)
+ }
+ tsQuotes <- c(deposits, futures, swaps)
+ return( tsQuotes )
}
-exportYC <- function(tradedate=Sys.Date()){
+exportYC <- function(tradedate=Sys.Date(), useFutures=FALSE){
## export the Yield Curve into the environment
require(RQuantLib)
- futurefile <- file.path(data.dir, "Yield Curves",
- sprintf("futures-%s.csv", tradedate))
- if(file.exists(futurefile)){
- futurequotes <- read.csv(futurefile, header=F)
+ if(useFutures){
+ futurefile <- file.path(data.dir, "Yield Curves",
+ sprintf("futures-%s.csv", tradedate))
+ if(file.exists(futurefile)){
+ futurequotes <- read.csv(futurefile, header=F)
+ }
+ }
+ MarkitData <- getMarkitIRData(tradedate-1)
+ evaldate <- as.Date(MarkitData$effectiveasof)
+ setEvaluationDate(tradedate)
+ if(evaldate!=tradedate){
+ stop("wrong date")
}
- ##retrieve yield curve data
- evaldate <- adjust(calendar="UnitedKingdom", dates=tradedate)
- names(evaldate) <- NULL
setEvaluationDate(evaldate)
- MarkitData <- getMarkitIRData(tradedate)
+ settleDate <- as.Date(MarkitData$deposits$spotdate)
+ setCalendarContext(calendar="WeekendsOnly", fixingDays=2,
+ settleDate=as.Date(MarkitData$deposits$spotdate))
+
+ params <- list(tradeDate=as.Date(MarkitData$effectiveasof),
+ settleDate=settleDate,
+ interpWhat="discount",
+ interpHow="loglinear")
if(exists("futurequotes")){
- Libor <- buildMarkitYC(MarkitData, futurequotes[,2], evaldate)
+ quotes <- buildMarkitYC(MarkitData, futurequotes[,2])
}else{
- Libor <- buildMarkitYC(MarkitData, ,evaldate)
+ quotes <- buildMarkitYC(MarkitData)
}
- L1m <- Libor
- L2m <- Libor
- L3m <- Libor
- L6m <- Libor
- L12m <- Libor
+ L1m <- L2m <- L3m <- L6m <- L12m <- list(params=params, tsQuotes=quotes)
L1m$params$dt <- 1/12
L2m$params$dt <- 1/6
L3m$params$dt <- 1/4