From ebc954a963098b2793d46ce5eef153697868513e Mon Sep 17 00:00:00 2001 From: edtechre Date: Sun, 22 Sep 2024 14:44:10 -0700 Subject: [PATCH] Ensures that largest_loss_pct is negative, largest_win_pct is positive --- src/pybroker/eval.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/pybroker/eval.py b/src/pybroker/eval.py index f0d3b14..d268300 100644 --- a/src/pybroker/eval.py +++ b/src/pybroker/eval.py @@ -856,16 +856,22 @@ def evaluate( pnls = trades_df["pnl"].to_numpy() return_pcts = trades_df["return_pct"].to_numpy() bars = trades_df["bars"].to_numpy() - winning_bars = trades_df[trades_df["pnl"] > 0]["bars"].to_numpy() - losing_bars = trades_df[trades_df["pnl"] < 0]["bars"].to_numpy() - largest_win = trades_df[trades_df["pnl"] == trades_df["pnl"].max()] + winning_trades = trades_df[trades_df["pnl"] > 0] + winning_bars = winning_trades["bars"].to_numpy() + losing_trades = trades_df[trades_df["pnl"] < 0] + losing_bars = losing_trades["bars"].to_numpy() + largest_win = winning_trades[ + winning_trades["pnl"] == winning_trades["pnl"].max() + ] largest_win_pct = ( 0 if largest_win.empty else largest_win["return_pct"].values[0] ) largest_win_bars = ( 0 if largest_win.empty else largest_win["bars"].values[0] ) - largest_loss = trades_df[trades_df["pnl"] == trades_df["pnl"].min()] + largest_loss = losing_trades[ + losing_trades["pnl"] == losing_trades["pnl"].min() + ] largest_loss_pct = ( 0 if largest_loss.empty else largest_loss["return_pct"].values[0] )