Which ETFs Have 0DTE Options?
Which ETFs have 0DTE options? We count every dated expiration in the option chain, by weekday, and rank the funds by how many weekdays they cover.
Which ETFs have 0DTE options? A 0DTE option is a contract trading on its final day, so one exists only where an exchange has listed an expiration dated for that session. That turns the question into a counting exercise over the option chain: which funds carry expirations dated on which weekdays. The screen below runs that count over a recent completed month and ranks 15 exchange-traded funds by how many of the five weekdays their dated expirations land on. Every name on it earned its place from dated expirations that traded, which is a different exercise from repeating a roster somebody typed once. 0DTE options covers the contract itself. This page answers the narrower question of where they exist among funds.
Which ETFs carry 0DTE options, counted by weekday
| symbol | weekdays_covered | mon_expiries | tue_expiries | wed_expiries | thu_expiries | fri_expiries | dated_expiries |
|---|---|---|---|---|---|---|---|
| GLD | 5 | 3 | 4 | 5 | 4 | 4 | 20 |
| IWM | 5 | 3 | 4 | 5 | 4 | 4 | 20 |
| QQQ | 5 | 3 | 4 | 5 | 4 | 4 | 20 |
| SMH | 5 | 3 | 4 | 5 | 4 | 4 | 20 |
| SPY | 5 | 3 | 4 | 5 | 4 | 4 | 20 |
| XLF | 5 | 3 | 4 | 5 | 4 | 4 | 20 |
| EEM | 3 | 3 | 0 | 5 | 0 | 4 | 12 |
| IBIT | 3 | 3 | 0 | 5 | 0 | 4 | 12 |
| SLV | 3 | 3 | 0 | 5 | 0 | 4 | 12 |
| SOXL | 3 | 3 | 0 | 5 | 0 | 4 | 12 |
| TLT | 3 | 3 | 0 | 5 | 0 | 4 | 12 |
| TQQQ | 3 | 3 | 0 | 5 | 0 | 4 | 12 |
| XLE | 3 | 3 | 0 | 5 | 0 | 4 | 12 |
| UNG | 2 | 0 | 0 | 5 | 0 | 4 | 9 |
| USO | 2 | 0 | 0 | 5 | 0 | 4 | 9 |
The exact SQL behind every number
SELECT
underlying_symbol AS symbol,
uniqExact(toDayOfWeek(expiration_date)) AS weekdays_covered,
uniqExactIf(expiration_date, toDayOfWeek(expiration_date) = 1) AS mon_expiries,
uniqExactIf(expiration_date, toDayOfWeek(expiration_date) = 2) AS tue_expiries,
uniqExactIf(expiration_date, toDayOfWeek(expiration_date) = 3) AS wed_expiries,
uniqExactIf(expiration_date, toDayOfWeek(expiration_date) = 4) AS thu_expiries,
uniqExactIf(expiration_date, toDayOfWeek(expiration_date) = 5) AS fri_expiries,
uniqExact(expiration_date) AS dated_expiries
FROM global_markets.options_greeks
WHERE date BETWEEN '2026-09-01' AND '2026-09-30'
AND expiration_date BETWEEN '2026-09-01' AND '2026-09-30'
AND toDayOfWeek(expiration_date) <= 5
AND volume > 0
AND underlying_symbol IN ('SPY','QQQ','IWM','DIA','VOO','IVV','VTI','RSP','MDY',
'EEM','EFA','FXI','EWZ','EWJ','KWEB','INDA',
'GLD','SLV','GDX','USO','UNG',
'TLT','IEF','LQD','HYG',
'XLF','XLE','XLK','XLV','XLU','XLI','XLP','XLY','XLB','XRT','KRE',
'SMH','XBI','ARKK','IBIT','TQQQ','SQQQ','SOXL','VXX','UVXY')
AND underlying_symbol NOT IN ('SPCX')
GROUP BY underlying_symbol
ORDER BY weekdays_covered DESC, dated_expiries DESC, symbol
LIMIT 15GLD heads the table with dated expirations on 5 of the five weekdays and 20 distinct expiration dates inside the window. The Monday through Friday columns each count distinct expiration dates that fell on that weekday and traded. For the leading fund, Monday shows 3 dated expirations and Tuesday 4. The calendar sets those ceilings: September 2026 holds four Mondays, one of them a market holiday with no session and no expiration on it, against five Tuesdays.
Four conditions decide where a fund lands:
- The count runs over expiration dates rather than sessions, and a contract dated for a Tuesday is a 0DTE contract on that Tuesday.
- Contract volume was above zero, which keeps listed-but-untraded expirations out of the tally.
- Expiration dates outside the month are dropped, and so are weekend-dated expirations.
- The screen starts from a fixed list of funds, and where each one lands is settled by the count alone.
The fourth condition is what separates a chain-derived answer from a copied one. Nothing in the query knows which funds are supposed to qualify.
Where this list differs from the five-symbol lists circulating elsewhere
Short lists of 'the five 0DTE symbols' are easy to find, and they diverge from the panel above in two specific ways.
The first is a category mix-up. Those lists usually fold cash-settled index options, SPX and XSP among them, in with funds. An index option is not an option on fund shares. It settles to a cash amount against an index level and never delivers anything, and the contract size and tax treatment differ too, all of which is the subject of SPX vs SPY options. Counting index products as ETFs pads the list and mislabels the instrument a reader would actually be holding.
The second is staleness. Expirations are added and withdrawn by exchange programme, one weekday and one product at a time. A roster typed into an article describes the season it was typed in. A count run over the chain describes the month it covered and names that window on the panel. When the two disagree, the count is the one with receipts underneath it: 15 funds sit on the screen above, ordered by weekday coverage, and the per-weekday columns show how each one got there. For the clock-time half of the same question, which hours a same-day contract actually trades, see when 0DTE options trade.
Which funds cover the fewest weekdays
Partial coverage is the more common pattern among funds, and the thin end of the screen teaches more than the leaders do on their own. The panel below sorts the same screen the other way, thinnest coverage first.
| symbol | weekdays_covered | dated_expiries |
|---|---|---|
| INDA | 1 | 1 |
| MDY | 1 | 1 |
| VTI | 1 | 1 |
| ARKK | 1 | 4 |
| EWJ | 1 | 4 |
| GDX | 1 | 4 |
| HYG | 1 | 4 |
| IEF | 1 | 4 |
| IVV | 1 | 4 |
| KWEB | 1 | 4 |
| LQD | 1 | 4 |
| RSP | 1 | 4 |
The exact SQL behind every number
SELECT
underlying_symbol AS symbol,
uniqExact(toDayOfWeek(expiration_date)) AS weekdays_covered,
uniqExact(expiration_date) AS dated_expiries
FROM global_markets.options_greeks
WHERE date BETWEEN '2026-09-01' AND '2026-09-30'
AND expiration_date BETWEEN '2026-09-01' AND '2026-09-30'
AND toDayOfWeek(expiration_date) <= 5
AND volume > 0
AND underlying_symbol IN ('SPY','QQQ','IWM','DIA','VOO','IVV','VTI','RSP','MDY',
'EEM','EFA','FXI','EWZ','EWJ','KWEB','INDA',
'GLD','SLV','GDX','USO','UNG',
'TLT','IEF','LQD','HYG',
'XLF','XLE','XLK','XLV','XLU','XLI','XLP','XLY','XLB','XRT','KRE',
'SMH','XBI','ARKK','IBIT','TQQQ','SQQQ','SOXL','VXX','UVXY')
AND underlying_symbol NOT IN ('SPCX')
GROUP BY underlying_symbol
ORDER BY weekdays_covered ASC, dated_expiries ASC, symbol
LIMIT 12INDA sits at the thin end with dated expirations on 1 of the five weekdays, 1 dates in all. The last row of the panel, RSP, covers 1. A fund sitting at one weekday is carrying the standard Friday weekly cycle and nothing else. Funds further up have had one or two extra weekdays layered onto that cycle. Someone who reads 'this fund has 0DTE options' and then works a Tuesday order against a fund with no Tuesday expiration finds no contract to trade, so the weekday column, rather than the fund name, is the practical answer.
The same exercise run on individual companies gives a shorter answer again. which stocks have daily options runs that count, and why only some stocks carry daily expirations covers the listing tests a single name has to pass.
Why these funds and not other ETFs
The spread across the two panels lines up with four features of these products.
- Broad-based index exposure. Daily expirations have been extended on funds tracking broad, diversified indexes rather than narrow baskets. A broad underlying carries no single-company event landing inside the contract's one-day life.
- Exchange listing programmes. Expirations arrive on a schedule the exchange sets and widens one weekday at a time, so a fund can sit at three or four weekdays for a long stretch before a fifth is listed.
- Volume and open-interest tests. Activity thresholds form part of the test an exchange applies when it extends a cycle, and a fund trading a few hundred contracts a day does not meet them.
- Continuous two-sided quotes. A same-day contract lives entirely inside one session, and a market in it needs quotes present all day, which concentrates in the names already carrying the heaviest volume.
That last point is measurable, so here it is measured.
| symbol | avg_daily_contract_volume_k |
|---|---|
| SPY | 3538.6 |
| QQQ | 2557.4 |
| IWM | 1100.8 |
| TLT | 870.8 |
| IBIT | 656.3 |
| HYG | 568.4 |
| EWZ | 443.3 |
| GLD | 365.6 |
| SLV | 312.8 |
| SOXL | 260.6 |
| TQQQ | 255.4 |
| USO | 239.4 |
The exact SQL behind every number
SELECT
underlying_symbol AS symbol,
round(sum(volume) / uniqExact(date) / 1000, 1) AS avg_daily_contract_volume_k
FROM global_markets.options_greeks
WHERE date BETWEEN '2026-09-01' AND '2026-09-30'
AND volume > 0
AND underlying_symbol IN ('SPY','QQQ','IWM','DIA','VOO','IVV','VTI','RSP','MDY',
'EEM','EFA','FXI','EWZ','EWJ','KWEB','INDA',
'GLD','SLV','GDX','USO','UNG',
'TLT','IEF','LQD','HYG',
'XLF','XLE','XLK','XLV','XLU','XLI','XLP','XLY','XLB','XRT','KRE',
'SMH','XBI','ARKK','IBIT','TQQQ','SQQQ','SOXL','VXX','UVXY')
AND underlying_symbol NOT IN ('SPCX')
GROUP BY underlying_symbol
ORDER BY avg_daily_contract_volume_k DESC
LIMIT 12SPY averaged 3538.6 thousand option contracts a day across all expirations in the window, the heaviest on the screen. By the bottom of the twelve, USO averaged 239.4 thousand a day. Set this ranking beside the first panel and the same handful of names recurs near the top of both: wide weekday coverage and heavy volume sit together.
A month of dated expirations, date by date
The weekday count is a tally. The trace below is the same fact drawn out in time: every expiration date the screen leader carried inside the window, with the contract volume that traded into each of them across the month.
| expiry_date | expiry_label | weekday | symbol | contract_volume_k |
|---|---|---|---|---|
| 2026-09-02 | Sep 2 | Wed | SPY | 1378.5 |
| 2026-09-03 | Sep 3 | Thu | SPY | 1215.3 |
| 2026-09-04 | Sep 4 | Fri | SPY | 2490.5 |
| 2026-09-08 | Sep 8 | Tue | SPY | 1600.2 |
| 2026-09-09 | Sep 9 | Wed | SPY | 1717.2 |
| 2026-09-10 | Sep 10 | Thu | SPY | 1655 |
| 2026-09-11 | Sep 11 | Fri | SPY | 3521.3 |
| 2026-09-14 | Sep 14 | Mon | SPY | 1674.6 |
| 2026-09-15 | Sep 15 | Tue | SPY | 1967.3 |
| 2026-09-16 | Sep 16 | Wed | SPY | 1406.5 |
| 2026-09-17 | Sep 17 | Thu | SPY | 1925.6 |
| 2026-09-18 | Sep 18 | Fri | SPY | 8648.4 |
| 2026-09-21 | Sep 21 | Mon | SPY | 1808.2 |
| 2026-09-22 | Sep 22 | Tue | SPY | 2109.2 |
| 2026-09-23 | Sep 23 | Wed | SPY | 2052 |
| 2026-09-24 | Sep 24 | Thu | SPY | 1828.4 |
| 2026-09-25 | Sep 25 | Fri | SPY | 5352.7 |
| 2026-09-28 | Sep 28 | Mon | SPY | 2308.3 |
| 2026-09-29 | Sep 29 | Tue | SPY | 2018.1 |
| 2026-09-30 | Sep 30 | Wed | SPY | 5981.2 |
The exact SQL behind every number
WITH dated AS
(
SELECT
underlying_symbol,
expiration_date,
sum(volume) AS contracts
FROM global_markets.options_greeks
WHERE date BETWEEN '2026-09-01' AND '2026-09-30'
AND expiration_date BETWEEN '2026-09-01' AND '2026-09-30'
AND toDayOfWeek(expiration_date) <= 5
AND volume > 0
AND underlying_symbol IN ('SPY','QQQ','IWM','DIA','VOO','IVV','VTI','RSP','MDY',
'EEM','EFA','FXI','EWZ','EWJ','KWEB','INDA',
'GLD','SLV','GDX','USO','UNG',
'TLT','IEF','LQD','HYG',
'XLF','XLE','XLK','XLV','XLU','XLI','XLP','XLY','XLB','XRT','KRE',
'SMH','XBI','ARKK','IBIT','TQQQ','SQQQ','SOXL','VXX','UVXY')
AND underlying_symbol NOT IN ('SPCX')
GROUP BY underlying_symbol, expiration_date
),
leader AS
(
SELECT
underlying_symbol,
uniqExact(toDayOfWeek(expiration_date)) AS weekdays_covered,
sum(contracts) AS contracts
FROM dated
GROUP BY underlying_symbol
ORDER BY weekdays_covered DESC, contracts DESC, underlying_symbol
LIMIT 1
)
SELECT
toString(expiration_date) AS expiry_date,
formatDateTime(expiration_date, '%b %e') AS expiry_label,
formatDateTime(expiration_date, '%a') AS weekday,
any(underlying_symbol) AS symbol,
round(sum(contracts) / 1000, 1) AS contract_volume_k
FROM dated
WHERE underlying_symbol IN (SELECT underlying_symbol FROM leader)
GROUP BY expiration_date
ORDER BY expiration_dateThat is 20 dated expirations, from Sep 2 through Sep 30, carrying 1378.5 thousand contracts into the first and 5981.2 thousand into the last. The weekday column beside each date answers the original question date by date rather than by assertion. Run the same block against a fund from the second panel and the gaps appear on the weekdays it does not list, visible at a glance.
FAQ
What does 0DTE mean for an ETF option?
Zero days to expiration: the contract's last trading day is the current session, and it ceases to exist after the close. The mechanics match a 0DTE option on any other underlying, set out in what 0DTE options are.
Which ETF trades the most option volume?
Over the window counted here, SPY averaged 3538.6 thousand option contracts a day across all expirations, the highest figure on the screen.
Do all ETFs with weekly options have a 0DTE option every weekday?
No. The second panel lists 12 funds at the thin end of the screen, the last of them carrying dated expirations on 1 of the five weekdays. Weekly options and daily expirations are separate listings.
Can the list of ETFs with 0DTE options change?
Yes. Exchanges list and withdraw expirations by programme, and activity thresholds form part of the test. The durable form of this answer is a dated count over the chain, which is what the panels above hold.
Are index 0DTE options the same as ETF 0DTE options?
No. An index option settles to a cash amount measured against an index level, while a fund option delivers shares of the fund. SPX vs SPY options walks through the settlement, sizing and exercise differences.
Full data notes
The option chain used here carries one row per contract per session, with volume, strike and expiration date on each row. The counting rule in every panel is the expiration date: a contract dated for a given weekday is a 0DTE contract on that weekday, and a fund carrying dated expirations across all five weekdays carries a same-day contract on each of them. Rows are filtered to traded volume above zero, and both the observation date and the expiration date sit inside one completed calendar month, named in the caption. Chain rows are recorded while a contract is live, so the volume figures are contract counts accumulated over the sessions a contract was quoted in, divided by one thousand in SQL for readability. One reused ticker symbol that tags two different companies in vendor feeds is excluded in the SQL of every panel, so no busiest-name callout can land on an ambiguous entity. The counts describe that month rather than a standing roster.
Every panel on this page ships with the exact SQL that produced it, so the counting rules are inspectable instead of asserted. To run the same weekday count over a different month or a wider screen of funds, ask for it in plain English on the Strasmore terminal.