R/calcEquityCurveFromTrans.R

Defines functions calcEquityCurveFromTrans

Documented in calcEquityCurveFromTrans

#' Calculate equity curve from transactions.
#'
#' @param trans Transactions which contains date and pnl.
#' @param base_xts xts which contains all trading days.
#'
#' @return Equity curve by data.table format.
#' @export

calcEquityCurveFromTrans <- function(trans, base_xts = NULL,
                                     start_date = NULL, end_date = NULL) {

  # Functions
  extractDates <- function(base_xts) {
    dates <- index(base_xts)
    dates <- data.table::data.table(as.Date(strftime(dates, "%Y-%m-%d")))
    colnames(dates) <- "date"
    return(dates)
  }

  # Extract PnL
  ec <- trans %>%
    dplyr::group_by(date) %>%
    dplyr::summarise(ttl_pnl = sum(pnl), count = n()) %>%
    dplyr::select(date, ttl_pnl, count) %>%
    dplyr::rename(pnl = ttl_pnl) %>%
    data.table::data.table()

  # Merge with all trading dates
  if (!is.null(base_xts)) {
    dt <- extractDates(base_xts)
  } else {
    dt <- getTradingDays(start_date, end_date, type = "dt")
  }

  ec <- ec[dt, on = "date", all = TRUE]
  ec[is.na(ec)] <- 0

  # Equity curve
  ec[, cum_pnl := cumsum(pnl)]

  # Calc equity drawdown
  ec[, peak := 0]
  for (i in 1:nrow(ec)) { ec[i, "peak"] <- max(ec[1:i, "cum_pnl"]) }
  ec[, drawdown := cum_pnl - peak]
  ec[, peak := NULL]

  return (ec)
}
tmk-c/myrlib documentation built on May 29, 2019, 1:44 p.m.