aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--R/yieldcurve.R27
1 files changed, 17 insertions, 10 deletions
diff --git a/R/yieldcurve.R b/R/yieldcurve.R
index bd4a4258..0289f494 100644
--- a/R/yieldcurve.R
+++ b/R/yieldcurve.R
@@ -6,14 +6,14 @@ if(.Platform$OS.type == "unix"){
data.dir <- "//WDSENTINEL/share/CorpCDOs/data"
}
-getMarkitIRData <- function(date=Sys.Date()) {
+getMarkitIRData <- function(date=Sys.Date(), currency="USD") {
## downloads the latest available interest rates data from Markit
## before date and returns the parsed file into a list
require(XML)
i <- 0
while( TRUE ) {
lastdate <- format(date-i, "%Y%m%d")
- filename <- paste("InterestRates", "USD", lastdate, sep="_")
+ filename <- paste("InterestRates", currency, lastdate, sep="_")
filename.ext <- paste0(filename,".xml")
if( filename.ext %in% dir(file.path(data.dir, "Yield Curves"))){
return( xmlToList(file.path(data.dir, "Yield Curves", filename.ext)) )
@@ -51,12 +51,17 @@ nextthirdwed <- function(x) {
thirdwed(y + 30 * (y < x))
}
-buildMarkitYC <- function(MarkitData, futurequotes){
+buildMarkitYC <- function(MarkitData, currency="USD", futurequotes){
deposits <- list()
futures <- list()
swaps <- list()
if(missing(futurequotes)){
- keys <- c("d1m", "d2m", "d3m", "d6m", "d1y")
+ keys <- c("d1m", "d2m", "d3m", "d6m")
+ if(currency=="EUR"){
+ keys <- c(keys, "d9m", "d1y")
+ }else{
+ keys <- c(keys, "d1y")
+ }
for(i in seq_along(keys)){
deposits[[keys[i]]] <- as.numeric(MarkitData$deposits[i+4]$curvepoint$parrate)
}
@@ -73,7 +78,7 @@ buildMarkitYC <- function(MarkitData, futurequotes){
futures[["fut8"]] <- NULL
}
}
- keys <- unlist(lapply(MarkitData$swaps[8:21],
+ keys <- unlist(lapply(MarkitData$swaps[8:length(MarkitData$swaps)],
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)
@@ -82,7 +87,7 @@ buildMarkitYC <- function(MarkitData, futurequotes){
return( tsQuotes )
}
-exportYC <- function(tradedate=Sys.Date(), useFutures=FALSE){
+exportYC <- function(tradedate=Sys.Date(), currency="USD", curveType, useFutures=FALSE){
## export the Yield Curve into the environment
require(RQuantLib)
if(useFutures){
@@ -92,7 +97,7 @@ exportYC <- function(tradedate=Sys.Date(), useFutures=FALSE){
futurequotes <- read.csv(futurefile, header=F)
}
}
- MarkitData <- getMarkitIRData(tradedate-1)
+ MarkitData <- getMarkitIRData(tradedate-1, currency)
evaldate <- as.Date(MarkitData$effectiveasof)
setEvaluationDate(tradedate)
if(evaldate!=tradedate){
@@ -100,17 +105,19 @@ exportYC <- function(tradedate=Sys.Date(), useFutures=FALSE){
}
setEvaluationDate(evaldate)
settleDate <- as.Date(MarkitData$deposits$spotdate)
+ curveType <- sprintf("%s/%s", "Markit", currency)
setCalendarContext(calendar="WeekendsOnly", fixingDays=2,
- settleDate=as.Date(MarkitData$deposits$spotdate))
+ settleDate=as.Date(MarkitData$deposits$spotdate),
+ curveType=curveType)
params <- list(tradeDate=as.Date(MarkitData$effectiveasof),
settleDate=settleDate,
interpWhat="discount",
interpHow="loglinear")
if(exists("futurequotes")){
- quotes <- buildMarkitYC(MarkitData, futurequotes[,2])
+ quotes <- buildMarkitYC(MarkitData, currency, futurequotes[,2])
}else{
- quotes <- buildMarkitYC(MarkitData)
+ quotes <- buildMarkitYC(MarkitData, currency)
}
L1m <- L2m <- L3m <- L6m <- L12m <- list(params=params, tsQuotes=quotes)
L1m$params$dt <- 1/12