Options Volume vs Open Interest: Wetin Dem Mean?
Volume na contracts wey change hand today; open interest na di ones wey still dey outstanding. We define both, plus we measure one full day of di US options tape.
Options volume na di number of contracts wey change hand today; open interest na di contracts wey dey exist — positions wey dem open and never close. Volume dey pile up trade by trade all through di session, while dem dey recalculate open interest once per day by di Options Clearing Corporation (OCC) after market close. Dem build di put-call ratio from di volume side. Dis page dey define both, dey waka through di mechanics wey dey move each one, dey measure one full day of di US options tape — Monday, July 6, 2026 — and dey show where official open-interest figures dey.
Wetin be options volume?
Volume na di number of option contracts wey dem trade for dis current session. Every trade dey add im size — 500-contract block go add 500 — dem count am once, no be once per side, and di count dey reset to zero wen di next open start. Volume na live number, e dey stream for di consolidated tape wey OPRA (di Options Price Reporting Authority) dey run as trades dey print; dis page dey measure am from di stored tape.
Wetin be open interest?
Open interest (OI) na di number of contracts wey still dey outstanding: dem don open am and e never close yet — either through offsetting trade, exercise, or expiration. Dem dey track am per contract — each strike, expiration, and type get im own figure — and e no dey reset; e dey carry over.
Open interest no be live number. OCC — di clearinghouse wey dey behind every listed US option — dey reconcile opening and closing positions after each session and publish di updated count before di next open. Di OI wey you see for broker chain by 2 p.m. na just di prior evening count.
Di tape behind dis page dey carry trades, no be positions — e no get open-interest column, and every panel wey dem measure below na volume. Wetin e fit show na how di two dey interlock: how one single trade dey move each of dem, how much volume fit ever reach one OI print, and di rhythm wey OI screens dey watch. Di official figures dey anoda place — one section below talk where.
How one single trade fit change volume and open interest?
Every option trade get two side; each side either open position or close am. Make we follow one fresh contract through three example trades:
- Trader A buy to open one contract from trader B, wey sell to open. Volume: 1. Open interest: +1. One new contract don show — A hold the long side, B hold the short.
- Later A sell to close, and trader C buy to open. Volume: 1 more (2 for the day). Open interest: no change — the long side just change hand; one contract still dey outstanding.
- Finally, C sell to close and B buy to close the short. Volume: 1 more. Open interest: −1, e don return to zero — both side flat; the contract no dey exist again.
Every trade dey add to volume; open interest dey rise only when both side open, e dey fall only when both side close, and e dey hold steady for other cases. One consequence wey matter here: the volume for one day na the ceiling for how far that contract open interest fit move overnight. The tape no dey ever show which combination one print be; OCC dey settle that one after the close.
How one day of options volume be?
Di panel wey dey below total di whole US options tape for Monday, July 6, 2026.
The exact SQL behind every number
SELECT
round(sum(volume) / 1e6, 1) AS contracts_m,
round(sum(transactions) / 1e6, 1) AS trades_m,
uniqExact(ticker) AS distinct_contracts,
uniqExact(substring(ticker, 3, length(ticker) - 17)) AS distinct_roots,
round(sumIf(volume, substring(ticker, length(ticker) - 8, 1) = 'C') / 1e6, 1) AS call_contracts_m,
round(sumIf(volume, substring(ticker, length(ticker) - 8, 1) = 'P') / 1e6, 1) AS put_contracts_m,
round(toFloat64(sumIf(volume, substring(ticker, length(ticker) - 8, 1) = 'P')) / toFloat64(sumIf(volume, substring(ticker, length(ticker) - 8, 1) = 'C')), 2) AS put_call_ratio,
round(100 * toFloat64(sumIf(volume, substring(ticker, length(ticker) - 14, 6) = '260706')) / toFloat64(sum(volume)), 1) AS same_day_expiry_pct
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'One session: 60.6 million contracts for 10.5 million trades, across 340203 distinct contracts on 4654 underlying roots. Calls pass puts — 35.5 million against 25.1 million, a put/call ratio of 0.71 — and 38.8% of all volume dey for options wey expire dat same session.
Di accumulation show for di clock — di same session for half-hour buckets, running total dey beside am:
The exact SQL behind every number
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
round(sum(volume) / 1e6, 2) AS contracts_m,
round(sum(sum(volume)) OVER (ORDER BY formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i')) / 1e6, 1) AS running_total_m
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'
GROUP BY et_time
ORDER BY et_timeDi opening half-hour print 8.53 million contracts; by di last print di running total reach 60.6 million. (Di small 16:00 bucket na di 4:00–4:15 p.m. ET index-options tail.) Every point for dis chart na volume — di count wey OCC publish dat morning stand all day, and di next one land before Tuesday open.
Which kontracts dem trade pass?
Each option OCC ticker get root, expiry, call/put, and strike; di query dey parse all four so di table dey clear:
The exact SQL behind every number
SELECT
contract,
contracts_traded,
trades,
toUInt8(min(expires_july_6) OVER ()) AS all_ten_expire_july_6,
toUInt8(min(root_is_spy_or_qqq) OVER ()) AS all_ten_spy_or_qqq
FROM (
SELECT
concat(substring(ticker, 3, length(ticker) - 17), ' $',
toString(round(toFloat64(toUInt32OrZero(substring(ticker, length(ticker) - 7, 8))) / 1000, 2)),
if(substring(ticker, length(ticker) - 8, 1) = 'P', ' put', ' call'),
', expires 20', substring(ticker, length(ticker) - 14, 2), '-', substring(ticker, length(ticker) - 12, 2), '-', substring(ticker, length(ticker) - 10, 2)) AS contract,
toUInt64(sum(volume)) AS contracts_traded,
toUInt64(sum(transactions)) AS trades,
substring(ticker, length(ticker) - 14, 6) = '260706' AS expires_july_6,
substring(ticker, 3, length(ticker) - 17) IN ('SPY', 'QQQ') AS root_is_spy_or_qqq
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'
AND match(substring(ticker, 3, length(ticker) - 17), '^[A-Z]+$')
AND substring(ticker, 3, length(ticker) - 17) NOT IN ('SPCX')
GROUP BY ticker
ORDER BY contracts_traded DESC, ticker ASC
LIMIT 10
)
ORDER BY contracts_traded DESC, contract ASCDi busiest single kontract for July 6, SPY $751 call, expires 2026-07-06, print 1082297 kontracts across 128107 trades. Look di expiries: all ten expire dat same Monday and siddon under two roots — receipt columns dey check both claims for every row. Kontracts for dia final day na 0DTE options — zero days to expiration, and dem fill dis table: tight ladder of SPY and QQQ strikes.
Now run di day biggest print through di open-interest arithmetic. Wetin OI SPY $751 call, expires 2026-07-06 show Monday morning na di prior evening count — and di last wey go ever mention am. All 1082297 kontracts of volume trade inside im final session; at di close e expire, and di next OCC file drop am — open interest zero by definition. Di standing caveat for every 0DTE table: dis kontracts live and die inside di once-a-day OI cycle, and dia heavy volume never meet meaningful OI print.
Which underlyings dey control options volume?
Group di same session by root — di first letters of each option ticker, wey usually be di underlying symbol:
The exact SQL behind every number
SELECT
substring(ticker, 3, length(ticker) - 17) AS underlying_root,
round(sum(volume) / 1e6, 2) AS contracts_m,
round(100 * toFloat64(sum(volume)) / (SELECT toFloat64(sum(volume)) FROM global_markets.options_minute_aggs WHERE window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'), 1) AS pct_of_tape,
uniqExact(ticker) AS distinct_contracts,
round(100 * toFloat64(sumIf(volume, substring(ticker, length(ticker) - 14, 6) = '260706')) / toFloat64(sum(volume)), 1) AS same_day_expiry_pct
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'
AND match(substring(ticker, 3, length(ticker) - 17), '^[A-Z]+$')
AND substring(ticker, 3, length(ticker) - 17) NOT IN ('SPCX')
GROUP BY underlying_root
ORDER BY sum(volume) DESC, underlying_root ASC
LIMIT 10SPY lead di day with 12.1 million contracts — 20% of di whole tape under one root — with QQQ next at 6.88 million (11.3%). Di same-day-expiry column dey echo di table for up: 70.2% of di leader volume expire dat same afternoon. One root no always be symbol wey you fit buy — S&P 500 index options dey trade under Cboe im SPX and SPXW roots — and one underlying dey carry many contracts at once: 5747 distinct strike/expiry/type combinations print under di leader alone.
How much of one day volume fit even reach open interest?
If you split the session by time to expiration, the OI gist go show for one table:
The exact SQL behind every number
WITH dateDiff('day', toDate('2026-07-06'), toDate(concat('20', substring(ticker, length(ticker) - 14, 2), '-', substring(ticker, length(ticker) - 12, 2), '-', substring(ticker, length(ticker) - 10, 2)))) AS dte
SELECT
multiIf(dte = 0, 'same day (0DTE)', dte <= 7, '1-7 days', dte <= 31, '8-31 days', dte <= 365, '32-365 days', 'over a year') AS expires_in,
round(sum(volume) / 1e6, 1) AS contracts_m,
round(100 * toFloat64(sum(volume)) / (SELECT toFloat64(sum(volume)) FROM global_markets.options_minute_aggs WHERE window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'), 1) AS pct_of_volume,
round(uniqExact(ticker) / 1e3, 1) AS distinct_contracts_k,
round(100 * toFloat64(uniqExact(ticker)) / (SELECT toFloat64(uniqExact(ticker)) FROM global_markets.options_minute_aggs WHERE window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'), 1) AS pct_of_contracts
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'
AND dte >= 0
GROUP BY expires_in
ORDER BY min(dte)The same-day bucket na the extreme case: 0.9% of the day distinct contracts — roughly 3 thousand — carry 38.8% of all volume, the biggest share for any bucket, and none of am fit show for any future OI print. Another 25.3% expire within the week. The listed universe tilt the other way: the 32-365-day bucket alone hold 49.6% of distinct contracts, and over-a-year contracts be 6.9% of the universe but 1.3% of volume. Longer-dated contracts trade quietly and live long — na the conditions wey dey make standing pool build.
How open interest dey change day by day?
Screens wey dey watch open interest dey look di change for one contract OI from one morning print go di next. Na dis be di raw material — ten sessions of one long-dated contract, one SPY $620 put wey go expire December 18, 2026:
The exact SQL behind every number
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS session,
toUInt64(sum(volume)) AS contracts_traded,
toUInt64(sum(transactions)) AS trades
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-22 00:00:00' AND window_start < '2026-07-07 00:00:00'
AND ticker = 'O:SPY261218P00620000'
GROUP BY session
ORDER BY sessionFor six straight sessions di contract hardly print — e no ever pass few dozen contracts for one day, as small as 6 for 2026-06-29. For those days, im open interest just freeze — di ceiling rule cap im overnight move to dat day small number. Den three sessions wey follow each oda print 9006, 9172, and 10023 contracts. Di trades column add more detail: di 2026-06-30 burst show up for just 7 prints — block-sized orders — while di next session similar volume take 222 trades. By 2026-07-06 di tape don return to 20 contracts.
Volume alone no fit tell wetin dat burst do to open interest — new positions, unwind, or hands dey change. Di next morning OCC print settle am: OI wey dey rise across one volume burst dey read as new positioning, if e dey fall na unwind, if e flat for heavy volume na hands dey change. Dat day-over-day change na di reading wey traders dey screen for.
Where you fit check open interest?
No volume table dey carry am; di official figure dey here:
- OCC — dem dey publish daily volume and open interest by contract for theocc.com (under market data), dem dey update am every morning — na di source figure wey everi oda place dey redistribute.
- Your broker option chain — one "Open Interest" (or "Open Int") column dey beside volume, per strike and expiration — na di prior evening count, wey dey show all day long.
- Di listing exchanges — Cboe and im peers dey publish volume and OI summaries for dia market-statistics pages.
One caveat: "max pain" readings — di strike where di most option value go expire worthless — need di full strike-by-strike OI distribution. No volume table fit compute dem, dis page own sef dey inside; collect dose readings from OCC or exchange data, never from one volume screen.
How traders dey read volume and open interest together?
Side by side, di two dey read one contract liquidity from different angles — today traffic versus di crowd wey stand:
- Busy volume, large open interest. E active today on top one big standing pool — na di pairing wey dey usually show di tightest quoted markets.
- Busy volume, small open interest. Heavy turnover, small carry-over — na di signature of same-day-expiry trading or brand-new positioning.
- Quiet volume, large open interest. Positions wey dem build earlier, still dey stand, dem no dey turn over today.
- Quiet volume, small open interest. One thin contract — quotes dey sit wider, and one modest order fit move di price; check di bid-ask spread first.
No figure dey directional: volume dey count buyers and sellers for one tally, open interest dey count each contract long and short side as one — two traders fit read di same busy contract and hold opposite positions.
Options volume vs. open interest FAQ
Wetin be di difference between volume and open interest?
Volume na di count of option contracts wey dem trade for di current session, and e dey reset to zero every day. Open interest na di count of contracts wey still dey outstanding — wey dem don open and never close — and e dey carry over go di next day. Every trade dey add to volume; open interest dey move only based on di mix of opening and closing sides.
Why dem dey update open interest only once a day?
Open interest na clearinghouse count, no be tape count. Di public tape no dey mark trades as opening or closing; OCC dey reconcile those marks across clearing members after di session and publish di figure before di next open.
Wetin e mean if open interest dey rise or fall?
If open interest dey rise, e mean say dem open more contracts dan dem close — na net new positioning for dat strike; if e dey fall, e mean say positions dey unwind; if e flat on top heavy volume, e mean say positions change hand. Di volume for one day na di maximum wey di count fit move by di next morning print.
Volume fit pass open interest?
Yes — for short-dated contracts, e dey normal. A position wey dem open and close within one session go add to volume two times and add nothing to di next morning open-interest print, and a contract wey dey expire today no go ever show for tomorrow figure. On July 6, 2026, 38.8% of all US options volume dey for contracts wey dey expire dat same session. Check wetin be 0DTE option for di mechanics.
Every panel wey dey above na stored, inspectable query — expand di SQL to audit am, or point di same questions at any session for di Strasmore terminal.