From 1c8edfe4d1e8d11bd4b40e8fc3237c26c3a60e15 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 14 Aug 2026 06:40:28 +0200 Subject: [PATCH] fix: overflow in CAGR part of #13404 --- freqtrade/data/metrics.py | 6 +++++- tests/data/test_metrics.py | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/freqtrade/data/metrics.py b/freqtrade/data/metrics.py index 695c844f441..14462389087 100644 --- a/freqtrade/data/metrics.py +++ b/freqtrade/data/metrics.py @@ -300,7 +300,11 @@ def calculate_cagr(days_passed: int, starting_balance: float, final_balance: flo 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 + try: + return (final_balance / starting_balance) ** (1 / (days_passed / 365)) - 1 + except OverflowError: + # Extrapolating a large gain over a very short timeframe can exceed float range. + return 0 def calculate_expectancy(trades: pd.DataFrame) -> tuple[float, float]: diff --git a/tests/data/test_metrics.py b/tests/data/test_metrics.py index 170d760ddd1..5fd77603729 100644 --- a/tests/data/test_metrics.py +++ b/tests/data/test_metrics.py @@ -504,6 +504,8 @@ def test_calculate_p_value_zero_mean(): (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 + (1.49, 11.2, 1, 0.0), # Overflow - huge gain over a single day + (1.0, 6.99, 1, 1.7146249823477656e308), # just below the overflow threshold ], ) def test_calculate_cagr(start, end, days, expected):