From 39b49b172466611e32cda8ce361999fc4f7a967a Mon Sep 17 00:00:00 2001 From: TPTBusiness Date: Sun, 3 May 2026 00:25:58 +0200 Subject: [PATCH] fix: filter NaN in max(), remove redundant ternary, handle non-finite vbt results --- predix.py | 8 +++++--- rdagent/components/backtesting/backtest_engine.py | 2 +- rdagent/components/backtesting/vbt_backtest.py | 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/predix.py b/predix.py index da4099d0..e75ec355 100644 --- a/predix.py +++ b/predix.py @@ -576,9 +576,11 @@ def top( console.print(table) - # Summary - valid_ic = [r.get("ic") for r in results if r.get("ic") is not None] - valid_sharpe = [r.get("sharpe") for r in results if r.get("sharpe") is not None] + # Summary — filter None, NaN, and non-numeric values + valid_ic = [v for v in (r.get("ic") for r in results) + if isinstance(v, (int, float)) and v is not None and not np.isnan(v)] + valid_sharpe = [v for v in (r.get("sharpe") for r in results) + if isinstance(v, (int, float)) and v is not None and not np.isnan(v)] # Filter extreme outliers for average valid_sharpe_filtered = [s for s in valid_sharpe if abs(s or 0) < 1e6] diff --git a/rdagent/components/backtesting/backtest_engine.py b/rdagent/components/backtesting/backtest_engine.py index ddec152c..bc149dfd 100644 --- a/rdagent/components/backtesting/backtest_engine.py +++ b/rdagent/components/backtesting/backtest_engine.py @@ -222,7 +222,7 @@ class FactorBacktester: # Calculate return for this step if step > 0: - prev_price = float(price_values[step - 1]) if step > 0 else current_price + prev_price = float(price_values[step - 1]) if prev_price > 0: step_return = (current_price - prev_price) / prev_price * position returns_history.append(step_return) diff --git a/rdagent/components/backtesting/vbt_backtest.py b/rdagent/components/backtesting/vbt_backtest.py index a5c20dc3..99d56e7e 100644 --- a/rdagent/components/backtesting/vbt_backtest.py +++ b/rdagent/components/backtesting/vbt_backtest.py @@ -83,7 +83,8 @@ def _cross_check_with_vbt( init_cash=10_000.0, freq=freq, ) - return float(pf.total_return()) + tr = float(pf.total_return()) + return tr if np.isfinite(tr) else None except Exception: return None