apps2 · flow

SIGNED options order flow — every OPRA print classified by aggressor (who crossed the spread), so buy-initiated premium and sell-initiated premium are separated. Unsigned reads (put/call volume, premium $, OI) cannot tell a retail call-buying frenzy from institutions distributing into it. Both sides of the tape are always shown; the net is an annotation, never the headline. hubdecoupgammavoltsuoaretailbettingflow loading…
How to use this page — the question it answers, how to read the headline, and the two mistakes that make every number on it meaningless
What does this page actually measure, and why is the net alone a trap? — signed order flow Every other options read in BFM is UNSIGNED. This one is signed by aggressor. Read the buy column and the sell column together; the net is the small number.
loading…
What every number on this page means — the literal formula for each metric, what a high reading means, what a low one means, and where the current value sits in its own history
What the words on this page mean — aggressor, signed flow, imbalance, absorption, CVD, DTE, quote rule — each in plain language
Who was in a hurry today — buyers or sellers? Two-sided tape: buy-initiated vs sell-initiated premium by DTE cohort (days to expiry) Gross both-sides magnitude is the dominant mark: the bar ABOVE zero is aggressive buying, the bar BELOW zero is aggressive selling. The net is the small black tick. A tall pair of bars with a tiny net = a heavily traded contract being absorbed — not a directional signal.
Click a cohort's bars to pin it into the readout below (and highlight its table row). Click empty canvas to clear. Shift+wheel = Y-stretch; the bottom grip resizes the whole chart.
Did the buying hold into the close, or get sold into? Session CVD — cumulative signed premium through one session Cumulative buy-initiated minus sell-initiated premium, bucket by bucket, from the open. A line that climbs all session then rolls over into the close is buying that got sold into. Trading-hours axis only (the recorded buckets are RTH); times are US Eastern.
14 buckets
Click a line to identify just that one (the rest dim; the SPX / NAS100 baselines never dim). Click empty canvas to clear. Shift+click = all-series dateline.
Is today unusual for this cohort, or a normal day? Imbalance against each cohort's own distribution One column per cohort x call/put. The rail is that series' full own-history range, the box is p25–p75, the bar is the median, every past session is a faint dot, and the black pin is TODAY. A number only means something against its own history — never read the point value alone.
Click a column to pin that cohort into the readout above. Shift+wheel = Y-stretch (the value axis); the bottom grip resizes the whole chart.
How has the aggression run over the recent sessions? Signed flow over time — line chart + stretch tape (the mandatory pair) Top: the precise read — every selected cohort as its own line, normalized, with SPX + NAS100 baselines. Bottom, flush beneath it: the glanceable read — the same rows as a heatmap versus their own history, so correlation and anti-correlation across cohorts jump out where overlapping lines cannot show them. Both share ONE session x-axis, window, zoom and pan.
60 sessions
Dashed chips are the other underlyings (cross-underlying overlay, off by default). Click a line to identify just that one; click empty canvas to clear; shift+click = all-series dateline.
What did every cohort actually do? Latest session — every cohort x call/put, both sides, with premium reconciliation Every column sortable; every column heat-shaded on its own scale. Buy and sell are shown as opposing bars on one shared scale so absorption is visible at a glance. The last columns exist so the premium reconciles: classified buy + sell + unclassified + excluded multi-leg = total premium that printed.
What is each view for, and what does it tell you?