diff --git a/freqtrade/optimize/optimize_reports/bt_output.py b/freqtrade/optimize/optimize_reports/bt_output.py index cc179410a..94dc966a5 100644 --- a/freqtrade/optimize/optimize_reports/bt_output.py +++ b/freqtrade/optimize/optimize_reports/bt_output.py @@ -370,6 +370,7 @@ def text_table_add_metrics(strat_results: dict) -> None: f"{strat_results['winning_days']} / " f"{strat_results['draw_days']} / {strat_results['losing_days']}", ), + ("Max trade duration", f"{strat_results['holding_max']}"), ("Avg. Duration Winners", f"{strat_results['winner_holding_avg']}"), ("Avg. Duration Loser", f"{strat_results['loser_holding_avg']}"), ( diff --git a/freqtrade/optimize/optimize_reports/optimize_reports.py b/freqtrade/optimize/optimize_reports/optimize_reports.py index 1478ee2be..f331c0709 100644 --- a/freqtrade/optimize/optimize_reports/optimize_reports.py +++ b/freqtrade/optimize/optimize_reports/optimize_reports.py @@ -344,6 +344,11 @@ def generate_trading_stats(results: DataFrame) -> dict[str, Any]: if not results.empty else timedelta() ) + holding_max = ( + timedelta(minutes=round(results["trade_duration"].max())) + if not results.empty + else timedelta() + ) winner_holding_avg = ( timedelta(minutes=round(winning_trades["trade_duration"].mean())) if not winning_trades.empty @@ -363,6 +368,8 @@ def generate_trading_stats(results: DataFrame) -> dict[str, Any]: "winrate": len(winning_trades) / len(results) if len(results) else 0.0, "holding_avg": holding_avg, "holding_avg_s": holding_avg.total_seconds(), + "holding_max": holding_max, + "holding_max_s": holding_max.total_seconds(), "winner_holding_avg": winner_holding_avg, "winner_holding_avg_s": winner_holding_avg.total_seconds(), "loser_holding_avg": loser_holding_avg,