Institutional Intent Score¶
The Institutional Intent Score (IIS) is a per-symbol 0–100 daily composite that condenses Unusual Whales options-flow evidence into one auditable reading of how large, institution-style options orders have been positioned over a rolling window (default: 10 sessions). It is computed by a pure deterministic function — no LLM anywhere in the calculation — and appears only on the admin momentum research surfaces.
Status
Shipped (2026-07). The scoring specification lives in PRD §14.1; every weight and threshold lives in momentum_screener/screener_config.py. The full component breakdown renders in the /momentum expanded rows and on every /momentum/early and /momentum/discovery row.
Why a score instead of raw flow¶
Displaying raw flow pushes all interpretation onto the reader: a single sweep looks dramatic but may be noise, while quiet multi-day accumulation is easy to miss. A scored composite with a per-component breakdown is auditable (every point traces to a weighted component), replay-testable against history, and consistent from day to day.
Components¶
Seven components, each weighted in momentum_screener/screener_config.py (IIS_WEIGHTS, summing to 100):
| Component | Direction | What it reads |
|---|---|---|
opening_call_sweeps |
Bullish | Ask-side call sweep premium whose volume/open-interest character indicates opening trades — weighted above ordinary prints. |
leaps_call_positioning |
Bullish | Ask-side call premium with long-dated expiries (≥ IIS_LEAPS_MIN_DTE days) and opening character — long-horizon conviction. |
put_selling |
Bullish | Bid-side put premium — willingness to be assigned stock at the strike. |
put_buying_pressure |
Bearish | Ask-side put premium. Discounted by IIS_HEDGE_DISCOUNT when the same window shows positive net call premium and price above the 20-day MA (protective-hedge context); full negative weight when it coincides with distribution. |
oi_migration |
Either | Net call open-interest change minus net put open-interest change over the window, normalized by average total open interest. |
flow_persistence |
Amplifier | Share of sessions with bullish premium above bearish premium, with a consecutive-streak bonus — multi-day flow beats a one-day anomaly. |
price_flow_resonance |
Amplifier | Agreement between net-flow sign and price action — inflow while price holds scores above inflow into a falling tape. |
Score bands¶
Default thresholds (defined in momentum_screener/screener_config.py, IIS_BANDS):
| Composite | Band label | Reading |
|---|---|---|
| ≥ 70 | strong inflow | Large options orders clearly positioned bullish over the window |
| 55–70 | leaning bullish | Moderately bullish flow, not emphatic |
| 45–55 | balanced | Bullish and bearish flow roughly offset |
| 30–45 | leaning bearish | Moderately bearish flow |
| < 30 | distribution | Flow shows distribution characteristics |
The label describes what large options orders did — never what anyone should do.
Reading the score¶
Scores are banded (IIS_BANDS) into descriptive labels shown on the admin momentum pages, with the full component breakdown available in expanded rows. Missing or partially failed Unusual Whales endpoints produce null components plus a data-quality object — never fake zeros — so a low score always means "the flow read bearish," not "the API was down."
Cost control¶
The score is computed only for the Top-20, Early Momentum, and Discovery shortlists, capped by IIS_MAX_SYMBOLS. It never triggers a full-universe options-flow sweep.
Product boundary¶
IIS is display and context only. It does not gate Top-20 eligibility, and it may influence ranking only through the existing bounded paid-confirmation bonus path — and only after historical replay shows the component has real discrimination. The wording stays descriptive throughout: the score reports what large options orders did, never what anyone should do.
The output is descriptive market research, not investment advice.