From f2b930079b8c7281a163fdc0de5f8ede1950d5ca Mon Sep 17 00:00:00 2001 From: Stefano Date: Mon, 16 Mar 2026 12:38:39 +0900 Subject: [PATCH] fix cagr on zero or negative values --- freqtrade/data/metrics.py | 2 +- tests/data/test_btanalysis.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/freqtrade/data/metrics.py b/freqtrade/data/metrics.py index 6d4e405cb..a9d3963d2 100644 --- a/freqtrade/data/metrics.py +++ b/freqtrade/data/metrics.py @@ -296,7 +296,7 @@ def calculate_cagr(days_passed: int, starting_balance: float, final_balance: flo :param final_balance: Final balance to calculate CAGR against :return: CAGR """ - if final_balance < 0: + if (final_balance < 0) or (starting_balance <= 0) or (days_passed <= 0): # With leveraged trades, final_balance can become negative. return 0 return (final_balance / starting_balance) ** (1 / (days_passed / 365)) - 1 diff --git a/tests/data/test_btanalysis.py b/tests/data/test_btanalysis.py index e5020fea0..c869e6a92 100644 --- a/tests/data/test_btanalysis.py +++ b/tests/data/test_btanalysis.py @@ -516,6 +516,8 @@ def test_calculate_sqn_cases(profits, starting_balance, expected_sqn, descriptio (1000, 1500, 365, 0.5), (1000, 1500, 100, 3.3927), # sub year (0.01000000, 0.01762792, 120, 4.6087), # sub year BTC values + (1000, 1010, 0, 0.0), # zero days + (-100, 100, 365, 0.0), # negative starting balance ], ) def test_calculate_cagr(start, end, days, expected):