liquidity_by_expiry
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-27, from which-stocks-have-leaps.
| expiry | dte | contracts | volume_per_contract |
|---|---|---|---|
| 25/09/2026 | 1 | 108 | 5193.2 |
| 28/09/2026 | 4 | 57 | 864.7 |
| 30/09/2026 | 6 | 56 | 327.8 |
| 02/10/2026 | 8 | 76 | 533.4 |
| 05/10/2026 | 11 | 43 | 79 |
| 07/10/2026 | 13 | 30 | 23.5 |
| 09/10/2026 | 15 | 64 | 316.6 |
| 16/10/2026 | 22 | 95 | 464.8 |
| 23/10/2026 | 29 | 59 | 151.9 |
| 30/10/2026 | 36 | 47 | 92.3 |
| 06/11/2026 | 43 | 42 | 19.1 |
| 20/11/2026 | 57 | 78 | 208.7 |
| 18/12/2026 | 85 | 98 | 147.9 |
| 15/01/2027 | 113 | 101 | 95.8 |
| 19/02/2027 | 148 | 45 | 35.1 |
| 19/03/2027 | 176 | 63 | 99.7 |
| 16/04/2027 | 204 | 51 | 33.3 |
| 17/06/2027 | 266 | 69 | 50.6 |
| 17/09/2027 | 358 | 61 | 48.6 |
| 17/12/2027 | 449 | 59 | 21 |
| 21/01/2028 | 484 | 58 | 32.2 |
| 17/03/2028 | 540 | 27 | 24.9 |
| 16/06/2028 | 631 | 16 | 8.9 |
| 15/12/2028 | 813 | 59 | 21.2 |
| 19/01/2029 | 848 | 43 | 31 |
- Rows × columns
- 25 × 4
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
expiry |
text | 25 distinct values (02/10/2026, 05/10/2026, 06/11/2026…) | |
dte |
number | 1 to 848 | |
contracts |
number | 16 to 108 | count |
volume_per_contract |
number | 8.9 to 5,193.2 | count |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
Run it yourself
This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.
WITH (SELECT max(date) FROM global_markets.options_greeks) AS asof
SELECT
formatDateTime(expiration_date, '%d/%m/%Y') AS expiry,
dateDiff('day', asof, expiration_date) AS dte,
count() AS contracts,
round(sum(volume) / count(), 1) AS volume_per_contract
FROM global_markets.options_greeks
WHERE date = asof
AND underlying_symbol = 'AAPL'
AND volume > 0
GROUP BY expiration_date
ORDER BY expiration_date
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.