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 <noreply@anthropic.com>
This commit is contained in:
GifariKemal
2026-02-09 10:58:19 +07:00
parent ecfe3615ac
commit 1cb3377d77
+13 -2
View File
@@ -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")