R/pretty_stats.R

Defines functions pretty_stats format_per_trade_stats format_trade_stats format_account_summary

Documented in format_per_trade_stats format_trade_stats pretty_stats

#' Pretty-print \code{blotter} trade stats, all rows, columns 1-30.
#' @param name order book name for trade stats
#' @return a data frame of all trade status, character columns
#' unchanged, but all numeric columns modified to \code{digits=2}.
#' @seealso blotter::tradeStats
pretty_stats <- function(name) {
  x <- blotter::tradeStats(name)
  x <- cbind(x[, 1:4], format(x[, 5:30], big.mark = ",", digits = 2))
}


#' Applies formatting to the per-trade statistics from \code{blotter}.
#' @param pts per-trade statistics from \code{blotter}.
#' @return data frame with formatting applied to various columns.
#' @seealso scales::comma, scales::dollar, scales::percent
#' @seealso prettyNum
format_per_trade_stats <- function(pts) {
  pts$Init.Pos <- scales::comma(pts$Init.Pos)
  pts$Max.Pos <- scales::comma(pts$Max.Pos)
  pts$Num.Txns <- scales::comma(pts$Num.Txns)
  pts$Max.Notional.Cost <- scales::dollar(pts$Max.Notional.Cost)
  pts$Net.Trading.PL <- scales::dollar(pts$Net.Trading.PL)
  pts$MAE <- scales::dollar(pts$MAE)
  pts$MFE <- scales::dollar(pts$MFE)
  pts$Pct.Net.Trading.PL <- scales::percent(pts$Pct.Net.Trading.PL)
  pts$Pct.MAE <- scales::percent(pts$Pct.MAE)
  pts$Pct.MFE <- scales::percent(pts$Pct.MFE)
  pts$tick.Net.Trading.PL <- prettyNum(pts$tick.Net.Trading.PL,
                                       digits = 2)
  pts$tick.MAE <- formatC(pts$tick.MAE,
                          digits = 2,
                          format = "f")
  pts$tick.MFE <- formatC(pts$tick.MFE,
                          digits = 2,
                          format = "f")
  return(pts)
}


#' Applies formatting to the per-trade statistics from \code{blotter}.
#' @param ts account or portfolio trade statistics from \code{blotter}.
#' @return data frame with formatting applied to various columns
#' @seealso scales::dollar_format, scales::percent
#' @seealso format_per_trade_stats, prettyNum
format_trade_stats <- function(ts) {
  whole_dollar <- scales::dollar_format(largest_with_cents = 1,
                                        negative_parens = TRUE)
  ts$Avg.Daily.PL <- whole_dollar(ts$Avg.Daily.PL)
  ts$Avg.Losing.Trade <- whole_dollar(ts$Avg.Losing.Trade)
  ts$Avg.Trade.PL <- whole_dollar(ts$Avg.Trade.PL)
  ts$Avg.Win.Trade <- whole_dollar(ts$Avg.Win.Trade)
  ts$End.Equity <- whole_dollar(ts$End.Equity)
  ts$Gross.Profits <- whole_dollar(ts$Gross.Profits)
  ts$Gross.Losses <- whole_dollar(ts$Gross.Losses)
  ts$Largest.Winner <- whole_dollar(ts$Largest.Winner)
  ts$Largest.Loser <- whole_dollar(ts$Largest.Loser)
  ts$Max.Drawdown <- whole_dollar(ts$Max.Drawdown)
  ts$Max.Equity <- whole_dollar(ts$Max.Equity)
  ts$Med.Daily.PL <- whole_dollar(ts$Med.Daily.PL)
  ts$Med.Losing.Trade <- whole_dollar(ts$Med.Losing.Trade)
  ts$Med.Trade.PL <- whole_dollar(ts$Med.Trade.PL)
  ts$Med.Win.Trade <- whole_dollar(ts$Med.Win.Trade)
  ts$Min.Equity <- whole_dollar(ts$Min.Equity)
  ts$Net.Trading.PL <- whole_dollar(ts$Net.Trading.PL)
  ts$Std.Dev.Trade.PL <- whole_dollar(ts$Std.Dev.Trade.PL)
  ts$Std.Dev.Daily.PL <- whole_dollar(ts$Std.Dev.Daily.PL)
  ts$Percent.Positive <- scales::percent(ts$Percent.Positive / 100)
  ts$Percent.Negative <- scales::percent(ts$Percent.Negative / 100)
  ts$Profit.Factor <- prettyNum(ts$Profit.Factor,
                                digits = 2)
  ts$Ann.Sharpe <- prettyNum(ts$Ann.Sharpe,
                             digits = 2)
  ts$Profit.To.Max.Draw <- prettyNum(ts$Profit.To.Max.Draw,
                                     digits = 2)
  ts$Avg.WinLoss.Ratio <- prettyNum(ts$Avg.WinLoss.Ratio,
                                    digits = 2)
  ts$Med.WinLoss.Ratio <- prettyNum(ts$Med.WinLoss.Ratio,
                                    digits = 2)
  return(ts)
}

format_account_summary <- function(acct) {
  asdf <- as.data.frame(acct$summary)
  for ( i in 1:ncol(asdf)) {
    asdf[, i] <- scales::dollar(asdf[, i])
  }
  return(asdf)
}
greatgray/scorecard documentation built on May 17, 2019, 8:34 a.m.