Methodology · reviewed 24 October 2026
How to read Net Flow
Follow net premium through the session, then inspect the contracts, quotes and trades behind it.
What does Net Flow measure?
This tool tracks eligible premium at the prior ask minus eligible premium at the prior bid, separately for calls and puts. The upper chart combines call net, put net and their difference on the left dollar axis, with the underlying price on its own right axis. Its cumulative lines add eligible amounts through each minute end. Zooming does not reset the running total. If session coverage cannot support a cumulative series, the chart shows available minute amounts and labels the limitation.
The name describes a family of options-flow charts. This implementation uses the explicit calculation policy below; it does not claim to reproduce another vendor’s calculations. Quant Data’s own guide describes cumulative call/put premium and quote-relative classification. Quant Data’s definition.
On a cumulative chart, a rising call or put line means that side’s eligible ask-priced premium exceeded its bid-priced premium during the interval. On a per-minute chart, a value above zero means more eligible premium at the ask in that minute; a rising line only means the minute’s net increased. Neither identifies the buyer, establishes a new position or predicts the next price move. Call and put colors identify the option type.
How is the premium calculated?
Trade premium = option price × contracts × contract multiplier. Calls and puts each have their own ask subtotal, bid subtotal and net. The contracts view uses quantity instead of premium; a large premium can reflect a higher option price rather than more contracts.
Call–put difference = call net premium − put net premium. This optional upper-chart line uses dollars. The lower chart’s Net-contract balance instead adds (call contracts at ask − call contracts at bid) − (put contracts at ask − put contracts at bid) from session start. Green is above zero; red is below zero. It is a signed contract measure, not traded volume or a prediction of price direction.
Traded volume switches the lower chart to contracts traded in each minute, with call and put portions stacked above zero. It includes trades outside the signed net calculation. Cancellation uncertainty is shown as an outlined range when exact volume cannot be established. A zero cancellation impact on net premium does not establish exact volume. Both lower-chart views share the upper chart’s time window and selection.
The paired quote must precede the trade, be from the same session, pass the condition checks and fall within the configured maximum quote age. The default limit is one second. Only an exact match to an unlocked, uncrossed bid or ask is classified. Midpoint, inside-spread, outside-spread, missing, stale or ambiguous quotes are labelled Side not determined. They remain outside signed net totals; their premium and reasons remain available. Theta documents its historical trade/quote pairing and exclusive timestamp option. Trade/quote source contract.
The calculation admits regular and automatic-execution trades, using eligible matched quotes. Other trade conditions are excluded from net. A cancellation can revise an earlier trade: exact cumulative requires reconciliation with the original records. Matching only contract, quantity and price does not establish the cancelled execution. A separate bounded display is available only when the retained records establish a finite worst-case impact within the limits below. Unknown or unsupported revisions remain unresolved. These are calculation eligibility rules, not a claim that excluded prints are invalid market activity. Trade conditions and cancellations · Quote conditions.
Why is a trade excluded? The calculation currently admits regular and automatic-execution trades. For example, Theta condition 125 means a single-leg auction. It remains visible in the trade list but does not enter net, even when its quote is fresh. Exclusion describes our calculation policy; it does not mean the trade is erroneous. Theta condition definitions.
A reconciled archive is a separate, read-only result. Its source records and ledger must establish each cancellation’s original trade, including the exchange and applicable position within that contract’s earlier trades. The original execution and cancellation are removed exactly once, and the resulting records are checked against their sources before cumulative becomes available. The original archive is preserved. The three confirmed October 22 SPY cancellations have been reconciled this way; this does not establish a match for a future ambiguous cancellation. No dollar-size exemption is applied to exact reconciliation.
The recovered October 22, 12:26–12:28 ET records now include verified underlying references from Theta’s one-second first-order records. Each reference is matched to a trade at or after its observation and record time, within the selected age limit. The original trade and quote fields are preserved. ITM and OTM views include these records when they pass that check; independent price bars are not used to fill classification inputs.
A worked example
Synthetic arithmetic example. These six prints are invented for explanation; they are not licensed market records. Each contract has a multiplier of 100.
| Option | Price | Contracts | Premium | Treatment | |
|---|---|---|---|---|---|
| A | Call | $2.10 | 3 | $630 | At prior ask: +$630 |
| B | Call | $2.00 | 1 | $200 | At prior bid: −$200 |
| C | Put | $1.20 | 2 | $240 | At prior ask: +$240 |
| D | Put | $1.10 | 3 | $330 | At prior bid: −$330 |
| E | Call | $2.05 | 2 | $410 | At midpoint: side not determined |
| F | Put | $1.20 | 1 | $120 | Excluded trade condition |
Call net: $630 − $200 = +$430. Put net: $240 − $330 = −$90. Four of six prints contribute to those nets. The $410 with side not determined and $120 condition-excluded premium remain visible in their own totals.
The corresponding contract nets are +2 calls and −1 put, giving a net-contract balance of +3. Call–put premium difference is $430 − (−$90) = +$520. Gross traded volume across all six prints is 12 contracts. Summation uses exact decimal inputs; rounding occurs for display.
What do ITM, OTM and 0DTE include?
Moneyness uses the recorded underlying reference available at the trade time, subject to the selected age limit. Calls are ITM when the underlying price is above the strike and OTM when it is below; puts are ITM when the underlying price is below the strike and OTM when it is above. Exact equality is ATM under this local policy. ATM and unknown moneyness stay in All but are excluded from both ITM and OTM.
Quote age and underlying-reference age are separate clocks. A fresh underlying price can establish moneyness even when the option’s bid/ask quote is too old to determine a side. The trade stays visible with its reason; it does not contribute to signed net premium.
The underlying observation and its source-record time must be from the same session and no later than the trade. The default maximum age is 1,000 milliseconds. Missing, future or stale references produce unknown moneyness. The current source is the underlying reference carried in Theta’s first-order option records; for stocks, Theta describes that value as the underlying bid/ask midpoint. It is not an independent tick-by-tick underlying trade feed. Underlying reference fields.
0DTE means the contract’s expiration date equals the displayed US Eastern session date. It does not describe hours remaining or override settlement rules. SPX and SPXW contract roots remain distinct. Every chart, contribution and trade selection must use the same displayed filters.
How can this help investigate a trade?
- Check the scope. Confirm the symbol, session date, selected window, filters and coverage before comparing lines.
- Select a change. Inspect an interval’s contribution instead of judging only the final cumulative total.
- Find its source. Break the interval into expirations and strikes, then inspect the constituent prints. Compare at-ask, at-bid, side-not-determined and excluded amounts.
- Compare price at the same time. Use the displayed source timestamps. A simultaneous move is context, not proof that the options prints caused it.
GEX and DEX answer different questions: they model options exposure from a chain. This chart describes a selected set of reported transactions. Exposure changes, outstanding open interest and executed premium are not interchangeable.
How are historical sessions loaded?
The session calendar enables only dates with saved data for the selected ticker. The latest available saved session opens by default; today appears only when verified records are available. Changing the ticker preserves the date when that ticker has saved data, otherwise it opens its latest available session. Historical charts do not update as a live feed.
The chart’s one-minute resolution describes those investigation intervals, not the frequency of an underlying price feed. Completion requires every requested interval to be saved and verified. A stopped or failed acquisition remains partial; its observed amounts stay available without being labelled complete-session totals.
Saved sessions are read-only. Opening a date or changing a filter does not collect data or alter the retained source records. Dates without data cannot be selected. A trade on an interval boundary belongs to the following minute, so it is not counted twice.
This preview displays saved historical sessions and separately published current-session snapshots when available. It checks for a new current-session publication once per minute. Each snapshot shows its update time; this is not a continuous live feed or a claim of measured exchange latency. Older selected dates stay fixed.
How should I compare the underlying price?
When available, the upper chart’s blue price line uses five-minute OHLC bar closes on the right axis. It shares the Eastern Time axis with the one-minute options intervals. The readout shows only the latest close whose bar has ended by the selected interval’s end. For example, the close of a 09:30–09:35 bar is not available when inspecting 09:32. Missing bars remain gaps.
The price source, original timestamps and coverage are retained with the saved session. Reopening that session uses its verified saved price context. The displayed close is rounded for readability; its original value remains available in the readout’s tooltip.
If independent price context is unavailable, the panel can show timestamped underlying references matched to option trades. These are sparse observations, not replacement OHLC bars. They are labelled separately. Independent price bars do not replace the causal underlying references used for ITM/OTM classification.
What does complete coverage mean here?
Read coverage as completion of the displayed provider queries and requested intervals. That is not an independent audit of all upstream market prints. Empty completed intervals differ from missing or failed intervals; a gap must not be interpreted as zero activity or a flat cumulative line. Dashed chart links connect recorded flow or price observations across gaps. The line assigns no value to an unobserved minute and does not restore a missing session total.
Underlying reference availability is separate from trade-query completion. Likewise, a complete short window is not a full session, and a full requested session is not proof of live streaming. Use the displayed scope and status rather than assuming coverage from the chart’s width.
The worked example below is synthetic and demonstrates the formula. The chart uses retained provider records, with its actual date and coverage shown beside it.
ITM, ATM and OTM
Moneyness compares the strike with the qualifying underlying price recorded at the trade. Calls are ITM when the underlying is above the strike; puts are ITM when it is below. The opposite cases are OTM. Exact equality is ATM.
All includes ITM, OTM, exact ATM and trades without a qualifying underlying reference. ITM and OTM exclude exact ATM and unknown moneyness. The ATM filter includes exact equality only. There is no near-ATM distance band. A missing or stale underlying reference remains unknown and is included only in All.
Reported trades in scope counts reported trades across the saved session after the expiration and moneyness filters. It includes trades excluded from net. It is not a contract count or the number of rows in the selected minute; unresolved cancellations can change it.
Reading the two charts
The upper chart shows cumulative call and put net premium, their optional difference, and the underlying price on its own axis. Each checkbox controls one line. Zooming preserves the running total from 09:30 ET. When cumulative values cannot be established, the chart instead shows available minute amounts and states why.
The lower chart defaults to Net-contract balance: running call net contracts minus running put net contracts. Switch to Traded volume to see the total number of call and put contracts traded in each minute. These answer different questions: signed net activity versus total activity.
A continuous collected prefix is required for a running balance. Missing minutes or unsupported cancellations leave it unavailable; Traded volume can still show the available observations with any verified uncertainty range. A verified $0 cancellation impact on premium does not establish contract totals or trade counts.
The chart states any qualified cancellation bound beside the data. A nonzero range is shaded; original trade identities and corrected counts remain separate from that bound. The latest available saved session opens by default.
Reading an incomplete session
By minute shows the retained records for each available minute. Recorded subtotal adds those selected minute nets from the start of the session. Missing minutes remain blank; the line resumes at the next recorded observation without estimating the missing contribution. This subtotal is not the full-session total. An unresolved cancellation can also change a record earlier in the day.
Exact cumulative remains separate and unavailable until the required records reconcile. Proving that every possible cancellation match has zero contribution to the selected Net Flow metric can establish zero net impact; it does not identify a particular cancelled print or verify trade counts. Missing roots, missing windows and missing ITM/OTM references require their own checks.
Cancellation display limits
These approved display limits are active where the source evidence establishes complete acquisition and a finite worst-case cancellation impact. They are not validated trading thresholds. Missing-window or missing-root exposure has no approved numerical bound.
- Whole-session premium: cancellation uncertainty must be no more than $1,000 and 0.05% of classified gross premium (at-ask plus at-bid), for each call/put side in the selected scope.
- Any affected five-minute window: no more than $100 and 0.1% of classified gross premium in that side and window. Near-zero activity does not get a minimum denominator.
- All limits must pass together and include every unresolved event. Recalculate after changing expiration, ITM/OTM or time scope. Do not use a dollar threshold for contracts.
- If the uncertainty range crosses zero, show direction as indeterminate. If original timing or moneyness is unknown, those filtered estimates remain unavailable. No predictive alert may use an unresolved estimate.
Bounded cumulative remains separate from exact cumulative. Its range includes every possible original matching the recorded contract, exchange, price and size at or before the cancellation timestamp. We do not choose an ambiguous original; omitting position restrictions widens this candidate set conservatively. An original outside the regular session contributes zero to this session. The classified-gross denominator is reduced by the largest possible cancelled eligible premium before checking the percentage limit.
Where every matching original is already excluded by the trade-condition rules, the net-impact bound is $0 even if the original identity is unresolved. Counts and gross premium can still change. Nonzero bounds appear as chart shading; a cumulative prefix that fails the limits stays blank. Complete acquisition means all requested provider intervals and roots returned, not an independent exchange-wide feed audit. These bounds are for display only; they do not establish a trading probability.