How the Flow Score works
Every Flow Scanner alert carries a composite 0–100 score. This page documents exactly how that score is computed, what each component measures, and where the limits are.
The five components
The score is the sum of five weighted sub-scores, capped at 100. Each component is independent — a strong reading in one area can't compensate for missing data in another, but a single mediocre area won't kill a strong alert.
| Component | Max | Measures |
|---|---|---|
| Flow | 25 | Institutional options activity: OI accumulation, unusual contracts, block trades, call/put ratio |
| Short Interest | 20 | % of float short, days-to-cover, recent trend (short-interest data) |
| GEX | 20 | Dealer gamma positioning. Negative GEX amplifies moves; positive suppresses them |
| Implied Vol | 20 | IV percentile vs 30-day history, skew, implied move |
| Technical | 15 | RSI, EMA structure, support/resistance proximity, volume confirmation |
| Total | 100 | Sum capped at 100 |
Thresholds
The score band determines color, label, and how to interpret the signal:
Inside the Flow sub-score (0–25)
The Flow component is the heaviest weighted. It rewards four institutional-activity signatures:
- OI accumulation (0–8 pts): +8 when call OI rises by >10,000 contracts or >10% of total; +5 at >5,000 / >5%; +3 at >1,000 / >2%
- Unusual contracts (0–6 pts): +6 when 3+ contracts trade abnormal volume; +3 for 1–2
- Block trades (0–5 pts): +5 when 2+ block trades print; +3 for a single block
- Call/put ratio (0–6 pts): +6 when ratio >3; +4 at >2; +2 at >1.5. (Bullish-only — bearish flow is gated separately per M2M long-bias policy)
Source of truth: src/lib/flowAnalyzer.ts · calculateSqueezeScore(). If the code and this page disagree, the code wins.
Conviction Score vs Flow Score
You may see two scores referenced internally — a Flow Score (raw detector output, described above) and a Conviction Score (calibrated probability after post-processing). The user-facing badge on each alert card is the Conviction Score.
The calibration step adjusts for known false-positive risk factors (earnings proximity, FOMC week, opex), repeat-fire history, and regime fit. So a 70 Flow Score during a calendar-risky window may surface as a 55 Conviction Score — the alert is still detected, but the calibration is honest about the elevated noise.
Cross-source confluence (Phase 2 + 3)
Beyond the five Flow Score components, every alert is also checked against six external data sources for confluence signals. When a flow alert + insider buying + institutional accumulation + analyst upgrade + short-interest squeeze fuel + retail-sentiment data all align, the alert carries a composite-uplift badge (✦ Nx confluence).
- Insider-confirmed (Form 4 filings): senior-officer purchase ≥$100K in last 30 days. Weight 30–90 by dollar size.
- Institutional accumulation (13F filings): 3+ funds opened new positions last quarter, net QoQ accumulating. Weight 40–80 by breadth.
- Analyst catalyst (analyst ratings): upgrade in last 7 days, net upgrade-vs-downgrade positive. Weight 25–75 by recency.
- Squeeze precondition (short-interest data): 3+ of { SI≥15%, CTB≥20%, DTC≥5d, Util≥90% } simultaneously hot. Weight 70 (3/4) or 95 (4/4).
- Sentiment fade (social-sentiment data): CONTRARIAN — mention velocity z≥2 + bullish ≥65%. Signals retail FOMO; institutions historically pre-position before the pile-in. Weight 50–85 by intensity.
- Sentiment squeeze fuel (social-sentiment + short-interest data): CONFIRMATION — bullish ≥60% + mention spike + SI ≥15%. Retail discovery driving structural squeeze fuel. Weight 40–80.
Composite uplift formula: max(w1) + 0.4·w2 + 0.15·w3 (diminishing returns past 3 sources). Source: src/lib/flow/crossSourceConfluence.ts.
Limitations
- The score is a hypothesis, not a recommendation. A 75 score can fail; a 50 score can win. Use it to prioritize, not to size.
- Track-record figures (visible in the Flow Scanner Track Record tab and per-card edge pill) are the truth of how each alert type has performed. Cross-reference the score against the track record before committing.
- Sample size matters. Win-rate figures with n<20 are marked "preliminary" — treat them as directional, not validated edge.
- Bearish flow is informational-only (per M2M long-bias policy). The score still computes for awareness, but no trade plan is published.
- Backtest contamination caveat: the scoring weights have been tuned against historical outcomes. Walk-forward / out-of-sample validation is queued as part of the Track Record time-series feature.
Methodology drift
This page is hand-written and verified against the code as of 2026-05-20. If the scoring logic in src/lib/flowAnalyzer.ts changes, this page must be updated in the same PR. A future build-time methodology generator is on the backlog to prevent drift.