Merge pull request #11499 from mrpabloyeah/add-relevant-metrics-to-backtest-breakdowns

Add relevant metrics to backtest breakdowns
This commit is contained in:
Matthias
2025-03-18 07:27:05 +01:00
committed by GitHub
3 changed files with 15 additions and 11 deletions

View File

@@ -132,18 +132,18 @@ def text_table_periodic_breakdown(
"""
headers = [
period.capitalize(),
"Trades",
f"Tot Profit {stake_currency}",
"Wins",
"Draws",
"Losses",
"Profit Factor",
"Win Draw Loss Win%",
]
output = [
[
d["date"],
d.get("trades", "N/A"),
fmt_coin(d["profit_abs"], stake_currency, False),
d["wins"],
d["draws"],
d["loses"],
round(d["profit_factor"], 2) if "profit_factor" in d else "N/A",
generate_wins_draws_losses(d["wins"], d["draws"], d.get("losses", d.get("loses", 0))),
]
for d in days_breakdown_stats
]

View File

@@ -231,8 +231,11 @@ def generate_periodic_breakdown_stats(
profit_abs = day["profit_abs"].sum().round(10)
wins = sum(day["profit_abs"] > 0)
draws = sum(day["profit_abs"] == 0)
loses = sum(day["profit_abs"] < 0)
trades = wins + draws + loses
losses = sum(day["profit_abs"] < 0)
trades = wins + draws + losses
winning_profit = day.loc[day["profit_abs"] > 0, "profit_abs"].sum()
losing_profit = day.loc[day["profit_abs"] < 0, "profit_abs"].sum()
profit_factor = winning_profit / abs(losing_profit) if losing_profit else 0.0
stats.append(
{
"date": name.strftime("%d/%m/%Y"),
@@ -240,8 +243,9 @@ def generate_periodic_breakdown_stats(
"profit_abs": profit_abs,
"wins": wins,
"draws": draws,
"loses": loses,
"winrate": wins / trades if trades else 0.0,
"losses": losses,
"trades": trades,
"profit_factor": round(profit_factor, 8),
}
)
return stats

View File

@@ -587,7 +587,7 @@ def test_generate_periodic_breakdown_stats(testdatadir):
day = res[0]
assert "date" in day
assert "draws" in day
assert "loses" in day
assert "losses" in day
assert "wins" in day
assert "profit_abs" in day