Strasmore Research
Learn Matt ConnorBy Matt Connor · Updated 2026-08-12

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, while open interest is recomputed once per day by the Options Clearing Corporation (OCC) after the close. The put-call ratio is built from the volume side. This page defines both, walks the mechanics that move each, measures a full day of the US options tape, Monday, July 6, 2026, and shows where official open-interest figures live.

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, counted once, not once per side, and the count resets to zero at the next open. Volume is a live number, streaming on the consolidated tape run by OPRA (the Options Price Reporting Authority) as trades print; this page measures it from the stored tape.

What is open interest?

Open interest (OI) is the number of contracts currently outstanding: opened and not yet closed by an offsetting trade, an exercise, or expiration. It is tracked per contract, each strike, expiration, and type carries its own figure, and it never resets; it carries over.

Open interest is not a live number. OCC, the clearinghouse behind every listed US option, reconciles opening and closing positions after each session and publishes the updated count before the next open. The OI on a broker's chain at 2 p.m. is simply the prior evening's count.

The tape behind this page carries trades, not positions, it has no open-interest column, and every measured panel below is volume. What it can show is how the two interlock: how a single trade moves each, how much volume can ever reach an OI print, and the rhythm OI screens watch. The official figures live elsewhere, a section below says where.

How does a single trade change volume and open interest?

Every option trade has two sides; each side either opens a position or closes one. Walk a brand-new contract through three hypothetical trades:

  1. 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.
  2. A later sells to close, and trader C buys to open. Volume: 1 more (2 on the day). Open interest: unchanged, the long side changed hands; one contract still outstanding.
  3. Finally, C sells to close and B buys to close the short. Volume: 1 more. Open interest: −1, back to zero, both sides flat; 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. One consequence matters here: a day's volume is the ceiling on how far that contract's open interest can move overnight. The tape never shows which combination a print was; OCC settles that after the close.

What does one day of options volume look like?

The panel below totals the entire US options tape for Monday, July 6, 2026.

QueryOne day of the US options tape: 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'
Run this yourself

One session: 60.6 million contracts in 10.5 million trades, across 340203 distinct contracts on 4654 underlying roots. Calls outran puts, 35.5 million against 25.1 million, a put/call ratio of 0.71, and 38.8% of all volume was in options expiring that very session.

The accumulation shows on the clock, the same session in half-hour buckets, running total alongside:

QueryVolume accumulates live: July 6, 2026 in half-hour buckets (ET), with a running total
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_time
Run this yourself

The opening half-hour printed 8.53 million contracts; by the last print the running total reached 60.6 million. (The small 16:00 bucket is the 4:00–4:15 p.m. ET index-options tail.) Every point on this chart is volume, the count OCC published that morning stood all day, and the next landed before Tuesday's open.

Which individual contracts traded the most?

Each option's OCC ticker encodes root, expiration, call/put, and strike; the query parses all four so the table reads plainly:

QueryThe ten busiest option contracts of July 6, 2026
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 ASC
Run this yourself

The busiest single contract of July 6, SPY $751 call, expires 2026-07-06, printed 1082297 contracts across 128107 trades. Look down the expiries: all ten expired that same Monday and sit under two roots, receipt columns check both claims on every row. Contracts on their final day are 0DTE options, zero days to expiration, and they fill this table: a tight ladder of SPY and QQQ strikes.

Now run the day's biggest print through the open-interest arithmetic. Whatever OI SPY $751 call, expires 2026-07-06 showed Monday morning was the prior evening's count, and the last that will ever mention it. All 1082297 contracts of volume traded inside its final session; at the close it expired, and the next OCC file drops it, open interest zero by definition. The standing caveat on every 0DTE table: these contracts live and die inside the once-a-day OI cycle, and their heavy volume never meets a 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:

QueryTop 10 underlying roots by contracts traded, July 6, 2026
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 10
Run this yourself

SPY 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 table above: 70.2% of the leader's volume expired 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 roots, and one underlying carries many contracts at once: 5747 distinct strike/expiry/type combinations printed under the leader alone.

How much of a day's volume can even reach open interest?

Split the session by time to expiration and the OI implications fall out of one table:

QueryJuly 6, 2026 volume by time to expiration: the tape is short-dated, the listed universe is not
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)
Run this yourself

The same-day bucket is the extreme: 0.9% of the day's distinct contracts, roughly 3 thousand, carried 38.8% of all volume, the largest share of any bucket, and none of it can appear in any future OI print. Another 25.3% expired within the week. The listed universe tilts the other way: the 32-365-day bucket alone held 49.6% of distinct contracts, and over-a-year contracts were 6.9% of the universe but 1.3% of volume. Longer-dated contracts trade quietly and live long, the conditions where a standing pool builds.

What does open interest change look like day to day?

Open-interest screens watch the change in a contract's OI from one morning's print to the next. Here is the raw material, ten sessions of one long-dated contract, a SPY $620 put expiring December 18, 2026:

QueryTen sessions of one long-dated contract: the SPY $620 put expiring 2026-12-18
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 session
Run this yourself

For six straight sessions the contract barely printed, never more than a few dozen contracts a day, as few as 6 on 2026-06-29. On those days its open interest was effectively frozen, the ceiling rule caps its overnight move at that day's handful. Then three consecutive sessions printed 9006, 9172, and 10023 contracts. The trades column adds texture: the 2026-06-30 burst arrived in just 7 prints, block-sized orders, while the next session's similar volume took 222 trades. By 2026-07-06 the tape was back to 20 contracts.

Volume alone cannot say what that burst did to open interest, new positions, an unwind, or hands changing. The next morning's OCC print settles it: OI rising across a volume burst reads as new positioning, falling as an unwind, flat-on-heavy-volume as hands changing. That day-over-day change is the reading traders screen for.

Where can you check open interest?

No volume table carries it; the official figure lives here:

  • OCC, publishes daily volume and open interest by contract at theocc.com (under market data), updated each morning, the source figure everything else redistributes.
  • Your broker's option chain, an "Open Interest" (or "Open Int") column beside volume, per strike and expiration, the prior evening's count, all day long.
  • The listing exchanges, Cboe and its peers publish volume and OI summaries on their market-statistics pages.

One caveat: "max pain" readings, the strike where the most option value would expire worthless, need the full strike-by-strike OI distribution. No volume table can compute them, this page's included; take those readings from OCC or exchange data, never a volume screen. To see what that distribution actually buys you, the max pain calculation on a real SPY chain runs the arithmetic strike by strike and checks the answer against where settlement landed.

How do traders read volume and open interest together?

Side by side, the two read a contract's liquidity from different angles, today's traffic versus the standing crowd:

  • Busy volume, large open interest. Active today atop a large standing pool, 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 sit wider, and a modest order can move the price; check the bid-ask spread first.

Neither figure is directional: volume counts buyers and sellers in one tally, open interest counts each contract's long and short side as one, two traders can read the same busy contract and hold opposite positions.

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; open interest moves only with the mix of opening and closing sides.

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 clearing members after the session and publishes the figure before the next open.

What does rising or falling open interest mean?

Rising open interest means more contracts were opened than closed, net new positioning at that strike; falling means positions are unwinding; flat on heavy volume means positions changed hands. A day's volume is the maximum the count can move by the next morning's print.

Can volume be higher than open interest?

Yes, on short-dated contracts it is routine. A position opened and closed within one session adds volume twice and nothing to the next morning's open-interest print, and a contract expiring today never appears in tomorrow's figure. On July 6, 2026, 38.8% of all US options volume was in contracts expiring that same session. 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 on the Strasmore terminal.