Hedging Flow estimates the directional stock flow that dealers are implicitly forced to generate as they hedge their options book, and charts it as a running cumulative $-notional line (split calls/puts, with an optional underlying-price overlay). Where GEX/VEX and TRACE show how much gamma exposure is sitting at a strike, Hedging Flow tries to estimate the actual buying or selling that exposure is currently translating into.
Unreleased / experimental. All three data paths described below are built and pass their own unit tests. The live-IB path has been repeatedly tested against a real IB connection and its chart shape now looks genuinely reasonable, but several open questions remain (see Limitations) and it has not been checked against any independent reference. The CDN and backtest paths have not been live-tested at all. Treat every number this feature shows as a hypothesis about flow direction, not a confirmed measurement — please read Limitations before trusting anything else on this page.
Free Trial, Premium, and WhiteLabel editions only (or Developer mode) — same gate as GEX/VEX and TRACE, since all three read the same kind of dealer-positioning data. See the Licensing & Editions guide.
Related:
GEX/VEX and TRACE are both snapshots of positioning — how much gamma or vanna sits where, right now or across a swept time horizon. Hedging Flow asks a follow-on question: as customers trade options and the underlying moves, dealers on the other side of those trades are (in the standard framework) forced to buy or sell shares of the underlying to stay delta-hedged. Accumulating an estimate of that forced buying/selling over a session produces a running total that some practitioners use as a proxy for directional pressure the options market is quietly exerting on the underlying — distinct from, and sometimes opposed to, whatever "organic" buying/selling is happening in the stock itself.
This is the same underlying concept popularized under names like "HIRO" — a real-time series meant to show whether options-driven dealer hedging is currently a net tailwind or headwind for the underlying, updated continuously rather than as a single end-of-day number.
For every option trade (or, in SOAP2's case, every proxy for one — see below), the model assumes the dealer takes the opposite side of whoever initiated it, then hedges that new position in the underlying:
The size of that hedge is the trade size times the option's delta times the contract multiplier — a bigger trade or a higher-delta (more in-the-money) option moves more shares. Summing these signed hedge estimates over time, split into a calls line and a puts line, is what produces the cumulative chart.
Two things this depends on that are worth being explicit about: knowing which side initiated each trade (customer buy vs. sell — inferred, since no data feed states this directly), and knowing the option's delta at the time (from live Greeks where available, otherwise a model recompute). Both are estimates, not observed facts, which is the core reason this whole feature is a hypothesis-generating tool rather than a direct flow measurement — see Limitations.
SOAP2 offers three different data sources for the same underlying calculation, because none of the data SOAP2 has access to combines both "a real trade tape" and "live, for any expiry, right now." Each path is a different compromise, and each is labeled on its own chart so you always know which one you're looking at.
| Where | What it actually measures | How confident | |
|---|---|---|---|
| Trade-tape backtest | Data Chart menu → "Hedging Flow Backtest..." — replays a CBOE Trades CSV you've imported for a past day | Real per-print trade data — the closest of the three to an actual trade tape, since it has one | Best foundation of the three, but the buy/sell side is still inferred from quote position, not stated by the data |
| CDN delayed snapshot | Data Chart menu → "Hedging Flow (CDN, Delayed)..." — one manual "Fetch" of CBOE's current full-chain snapshot | Open interest change between two fetches, used as a stand-in for trade size and side (OI up = read as new buying, OI down = read as closing) | Crude — see Limitations. Open interest only truly updates once per day on this feed, so this is really a same-day-vs-yesterday comparison dressed as a live chart, not a live flow read |
| Live-IB real tick band | Inside an OA — the Hedging Flow toolstrip button | Every real trade print on a narrow band of strikes near the money (10 strikes each side of spot, tighter for near-dated expiries), classified and added to the chart the instant it happens — not on a timer | The most responsive of the three, and the closest of the three to a real trade-by-trade tape (each real print gets its own contribution), but still limited to a narrow strike band, not the whole chain |
Note on tick-by-tick data: Interactive Brokers does not offer a live tick-by-tick feed for OPTIONS at all (only stocks/futures/FX), so the live-IB path above works instead by reacting instantly to each tracked contract's own trade-volume update the moment it arrives — in practice this behaves like a real-time tick feed for the strikes it tracks, without needing IB's (options-unavailable) tick-by-tick API. Historical tick-level data is available for options, and is what seeds the chart with real history the moment you open Hedging Flow — see FAQ below.
"The dropdown next to the button says minutes — isn't this feature supposed to be real-time?"
Yes, it is real-time. That dropdown used to control how often data was captured (a genuine polling interval),
but it doesn't anymore — every real trade print is captured and added to the chart the instant it happens,
regardless of the dropdown. What the dropdown still controls: how often the chart redraws on screen,
how often the tracked strike band re-centers if the underlying has moved a lot, and how often the Greeks used
to size each trade get refreshed. A short setting (1 min) keeps the picture tight to the market; a long one
(30 min) means data is still being captured correctly in the background, but what you see on screen — and
which strikes are being watched — can lag behind. Think of it as "how often do I glance at the security
camera," not "how often does the camera record."
"The chart is blank (or barely started) and the box under it says 'Nothing significant flagged'. Is it broken?"
Probably not. Right after you open the mode, SOAP2 asks IB for the last couple of hours of trades on each
tracked strike. IB often returns nothing for quiet strikes, especially overnight and before the open, and
occasionally a request is slow or times out. The status line under the toolbar names which of those happened
("IB returned no trade history for any strike", "N IB requests timed out", ...), and the box under the chart
says how many points are plotted, over what span, and why no drift was flagged (for example, it needs 30
minutes of history before it will judge a drift). The chart fills in from live trades as they arrive. If it
stays empty well into the session, send us your MessageLog.txt — the lines starting with
[HedgingFlow seed] show exactly how IB answered.
"I saw a message about '15 mins bars' — I thought this used real tick data?"
It does, for the option strikes. That message is specifically about the underlying's own reference
price series, which is still built from short bars (configurable in General Settings), not real ticks — it's
only used to know roughly where the underlying was at each historical moment, a much coarser need than the
per-trade option data. The message should say "underlying reference price (not strikes)" to make this
explicit; if you see it worded any other way, you're likely looking at an older build.
"What does 'Blocks' mean in the chart legend?"
It's there for a different data path (the trade-tape backtest, which can flag an individual print as a large
negotiated block and count it separately so one big cross doesn't masquerade as retail buying/selling
pressure). The live-IB path described on this page has no way to identify a block trade specifically, so its
Blocks line is always flat at zero — safe to ignore it here.
"Why does the chart take a while to appear when I click the button?"
It's loading a couple of hours of real recent trade history first, one strike at a time (up to 30), so the
chart shows a real picture immediately instead of starting empty. This can take well over a minute. Avoid
repeatedly opening/closing Hedging Flow (or switching expiry tabs, which re-triggers this) in quick
succession — Interactive Brokers limits how many historical-data requests can be made in a short window, and
each load uses a meaningful chunk of that budget.
"The Puts (or Calls) line went completely flat for a long stretch, then picked back up — is that
broken?"
Not necessarily — it can mean that side genuinely had no real trades to react to during that stretch, since
this path counts real prints, not an estimate. If a whole side stays flat while the other keeps moving
normally for an unusually long time, that's still worth reporting if you see it.
"The chart stayed blank / said no history was found, even though the market should be active"
Confirmed in one real case: an index's own options can genuinely have zero prints for hours even inside
Cboe's advertised near-24-hour trading window, while a liquid ETF tracking the same market (its Hedging
Flow substitute) trades normally at the same moment. If this happens, try Sub Chain (see
above) to get a live picture from the substitute's own options instead, or check back during that index's
regular trading hours.
Go back to the main help page: SOAP2 Help Guide