Options Volume vs Open Interest: Wetin dem mean
Volume dey count contracts wey traders swap today while open interest dey track active positions. We break down how each one work using one full day of US options tape.
Options volume and open interest
Options volume dey count the total contracts wey traders don exchange for market today; open interest dey count the contracts wey still dey active, wey mean say dem open the position but dem never close am. Volume dey increase as trade dey happen throughout the session, but na once per day the Options Clearing Corporation (OCC) dey calculate open interest after market close. Na from the volume side wey dem dey build the put-call ratio. This page dey explain wetin both of dem mean, e dey show the mechanics wey dey move each one, e dey measure the full day of US options tape for Monday, July 6, 2026, and e dey show where you go fit see the official open-interest figures.
Wetin be options volume?
Volume na the total number of option contracts wey dem trade during the current session. Every trade dey add im size; if 500-contract block print, e go add 500, wey dem count once, no be once per side, and the count dey reset go zero when the next session open. Volume na live number, e dey stream for the consolidated tape wey OPRA (the Options Price Reporting Authority) dey run as trades dey print; this page dey measure am from the stored tape.
Wetin be open interest?
Open interest (OI) na the total number of contracts wey dey active: wey pesin don open but never close wit offsetting trade, exercise, or expiration. Dem dey track am per contract; every strike, expiration, and type get im own figure, and e no dey reset; e dey carry over go next day.
Open interest no be live number. OCC, the clearinghouse wey dey back every listed US option, dey reconcile opening and closing positions after every session and dem dey publish the updated count before the next market open. The OI wey you see for broker chain by 2 p.m. na just the count from the previous evening.
The tape wey dey back this page dey show trades, no be positions; e no get open-interest column, and every panel wey you see below na volume. Wetin e fit show na how the two take join body: how one single trade fit move each one, how much volume fit reach an OI print, and the rhythm wey OI screens dey watch. The official figures dey another place, and one section below talk where you go find am.
How one trade dey change volume and open interest?
Every option trade get two sides; each side fit open position or close one. Make we look how one new contract take move through three hypothetical trades:
- Trader A buy to open one contract from trader B, wey sell to open. Volume: one. Open interest: plus one. One new contract don exist, A hold the long side, B hold the short.
- A later sell to close, and trader C buy to open. Volume: one more (two 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: one more. Open interest: minus one, e go back to zero, both sides flat; the contract no come exist again.
Every trade dey add to volume; open interest dey rise only when both sides open, e dey fall only when both sides close, and e dey stay steady for other cases. One consequence dey important here: the volume for one day na the ceiling wey show how far that contract open interest fit move overnight. The tape no dey ever show which combination a print be; na OCC dey settle that one after market close.
How one day of options volume dey look?
The panel wey dey down so show the total US options tape for Monday, July 6, 2026.
| contracts (m) | trades (m) | contracts wey differ | roots wey differ | call contracts (m) | put contracts (m) | put/call ratio | % wey expire today |
|---|---|---|---|---|---|---|---|
| 60.6 | 10.5 | 340203 | 4654 | 35.5 | 25.1 | 0.71 | 38.8 |
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 inside 10.5 million trades, across 340203 distinct contracts on top 4654 underlying roots. Calls pass puts, 35.5 million against 25.1 million, wey give us put/call ratio of 0.71, and 38.8% of all the volume na options wey dey expire that same session.
The accumulation dey show for the clock, the same session for half-hour buckets, with the running total wey dey follow:
| ET time | contracts (m) | total wey dey run (m) |
|---|---|---|
| 09:30 | 8.53 | 8.5 |
| 10:00 | 6.39 | 14.9 |
| 10:30 | 5.28 | 20.2 |
| 11:00 | 5.07 | 25.3 |
| 11:30 | 4.34 | 29.6 |
| 12:00 | 3.97 | 33.6 |
| 12:30 | 3.63 | 37.2 |
| 13:00 | 3.49 | 40.7 |
| 13:30 | 4 | 44.7 |
| 14:00 | 3.55 | 48.3 |
| 14:30 | 3.44 | 51.7 |
| 15:00 | 3.59 | 55.3 |
| 15:30 | 4.86 | 60.1 |
| 16:00 | 0.49 | 60.6 |
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_timeThe opening half-hour print 8.53 million contracts; before the last print, the running total reach 60.6 million. (The small 16:00 bucket na the 4:00–4:15 p.m. ET index-options tail.) Every point for this chart na volume, the count wey OCC publish that morning stand all day, and the next one land before Tuesday open.
Which individual contracts traded the most?
Each option ticker wey OCC get dey show the root, expiration, call/put, and strike; the query dey break all four down so the table dey clear:
| contract | contracts wey dem trade | trades | all ten expire July 6 | all ten na SPY/QQQ |
|---|---|---|---|---|
| SPY $751 call, expires 2026-07-06 | 1082297 | 128107 | 1 | 1 |
| SPY $750 put, expires 2026-07-06 | 986392 | 106731 | 1 | 1 |
| SPY $752 call, expires 2026-07-06 | 911035 | 87708 | 1 | 1 |
| SPY $750 call, expires 2026-07-06 | 739555 | 116377 | 1 | 1 |
| SPY $751 put, expires 2026-07-06 | 735199 | 81507 | 1 | 1 |
| SPY $749 put, expires 2026-07-06 | 627447 | 74561 | 1 | 1 |
| SPY $753 call, expires 2026-07-06 | 587785 | 30301 | 1 | 1 |
| QQQ $725 call, expires 2026-07-06 | 520038 | 75367 | 1 | 1 |
| SPY $748 put, expires 2026-07-06 | 457351 | 48122 | 1 | 1 |
| QQQ $724 call, expires 2026-07-06 | 424104 | 66982 | 1 | 1 |
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 ASCThe contract wey move pass all for July 6, SPY $751 call, expires 2026-07-06, print 1082297 contracts across 128107 trades. Check the expiries: all ten expire that same Monday and dem dey under two roots, the receipt columns dey confirm both claims for every row. Contracts wey dey dia final day na 0DTE options, zero days to expiration, and dem full this table: one tight ladder of SPY and QQQ strikes.
Now, make we run the day biggest print through the open-interest arithmetic. Whatever OI SPY $751 call, expires 2026-07-06 show Monday morning na the count from the night before, and na the last time wey dem go mention am. All 1082297 contracts of volume trade inside its final session; as market close e expire, and the next OCC file go comot am, open interest zero by definition. The warning wey dey for every 0DTE table: these contracts dey live and die inside the once-a-day OI cycle, and their heavy volume no dey ever meet any meaningful OI print.
Which underlyings dominate options volume?
Group the same session by root, the leading letters of each option ticker, usually the underlying's symbol:
| underlying root | contracts (m) | % of tape | contracts wey differ | % wey expire today |
|---|---|---|---|---|
| SPY | 12.1 | 20 | 5747 | 70.2 |
| QQQ | 6.88 | 11.3 | 4661 | 72.4 |
| TSLA | 4.29 | 7.1 | 3266 | 65.4 |
| SPXW | 3.65 | 6 | 7407 | 73.2 |
| NVDA | 2.27 | 3.8 | 1984 | 49.3 |
| AAPL | 1.58 | 2.6 | 1706 | 56.9 |
| IWM | 1.35 | 2.2 | 1749 | 60.1 |
| AMZN | 0.79 | 1.3 | 1404 | 38.4 |
| META | 0.66 | 1.1 | 2730 | 55.1 |
| VIX | 0.65 | 1.1 | 405 | 0 |
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 the day with 12.1 million contracts, wey be 20% of the entire tape under one root, with QQQ follow am for 6.88 million (11.3%). The same-day-expiry column show wetin we see for the table up there: 70.2% of the volume for the leader expire that same afternoon. A root no be always symbol wey you fit buy, S&P 500 index options dey trade under Cboe SPX and SPXW roots, and one underlying fit get many contracts at once: 5747 distinct strike/expiry/type combinations print under the leader alone.
How much of a day's volume fit reach open interest?
Make we divide the session base on time to expiry, and the OI implications go show for one table:
| go expire for | contracts (m) | % of volume | contracts wey differ (k) | % of contracts |
|---|---|---|---|---|
| same day (0DTE) | 23.5 | 38.8 | 3 | 0.9 |
| 1-7 days | 15.3 | 25.3 | 47.1 | 13.8 |
| 8-31 days | 10.5 | 17.3 | 97.8 | 28.7 |
| 32-365 days | 10.5 | 17.3 | 168.8 | 49.6 |
| over a year | 0.8 | 1.3 | 23.6 | 6.9 |
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: 0.9% of the day's distinct contracts, wey be roughly 3 thousand, carry 38.8% of all volume. Na the largest share among all the buckets, and none of am fit appear for any future OI print. Another 25.3% expire within the week. The listed universe dey tilt go the other side: the 32-365-day bucket alone hold 49.6% of distinct contracts, and contracts wey pass one year na 6.9% of the universe but 1.3% of volume. Contracts wey get longer tenor dey trade small-small and dey stay long, na those conditions dey make standing pool build.
How open interest change dey look everyday?
Open-interest screens dey monitor how the OI of one contract dey change from one morning print go reach the next one. See the raw data here, ten sessions for one long-dated contract, SPY $620 put wey go expire for December 18, 2026:
| session | contracts wey dem trade | trades |
|---|---|---|
| 2026-06-22 | 15 | 7 |
| 2026-06-23 | 25 | 9 |
| 2026-06-24 | 26 | 10 |
| 2026-06-25 | 13 | 10 |
| 2026-06-26 | 21 | 11 |
| 2026-06-29 | 6 | 3 |
| 2026-06-30 | 9006 | 7 |
| 2026-07-01 | 9172 | 222 |
| 2026-07-02 | 10023 | 186 |
| 2026-07-06 | 20 | 7 |
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 sessions wey follow one another, the contract barely print, e no pass few dozen contracts per day, even reach as low as 6 for 2026-06-29. For those days, the open interest just stand gidigba, the ceiling rule come cap the overnight move to just the small amount wey happen that day. Then, for three sessions wey follow each other, the market print 9006, 9172, and 10023 contracts. The trades column come give more detail: the 2026-06-30 burst happen inside just 7 prints, wey be block-sized orders, while the volume wey follow for the next session take 222 trades. By 2026-07-06, the tape don return to 20 contracts.
Volume alone no fit tell you wetin that burst do to open interest, whether na new positions, an unwind, or say hand just dey change. The OCC print for the next morning go settle the matter: if OI rise during a volume burst, e mean say new positioning dey happen; if e fall, e mean say na unwind; if volume heavy but OI flat, e mean say hand just dey change. Na that day-over-day change be the reading wey traders dey screen for.
Where you fit check open interest?
No volume table get am; the official figure dey here:
- OCC, dey publish daily volume and open interest by contract for theocc.com (under market data), dem dey update am every morning, na the source figure wey every other place dey redistribute.
- Your broker's option chain, one "Open Interest" (or "Open Int") column wey dey beside volume, per strike and expiration, e dey show the count from the night before, throughout the whole day.
- The listing exchanges, Cboe and ein peers dey publish volume and OI summaries for their market-statistics pages.
One warning: "max pain" readings, the strike where the most option value go expire worthless, need the full strike-by-strike OI distribution. No volume table fit calculate them, even this page own; make you take those readings from OCC or exchange data, no ever use volume screen. To see wetin that distribution truly give you, the max pain calculation on a real SPY chain dey run the arithmetic strike by strike and check the answer against where settlement land.
How traders dey read volume and open interest together?
Side by side, the two dey show the liquidity of one contract from different angles; e dey compare today traffic with the people wey still dey ground:
- Busy volume, large open interest. Plenty activity today on top of one big pool wey already dey, this pairing dey usually happen when the market spread dey very tight.
- Busy volume, small open interest. Heavy turnover, but small amount dey carry over; this na sign of trading wey dey expire same day or fresh positioning.
- Quiet volume, large open interest. Positions wey dem build before, still dey ground, and no dey turn over today.
- Quiet volume, small open interest. A thin contract, the quotes dey wide, and small order fit move the price; check the bid-ask spread first.
None of the two figure dey show direction: volume dey count buyers and sellers together for one tally, open interest dey count each contract long and short side as one; two traders fit read the same busy contract and still hold opposite positions.
FAQ about options volume and open interest
Wetin be the difference between volume and open interest?
Volume dey count option contracts wey dem trade during the current session and e dey reset go zero every day. Open interest dey count contracts wey dey outstanding, wey dem open but never close, and e dey carry over go next day. Every trade dey add to volume; open interest only dey move based on whether the side na opening or closing.
Why dem dey update open interest only one time per day?
Open interest na count from clearinghouse, no be count from the tape. The public tape no dey mark trades as opening or closing; OCC dey reconcile those marks across clearing members after the session finish and dem dey publish the figure before the next market open.
Wetin e mean if open interest dey rise or fall?
If open interest dey rise, e mean say more contracts dey opened pass the ones wey dem close, so new positioning dey for that strike; if e dey fall, e mean say positions dey unwind; if e flat but volume high, e mean say positions just change hand. The volume for one day na the maximum wey the count fit move by the time the next morning print come out.
Volume fit higher pass open interest?
Yes, for contracts wey near expiry, e dey happen well. If person open and close position within one session, e go add to volume two times but e no go add anything to the next morning open-interest print, and contract wey expire today no go show for tomorrow figure. On July 6, 2026, 38.8% of all US options volume happen for contracts wey expire that same session. See wetin be 0DTE option for how the thing dey work.
Every panel wey dey up so na stored, inspectable query, expand the SQL to audit am, or ask the same questions for any session for the Strasmore terminal.