#' 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)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.