Options Volume vs. Open Interest, Explained
Volume counts contracts traded today; open interest counts contracts still outstanding. Both defined, plus one full day of the US options tape, measured.
Options volume counts the contracts that changed hands today; open interest counts the contracts that exist — positions opened and not yet closed. Volume accumulates trade by trade all session long, while open interest is recomputed once per day by the Options Clearing Corporation (OCC) after the close. This page defines both, walks through the mechanics that move each, then measures a full day of the US options tape — Monday, July 6, 2026 — with the exact SQL behind every figure one click away.
What is options volume?
Volume is the number of option contracts traded during the current session. Every trade adds its size — a 500-contract block adds 500. Each trade has a buyer and a seller, and the contract is counted once, not once per side. The count resets to zero at the next open.
Volume is a live number, streaming on the consolidated options tape run by OPRA (the Options Price Reporting Authority) as trades print. And volume is what this page measures: the warehouse behind every panel stores the OPRA tape per contract back to 2014, so any day's volume can be rebuilt from the prints.
What is open interest?
Open interest (OI) is the number of contracts currently outstanding: opened at some point and not yet closed by an offsetting trade, an exercise, or expiration. It is tracked per contract — each strike, expiration, and type (call or put) carries its own figure. Unlike volume, it never resets; it carries over.
Open interest is not a live number. OCC, the clearinghouse standing behind every listed US option, reconciles each member's opening and closing positions after the session and publishes the updated count before the next open. There is no official running figure during the day: the OI shown on a broker's option chain at 2 p.m. is the prior evening's count.
To be direct: the tape behind this page carries trades, not positions — it has no open-interest column, and every measured panel below is volume. Official open-interest figures live in OCC's public data, on the listing exchanges, and on any broker's option chain, stamped as of the previous close.
How does a single trade change volume and open interest?
Every option trade has two sides, and each side is either opening a position or closing one. Walk a brand-new contract through three hypothetical trades:
- Trader A buys to open one contract from trader B, who sells to open. Volume: 1. Open interest: +1. A new contract exists — A holds the long side, B the short.
- A later sells to close, and trader C buys to open. Volume: 1 more (2 on the day). Open interest: unchanged at 1. The long side changed hands; one contract is still outstanding.
- Finally, C sells to close and B buys to close the short. Volume: 1 more. Open interest: −1, back to zero. Both sides are flat, and the contract ceases to exist.
Every trade adds to volume; open interest rises only when both sides open, falls only when both sides close, and holds still otherwise. The tape never shows which combination a print was — OCC reconciles open/close marks at clearing after the session. Volume streams live; open interest follows the next morning.
What does one day of options volume look like?
The panel below totals the entire US options tape for Monday, July 6, 2026 — the first full session after the July 4 holiday weekend.
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, arriving in 10.5 million individual trades across 340203 distinct contracts on 4654 underlying roots. Calls outran puts — 35.5 million call contracts against 25.1 million puts, a put/call ratio of 0.71 — and 38.8% of all contracts traded were in options expiring that very session.
The accumulation is visible on the clock — the same July 6 session in half-hour buckets, with a running total alongside:
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 printed 8.53 million contracts; by the last print of the day the running total reached 60.6 million. (The small 16:00 bucket is the 4:00–4:15 p.m. ET tail where index options keep trading.) Every point on this chart is volume. Open interest did not tick once during these hours — the count OCC published that morning stood all day, and the next landed before Tuesday's open.
Which individual contracts traded the most?
The tape names the day's busiest contracts by itself. Each option's OCC ticker encodes the underlying root, expiration date, call/put, and strike; the query parses all four so the table reads in plain English:
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 busiest single contract of July 6, SPY $751 call, expires 2026-07-06, printed 1082297 contracts across 128107 separate trades. Look down the expiry dates: all ten expired that same Monday, and all ten sit under just two roots — the receipt columns check both claims on every row. Contracts on their final day of life are known as 0DTE options — zero days to expiration, and here they fill the table: a tight ladder of SPY and QQQ strikes, each turning over between 424104 and 1082297 contracts in one day. A same-day contract carries the fastest clock in the market: whatever it is worth at the close is where the trade ends, and that can be zero. For what single-contract outcomes look like in dollars, see the best and worst $1,000 of June 2026.
Which underlyings dominate options volume?
Group the same July 6 session by root — the leading letters of each option ticker, usually the underlying's stock or ETF 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 led the day with 12.1 million contracts — 20% of the entire tape under one root — with QQQ next at 6.88 million (11.3%). The same-day-expiry column echoes the busiest-contracts table: 70.2% of the leader's volume was in contracts expiring that same afternoon.
A root is not always a symbol you can buy: S&P 500 index options trade under Cboe's SPX and SPXW (weekly series) roots, and Cboe Volatility Index options under VIX — index roots sit alongside stock and ETF roots in the table above. And one underlying carries many contracts at once: the distinct-contracts column counts the strike/expiry/type combinations that printed at least one trade — 5747 for the leader alone. For the half-year backdrop, see our H1 2026 market recap.
How do traders read volume and open interest together?
Side by side, the two numbers read a contract's liquidity from different angles — today's traffic versus the standing crowd:
- Busy volume, large open interest. Active today, with a large standing pool of positions — the pairing that tends to coincide with the tightest quoted markets.
- Busy volume, small open interest. Heavy turnover, little carried over — the signature of same-day-expiry trading or brand-new positioning.
- Quiet volume, large open interest. Positions built earlier, still standing, not turning over today.
- Quiet volume, small open interest. A thin contract. Quotes tend to sit wider, and a modest order can move the price — worth checking the bid-ask spread before trading.
Neither figure is directional. Volume counts buyers and sellers in one tally, and open interest counts each contract's long and short side as one — two traders can read the same busy contract and hold opposite positions in it.
Options volume vs. open interest FAQ
What is the difference between volume and open interest?
Volume counts option contracts traded during the current session and resets to zero each day. Open interest counts contracts outstanding — opened and not yet closed — and carries over. Every trade adds to volume, while open interest rises, falls, or stays flat depending on whether each side of the trade opened or closed a position.
Which matters more for liquidity?
They answer different questions, and traders tend to read them together. Volume shows whether a contract is trading right now; open interest shows the standing pool of positions at that strike. A contract combining steady volume, sizable open interest, and a tight quoted spread is generally the easiest to enter and exit.
Why is open interest updated only once a day?
Open interest is a clearinghouse count, not a tape count. The public tape does not mark trades as opening or closing; OCC reconciles those marks across all clearing members after the session and publishes the updated figure before the next open. During market hours there is no official running number.
Can volume be higher than open interest?
Yes — on short-dated contracts it is routine. A position opened and closed within one session adds two trades of volume and nothing to the next morning's open-interest print, and a contract that expires today never appears in tomorrow's figure. On July 6, 2026, 38.8% of all contracts traded on the US tape were in options expiring that same session — each of the day's ten busiest contracts among them. See what a 0DTE option is for the mechanics.
Every panel above is a stored, inspectable query — expand the SQL to audit it, or point the same questions at any session or underlying on the Strasmore terminal.