Flow measures how unusually each stock is positioned (0–100 vs its own baseline), how flow is leaning, and how close its next catalyst is.
Every methodology card publishes the rules behind pressure, confidence, freshness, and gaps. Missing inputs stay visible as nulls or caps; the formulas never produce direction, targets, or advice.
This room is locked to Pressure table, Dig, Calendar, and API, in that order. Every other surface stays in the footer or behind one of those four doors.
Scheduled market and asset catalysts are loaded from verified seeds or deterministic OPEX rules, then converted into event pressure by proximity, confirmation, and optional IV magnitude.
Read it as: 100 means catalyst timing pressure is at the top of the measured window; 50 means moderate verified or estimated timing pressure; None means no verified catalyst is in horizon or coverage is missing.
proximity(e) = exp(-days_to(e) / 10.1)
w(e) = 1.0 if confirmed else 0.7
magnitude = 1.0 when unknown, else clamp(implied_move_ratio, 0.25, 2)
event_pressure_contribution(e) = min(proximity(e) * w(e) * magnitude, 1)
pressure = 1 - product(1 - event_pressure_contribution(e_i))
Coverage outside verified seeds raises CalendarCoverageError; no catalyst in horizon emits score: None, not zero.
source: flowdensity/scoring.py + flowdensity/calendar/macro.py
IV Ramp compares what options imply for the event window with the asset's own realized movement. Current asset packets mark this source limited until the options entitlement is available; no live IV value is inferred.
Read it as: 100 means implied move is about 2x or more than realized expectation; 50 means implied move roughly matches realized expectation; None means options or IV inputs are blocked, stale, or insufficient.
implied_move = ATM straddle mid price / spot
realized_expected = sigma(daily log returns) * sqrt(trading days to expiry)
implied_move_ratio = implied_move / realized_expected
score = clamp(implied_move_ratio * 50, 0, 100)
Current asset pages show iv_ramp limited with the same options access blocked status. If Massive is absent or fails, iv_ramp and IV-backed Event Risk degrade visibly instead of reading as quiet.
source: flowdensity/ivramp.py
Volume pressure measures participation against each asset's own trailing baseline. The score is the self-baseline abnormality of the latest completed session; the cross-sectional percentile is published alongside as secondary context.
Read it as: 100 means the session is 3 standard deviations (or more) from this name's own baseline; 50 means about half of full-scale abnormality; None means history coverage is insufficient. The separate percentile ranks the same z across the board.
rvol = latest session volume / mean(prior 20 sessions)
z = (latest - mean(baseline)) / std(baseline)
score = min(abs(z) / 3, 1.0) * 100
valid_cross_section = count(valid z-scores) >= 2
cross_sectional_percentile_score = cross_sectional_rank(z) * 100 when valid_cross_section else None
Insufficient history and single-asset boards emit score: None. Zero-variance baselines do not become infinity or zero.
source: flowdensity/volume.py
Squeeze Risk combines FINRA consolidated short interest with FlowDensity RVOL. The source reports short-interest concentration relative to liquidity.
Read it as: 100 means days-to-cover plus RVOL sit near the source cap; 50 means mixed or moderate liquidity pressure; None means FINRA, settlement, or RVOL inputs are missing or stale past policy.
days_to_cover_component = min(days_to_cover / 10, 1)
rvol_component = clamp((rvol - 1) / 4, 0, 1)
score = 100 * (0.7 * days_to_cover_component + 0.3 * rvol_component)
Public float is unavailable, so the signal is usable but confidence is capped. Latest public FINRA partitions stay live through the accepted publication lag; missing FINRA rows, over-lag settlement dates, or missing RVOL emit score: None.
source: flowdensity/short_interest.py
The legacy attention divergence field is retained only as a null compatibility gap. FlowDensity does not read AttentionDensity or compute flow-vs-attention; cross-feed composition stays outside Flow (family boundary).
Read it as: 100 means not emitted by FD for this legacy cross-feed source; 50 means not emitted by FD; None means the field is intentionally null because cross-feed composition stays outside Flow (family boundary).
score = null
confidence = 0.0
confidence_cap_reason = cross-feed composition stays outside Flow
fd.flow_divergence is designed for same-feed price/volume divergence; current public packets report signal not emitted
The field remains additive for old SSO consumers; nothing inside Flow weights it as a signal.
source: flowdensity/board.py + flowdensity/public_api.py
The Flow surface is designed around options sweeps, negotiated blocks, dark-pool share, density, and feed quality gates. The live source is not wired, so production pages render unknown values instead of placeholder prints.
Read it as: 100 means future source-qualified flow pressure sits at the top of its scale; 50 means moderate source-qualified flow pressure; None means source authorization or quality gates are not wired.
sweep = same-side prints across venues inside short window
block = negotiated size print above source threshold
dark_pool_share = off_exchange_volume / total_volume
density = (derived_options_premium + off_exchange_notional) / market_cap
quality_gate = surface only source-qualified events
Future flow fields must remain derived signals, must not redistribute raw vendor chain data, and must fail as unknown until authorized source coverage exists.
source: Flow source-quality gates
Illustrative example - static SMCI values from 2026-06-12 show the formula steps; this is not the current live row.
The volume source scored 100. Event risk stays degraded while the options source that would give magnitude is delayed or blocked, so confidence caps at 0.50. The values describe abnormality and timing, never what to do.
measured
next scan unavailable
source api · public_api_v0
inputs 2 live · 0 degraded · 3 limited
phase "market phase degraded" · backend-computed in America/New_York
full health →