Skip to content

Phase 7 — Learning Loop

Verdict: Static book with manual quarantine updates. Automated learning is DEAD in production.


What code claims vs runs

Component Location Runs in daemon?
Strategy IC tracker qgtm_portfolio/ic_tracker.py Yes — Redis-backed
Signal aggregator weights signal_aggregator.py Regime + IC hooks
Decay monitor scripts/dead_ml_loop/ No
Auto-retrain scripts/dead_ml_loop/auto_retrain.py No
Model registry scripts/dead_ml_loop/model_registry.py No
Self-learning orchestrator moved No
Auto-research workflow .github/workflows/auto-research.yml Batch only
AISC staleness warning qgtm_data/aisc.py Yes (#81)

What actually learns today

  1. Operator quarantine — edit QUARANTINED_STRATEGIES after backtests.
  2. IC tracker — stores rolling IC if signals fire (verify Redis keys).
  3. Drawdown manager — mechanical de-lever, not alpha learning.
  4. Rejection tracker — symbol kill after repeated compliance rejects.

Revival plan (minimal viable learning)

Step Action Owner
1 Nightly job: per-strategy paper PnL + rolling Sharpe → JSON Eng
2 Auto-demote to quarantine if 63d Sharpe < 0 and PBO rerun fails Eng + PM
3 Re-import decay monitor only (no auto-retrain) into daemon post-close Eng
4 Shadow bucket for ml_ensemble — no OMS until DSR pass PM

Monitoring dashboard scaffold

Minimal operator dashboard:

python scripts/monitoring_dashboard.py --port 8765
# or
make daily

Writes audit_data/daily_snapshot.json and prints book health.

Implementation: scripts/monitoring_dashboard.py (stdlib HTTP or print-only if deps missing).


Static = dying — scorecard

Criterion Score 0–10
Automated decay handling 1
Model promotion 0
Feature drift alerts 4 (alert_feature_drift exists)
Post-trade analytics feedback to weights 3
Overall learning 2/10