tuesday_settlements
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-10-01, from when-do-vix-futures-expire.
| settlement_date | settlement_weekday | vix_contract | closed_day_in_the_way |
|---|---|---|---|
| 2019-03-19 | Tuesday | VX Mar 2019 | Fri Apr 19, 2019 |
| 2022-03-15 | Tuesday | VX Mar 2022 | Fri Apr 15, 2022 |
| 2024-06-18 | Tuesday | VX Jun 2024 | Wed Jun 19, 2024 |
| 2025-03-18 | Tuesday | VX Mar 2025 | Fri Apr 18, 2025 |
| 2026-05-19 | Tuesday | VX May 2026 | Fri Jun 19, 2026 |
- Rows × columns
- 5 × 4
- Period covered
- to
- 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 |
|---|---|---|---|
settlement_date |
date | 2019-03-19 to 2026-05-19 | |
settlement_weekday |
text | 1 distinct value (Tuesday) | |
vix_contract |
text | 5 distinct values (VX Jun 2024, VX Mar 2019, VX Mar 2022…) | |
closed_day_in_the_way |
text | 5 distinct values |
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
traded AS
(
SELECT groupArray(session_day) AS session_days
FROM
(
SELECT date AS session_day
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= toDate('2014-11-01')
GROUP BY session_day
)
),
closures_ahead AS
(
SELECT groupArray(date) AS closed_days
FROM global_markets.stocks_market_holidays
WHERE status = 'closed'
)
SELECT
toString(settlement) AS settlement_date,
formatDateTime(settlement, '%W') AS settlement_weekday,
concat('VX ', formatDateTime(contract_month, '%b %Y')) AS vix_contract,
formatDateTime(if(friday_closed, ref_friday, wednesday_target), '%a %b %e, %Y') AS closed_day_in_the_way
FROM
(
SELECT
a.contract_month AS contract_month,
a.ref_friday AS ref_friday,
((a.ref_friday <= toDate(arrayMax(t.session_days))) AND (NOT has(t.session_days, a.ref_friday)))
OR has(h.closed_days, a.ref_friday) AS friday_closed,
if(friday_closed, addDays(a.ref_friday, -1), a.ref_friday) AS spx_anchor,
addDays(spx_anchor, -30) AS wednesday_target,
((wednesday_target <= toDate(arrayMax(t.session_days))) AND (NOT has(t.session_days, wednesday_target)))
OR has(h.closed_days, wednesday_target) AS target_closed,
if(target_closed, addDays(wednesday_target, -1), wednesday_target) AS settlement
FROM
(
SELECT
contract_month,
addMonths(contract_month, 1) AS ref_month,
addDays(ref_month, ((5 - toInt32(toDayOfWeek(ref_month)) + 7) % 7) + 14) AS ref_friday
FROM
(
SELECT addMonths(toDate('2015-01-01'), toInt32(arrayJoin(range(144)))) AS contract_month
)
) AS a
CROSS JOIN traded AS t
CROSS JOIN closures_ahead AS h
)
WHERE toDayOfWeek(settlement) <> 3
ORDER BY settlement ASC
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.