R/Asset.R

#' @import lubridate
#' @import tidyr
#' @export
Asset <- R6::R6Class(
  classname = 'Asset',
  public = list(
    meta = NULL,
    time_series = NULL,
    initialize = function(
      meta = NULL,
      time_series = NULL,
      check_meta = TRUE
    ) {
      self$meta = meta
      self$time_series = time_series
      if (check_meta) {
        self$checkMetaData()
      }
    },

    assignBlankMetaData = function() {
      self$meta <- tibble(
        name = NA,
        forefront_id = NA,
        provider_id = NA,
        data_provider = NA,
        asset_type = NA,
        asset_class = NA,
        country = NA,
        currency = NA,
        maturity = NA,
        duration = NA,
        benchmark = NA,
        cme_asset = NA,
        mult = NA,
        rf_net = NA,
        auto_correl = NA,
        data_type = NA,
        freq = NA,
        constr_fnc = NA,
        ext_meth = NA,
        state = NA,
        mgr_name = NA,
        notice_period = NA,
        liq = NA,
        lock_up = NA,
        mgmt_fee = NA,
        perf_fee = NA,
        main_strat = NA,
        sub_strat = NA,
        off_bench = NA,
        aum = NA,
        aum_date = NA,
        contact_name = NA,
        contact_num = NA,
        contact_email = NA,
        mgr_address = NA,
        auditor = NA,
        admin = NA,
        custodian = NA,
        pb = NA,
        legal = NA
      )
    },

    assignMinMetaData = function(
      name,
      provider_id,
      freq,
      mult = 1,
      rf_net = TRUE,
      data_type = 'RETURN'
      ) {

      self$assignBlankMetaData()
      self$meta$name <- name
      self$meta$provider_id <- provider_id
      self$meta$mult <- mult
      self$meta$rf_net <- rf_net
      self$meta$data_type <- data_type
      self$meta$freq <- freq
    },

    checkMetaData = function() {
      meta <- self$meta
      if (is.null(meta)) {
        meta <- self$meta()
      }
      good_name <- c(
        'name',
        'forefront_id',
        'provider_id',
        'data_provider',
        'asset_type',
        'asset_class',
        'country',
        'currency',
        'maturity',
        'duration',
        'benchmark',
        'cme_asset',
        'mult',
        'rf_net',
        'auto_correl',
        'data_type',
        'freq',
        'constr_fnc',
        'ext_meth',
        'state',
        'mgr_name',
        'notice_period',
        'liq',
        'lock_up',
        'mgmt_fee',
        'perf_fee',
        'main_strat',
        'sub_strat',
        'off_bench',
        'aum',
        'aum_date',
        'contact_name',
        'contact_num',
        'contact_email',
        'mgr_address',
        'auditor',
        'admin',
        'custodian',
        'pb',
        'legal')
      name_check <- good_name %in% names(meta)
      if (sum(!name_check) > 0) {
        stop(paste0('meta names misspecified ', good_name[!name_check]))
      }
      meta$data_type <- toupper(meta$data_type)
      if (!meta$data_type %in% c('RETURN', 'LEVEL')) {
        stop('data_type misspecified, must be \'return\' or \'level\'')
      }
      meta$freq <- toupper(meta$freq)
      if (!meta$freq %in% c('D', 'W', 'M', 'Q', 'S', 'A')) {
        stop('freq misspecified, must be \'D\', \'W\', \'M\', \'Q\', \'S\', or
             \'A\'')
      }
      self$meta <- meta
    },

    changeFreq = function(freq) {
      freq <- checkFreq(freq)
      time_series <- changeTimeSeriesFreq(self$time_series, freq, self$meta$data_type)
      self$time_series <- time_series
      self$meta$freq <- freq
    }
  )
)
alejandro-sotolongo/InvTools documentation built on Nov. 1, 2019, 9:08 p.m.