R/get-ycurve.R

#' Get yield curve data on given date (data source: Bank of Canada).
#'
#' @param date        Date(s) on which to retrieve yield data
#' @param yield_dt    Data.table of historical yields
#'
#' @return dt         Data.table of yields on the given \code{date}.
#'
#' @export
#'
#' @examples
#' # Get yield curve data for today
#' yield_dt <- download_yields(1)
#' date_today <- lubridate::today()
#' get_ycurve( date = date_today, yield_dt = yield_dt )
#'
get_ycurve <- function( date, yield_dt ){
  ratecols <- names( yield_dt )[ ! stringr::str_detect( names( yield_dt ), 'date' ) ]
  # validate inputs
  stopifnot( lubridate::is.POSIXct( date ),
             data.table::is.data.table( yield_dt ),
             "dates" %in% names( yield_dt )
             )

  # Get yield curve data on date
  data.table::setkey( yield_dt, "dates" )
  dt <- yield_dt[ data.table::J( date ), roll="nearest", rollends=FALSE ]
  dt <- dt[ , ratecols, with = F ] # Only keep rates
  return( data.table::copy( dt ) )
}
vathymut/bondyields documentation built on May 3, 2019, 4:35 p.m.