From 8af11e5f6a7e562c641605fcf98319b36a3cc26b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Rodr=C3=ADguez=20Chatruc?= Date: Tue, 14 Jan 2020 14:35:26 -0300 Subject: [PATCH] Improved formatting in summary method --- backtester/backtester.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/backtester/backtester.py b/backtester/backtester.py index d508061..be72b6e 100644 --- a/backtester/backtester.py +++ b/backtester/backtester.py @@ -179,7 +179,7 @@ class Backtest: total_trades = len(exits) win_number = np.sum(wins) loss_number = total_trades - win_number - win_pct = win_number / total_trades + win_pct = (win_number / total_trades) * 100 largest_loss = np.max(costs) avg_profit = np.sum(-costs) / len(costs) avg_pl = np.mean(daily_returns) @@ -195,7 +195,31 @@ class Backtest: strat = ['Strategy'] summary = pd.DataFrame(data, stats, strat) - return summary + # Applies formatters to rows + def format_row_wise(styler, formatters): + for row, row_formatter in formatters.items(): + row_num = styler.index.get_loc(row) + + for col_num in range(len(styler.columns)): + styler._display_funcs[(row_num, col_num)] = row_formatter + + return styler + + formatters = { + "Total trades": lambda x: f"{x:.0f}", + "Number of wins": lambda x: f"{x:.0f}", + "Number of losses": lambda x: f"{x:.0f}", + "Win %": lambda x: f"{x:.2f}%", + "Largest loss": lambda x: f"${x:.2f}", + "Profit factor": lambda x: f"{x:.2f}", + "Average profit": lambda x: f"${x:.2f}", + "Average P&L %": lambda x: f"{x:.2f}%", + "Total P&L %": lambda x: f"{x:.2f}%" + } + + styler = format_row_wise(summary.style, formatters) + + return styler def __repr__(self): return "Backtest(capital={}, strategy={})".format(self.current_cash, self._strategy)