Quick health check
Run all checks at once:1. Feature count mismatch — scaler dimension error
Symptom: Bot crashes with scaler dimension error, or OOS results look wildly wrong. Diagnose:ml_config.json without completing the retrain. The deployed models still expect the original feature set.
2. Backtest produces zero trades
Symptom:backtest_config.py exits with 0 trades or No qualifying signals.
Check in order:
2b. Strict config sync check fails
Symptom:weekly_optimize.py, optimize_loop.py, or onboarding.py exits early with a generated-config drift error when NOVOSKY_STRICT_CONFIG_SYNC=1 is set.
Diagnose:
3. ONNX / model load error
Symptom:ModelNotFoundError, ONNX Runtime error, or pkl load failed at startup.
model_compat.json is missing, models were not trained together — do NOT go live. Retrain:
4. trading.py —dry fails immediately
Symptom: Dry run exits with error before printing any cycle output.API_URLnot set → check.envhasAPI_URL=http://<IP>:6542- Feature mismatch → fix with issue #1 above
- Missing model file →
python ml/r2_hub.py --pull
5. Retrain appears stuck or very slow
If retrain has no visible progress, run the local retrain command directly in a fresh terminal:6. optimize_loop.py keeps reverting every iteration
Symptom: Every iteration reverts — score never improves.- Switch to
risk-tuner— adjust conf/risk% without retraining - Try different lookahead (48→36 bars) or atr_sl_mult (0.8→0.7)
- Refresh training data:
python scripts/retrain.py --refresh
7. Session crashed mid-retrain
Symptom: Agent died during retrain — models may be inconsistent.8. Position model EXIT firing too often
Symptom: High ML_Exit count (> 25% of trades), WR drops.exit_threshold to 0.80 and min_prob_diff to 0.25 in ml_config.json, then re-run backtest to confirm. These are the Phase 15 tuned values.
9. Telegram not sending
.env:
10. Inflated WR in backtest (> 70% OOS)
Cause: Wrong--spread value. VT Markets BTCUSD = 16.95, IC Markets RAW = 3.0. Wrong spread inflates WR by 5–8pp.
Always pass explicitly:
11. PM2 / bot won’t start on reboot
12. Supabase open_positions shows rows, but broker has no open positions
Symptom: MT5 API /positions is empty, but Supabase open_positions still has old tickets.
Most common cause: bot process is stopped/crashed, so heartbeat reconciliation is not running.
13. Supabase trades is empty but account history has closed deals
Symptom: broker history/deals has exits, but trades has no rows.
Check in order:
- Bot process was down when positions closed.
- Supabase credentials are missing/invalid.
- You are looking at the wrong
SUPABASE_BOT_NAMEnamespace.
14. news_events duplicates or re-sync behavior
news_events is deduplicated by key (bot_name, title, event_at).
- Re-pushing the same weekly FF payload does not create duplicate rows.
- Existing rows are upserted (for example,
fetched_atrefreshes), new rows are inserted.
FF_URL) and supports safe periodic syncing.