From 1cb3377d77b15da3fc7f36e4a02fa1e955619519 Mon Sep 17 00:00:00 2001 From: GifariKemal Date: Mon, 9 Feb 2026 10:58:19 +0700 Subject: [PATCH] fix: ensure regime columns exist before ML prediction When regime detection fails silently on first iteration, df lacks regime/regime_confidence columns. XGBoost then gets 74 features instead of 76 and throws feature_names mismatch error. Fix: add default regime columns (regime=1, regime_confidence=1.0) after regime detection block and in the fallback position-check path. Also upgrade regime error logging from DEBUG to WARNING for visibility. Co-Authored-By: Claude Opus 4.6 --- main_live.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/main_live.py b/main_live.py index 5e4375b..cfc8fb6 100644 --- a/main_live.py +++ b/main_live.py @@ -1002,6 +1002,11 @@ class TradingBot: df = self.features.calculate_all(df, include_ml_features=True) df = self.smc.calculate_all(df) df = self.fe_v2.add_all_v2_features(df, self._h1_df_cached) + # Ensure regime columns exist for ML model + if "regime" not in df.columns: + df = df.with_columns(pl.lit(1).alias("regime")) + if "regime_confidence" not in df.columns: + df = df.with_columns(pl.lit(1.0).alias("regime_confidence")) feature_cols = self._get_available_features(df) ml_prediction = self.ml_model.predict(df, feature_cols) await self._smart_position_management( @@ -1056,9 +1061,15 @@ class TradingBot: self._last_regime_updated = datetime.now(ZoneInfo("Asia/Jakarta")).strftime("%H:%M:%S") except Exception as e: - logger.debug(f"Regime detection error: {e}") + logger.warning(f"Regime detection error: {e}") regime_state = None - + + # Ensure regime columns exist for ML model (even if regime detection failed) + if "regime" not in df.columns: + df = df.with_columns(pl.lit(1).alias("regime")) + if "regime_confidence" not in df.columns: + df = df.with_columns(pl.lit(1.0).alias("regime_confidence")) + # 5. Check flash crash is_flash, move_pct = self.flash_crash.detect(df.tail(5)) flash_enabled = self._is_filter_enabled("flash_crash_guard")