What this is: The capstone view. For every symbol with a live real-source quote, runs the full upgraded pipeline (multi-horizon ensemble + Platt calibration + OOD filter + feature attribution) and produces an actionable trade plan (entry / stop / target / shares).

The four filters:
  • Live data only — symbol must have priceSource ∈ {stooq, coinbase, finnhub, ...} and liveAt < 5min
  • OOD filter — features must NOT be flagged out-of-distribution; OOD picks shown but dimmed
  • Conviction threshold — calibrated probability must be ≤ 0.40 or ≥ 0.60 (skip 'maybe' setups)
  • R:R math — auto-computed entry/stop/target must yield ≥ 1.5:1 reward to risk
Every pick traces to live data through documented math. No template content.
Symbols evaluated
0
A-tier picks
0
Filtered out (OOD/stale)
0
Last regime
🔬 Pipeline used for every pick
For each symbol with a fresh live quote:
1. Build feature vector — FeatureExtractor.extract returns 22 elements
2. OOD score — OutlierDetector.oodScore(features). If > 0.6, tier=OOD and pick is dimmed.
3. Ensemble prediction — MultiHorizon.predictEnsemble returns {prob, byHorizon, weights, regime}
4. Calibrate — Calibrator.calibrate(ensemble.prob) if fitted, else raw
5. OOD pull — if oodScore > 0.5, prob = 0.5 + (prob - 0.5) × (1 - oodScore)
6. Conviction check — only keep |prob - 0.5| ≥ 0.10
7. Plan — entry = q.last, stop = entry ± 1.5×ATR, target = entry ± 3×ATR (≥ 2:1 R:R)
8. Feature attribution — top 3 features by |contribution| shown to explain the call
9. Tier — A if prob ≥ 0.70 (or ≤ 0.30), B if ≥ 0.62, C otherwise