How VIX Settlement Works: the SOQ
VIX settlement uses the SOQ, a Special Opening Quotation built from SPX opening prices under a zero bid strike rule. How the print is made, and why it gaps.
VIX settlement does not use the VIX index level a screen shows at 9:30 a.m. ET on expiration morning. Expiring VIX options and futures cash settle against the Special Opening Quotation, the SOQ: one number CBOE strikes on settlement morning from the opening prices of a single strip of S&P 500 index (SPX) options. It is the same formula as the VIX index fed different inputs, and the two numbers rarely land in exactly the same place.
What is the Special Opening Quotation (SOQ)?
The SOQ is the final settlement value for expiring VIX options and VIX futures. Two labels describe it. It is cash settled, meaning nothing is delivered and an in the money position pays out the difference in dollars. It is AM settled, meaning the value is struck from the opening of the SPX options market on settlement morning rather than from the close, which is the difference between AM settled and PM settled options. CBOE publishes the finished value under the ticker VRO, and every expiring VIX contract is exercised or abandoned against that one print.
The arithmetic is the variance calculation that produces the VIX index itself, unpacked in what the VIX index actually measures. What changes is the input. The index reads live bid and ask midpoints many times a minute, all session long. The SOQ reads opening prices, once.
When is VIX settlement, and which SPX expiry does it use?
VIX contracts settle on a Wednesday: the Wednesday falling 30 days before the third Friday of the following calendar month. That 30 day offset is the entire point of the schedule. The SPX options expiring on that third Friday have exactly 30 calendar days left to run on settlement morning, which is the horizon the VIX formula is defined over. The dated calendar itself lives in when VIX options expire.
The ladder below applies that rule forward, pairing each settlement date with the SPX expiry it reaches for.
| settlement_date | weekday | settlement_label | strip_expiry_label | days_away |
|---|---|---|---|---|
| 2026-10-21 | Wed | Oct 21, 2026 | Nov 20, 2026 | 25 |
| 2026-11-18 | Wed | Nov 18, 2026 | Dec 18, 2026 | 53 |
| 2026-12-16 | Wed | Dec 16, 2026 | Jan 15, 2027 | 81 |
| 2027-01-20 | Wed | Jan 20, 2027 | Feb 19, 2027 | 116 |
| 2027-02-17 | Wed | Feb 17, 2027 | Mar 19, 2027 | 144 |
| 2027-03-17 | Wed | Mar 17, 2027 | Apr 16, 2027 | 172 |
| 2027-04-21 | Wed | Apr 21, 2027 | May 21, 2027 | 207 |
| 2027-05-19 | Wed | May 19, 2027 | Jun 18, 2027 | 235 |
| 2027-06-16 | Wed | Jun 16, 2027 | Jul 16, 2027 | 263 |
| 2027-07-21 | Wed | Jul 21, 2027 | Aug 20, 2027 | 298 |
| 2027-08-18 | Wed | Aug 18, 2027 | Sep 17, 2027 | 326 |
| 2027-09-15 | Wed | Sep 15, 2027 | Oct 15, 2027 | 354 |
The exact SQL behind every number
SELECT
toString(settle_date) AS settlement_date,
formatDateTime(settle_date, '%a') AS weekday,
formatDateTime(settle_date, '%b %e, %Y') AS settlement_label,
formatDateTime(strip_expiry, '%b %e, %Y') AS strip_expiry_label,
dateDiff('day', today(), settle_date) AS days_away
FROM
(
SELECT
third_friday - 30 AS settle_date,
third_friday AS strip_expiry
FROM
(
SELECT
addMonths(toStartOfMonth(today()), n) AS month_start,
month_start + (((12 - toInt32(toDayOfWeek(month_start))) % 7) + 14) AS third_friday
FROM
(
SELECT arrayJoin(range(14)) AS n
)
)
)
WHERE settle_date >= today()
ORDER BY settle_dateThe next settlement on the ladder is Oct 21, 2026, a Wed, 25 days from today, and it settles against the SPX series expiring Nov 20, 2026. The window holds 12 dated settlements, running through Sep 15, 2027, and every one of them lands on a Wednesday. One adjustment sits outside the arithmetic: when the third Friday of a month is an exchange holiday, as Good Friday is, the SPX expiry moves to the Thursday before and the VIX settlement shifts back a day alongside it. The underlying monthly cycle is the same one described in the third Friday options expiration cycle.
Which options go into the settlement strip?
One expiry, not two. The published index interpolates between a near term strip and a next term strip to hold its 30 day horizon constant, since no listed expiry sits at exactly 30 days most of the time. On settlement morning that problem disappears by construction: one SPX series is exactly 30 days out, and the SOQ uses that series alone, with no interpolation at all.
A liquid underlying lists an expiry on nearly every weekday, so the phrase 'the 30 day expiry' points at one specific row in a crowded ladder. The panel below takes a pinned session, August 14, 2026, and lists the expirations available on SPY, the S&P 500 tracking fund, between three and six weeks out, with the strike count each one carried.
| expiration_date | days_to_expiry | listed_strikes | traded_strikes |
|---|---|---|---|
| 2026-09-04 | 21 | 184 | 184 |
| 2026-09-11 | 28 | 167 | 167 |
| 2026-09-18 | 35 | 247 | 247 |
The exact SQL behind every number
SELECT
toString(expiration_date) AS expiration_date,
max(dte) AS days_to_expiry,
countDistinct(strike_price) AS listed_strikes,
countDistinctIf(strike_price, volume > 0) AS traded_strikes
FROM
(
SELECT
expiration_date,
days_to_expiry AS dte,
strike_price,
volume
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date = '2026-08-14'
AND days_to_expiry BETWEEN 21 AND 40
)
GROUP BY expiration_date
ORDER BY expiration_dateThat pinned chain carried 3 separate expirations between 21 and 35 days out. The nearest of them listed 184 distinct strikes, of which 184 recorded volume that day. Only one row in a ladder like this qualifies on any given settlement morning, and the date rule picks it. Liquidity does not.
The strike rule: include strikes until the bids run out
Within that single expiry, the SOQ does not use every listed strike. The selection runs as a fixed rule:
- Find the at the money strike, the one where the call price and the put price sit closest together.
- Work outward in both directions from there, taking out of the money puts below that strike and out of the money calls above it.
- Keep a strike while its opening bid is greater than zero.
- Stop each wing once two strikes in a row show a zero bid, and drop everything past that point, including any further out strike that does happen to carry a bid.
The prices themselves come from the opening auction. A series that trades in the opening rotation contributes its opening trade price. A series that does not trade contributes the midpoint of its opening quote. The rule is deliberately mechanical: it runs the same way every month, and the strike list it produces is whatever that particular morning's bids support. The list is never fixed in advance, which is why a settlement strip can be wider or narrower than the one a month earlier.
What the rule is working against is the thinning of the wings. The panel below takes the same pinned session and one pinned expiry, then counts listed strikes against strikes that actually traded, grouped by distance from the underlying price.
| moneyness_band | listed_strikes | traded_strikes |
|---|---|---|
| -20% to -16% | 12 | 12 |
| -16% to -12% | 21 | 21 |
| -12% to -8% | 31 | 31 |
| -8% to -4% | 31 | 31 |
| -4% to 0% | 32 | 32 |
| 0% to 4% | 31 | 31 |
| 4% to 8% | 20 | 20 |
| 8% to 12% | 5 | 5 |
| 12% to 16% | 6 | 6 |
| 16% to 20% | 1 | 1 |
The exact SQL behind every number
SELECT
concat(toString(pct_band), '% to ', toString(pct_band + 4), '%') AS moneyness_band,
countDistinct(strike_price) AS listed_strikes,
countDistinctIf(strike_price, volume > 0) AS traded_strikes
FROM
(
SELECT
strike_price,
volume,
toInt32(floor((toFloat64(strike_price) / toFloat64(underlying_close) - 1) * 25) * 4) AS pct_band
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date = '2026-08-14'
AND expiration_date = '2026-09-18'
AND underlying_close > 0
)
WHERE pct_band BETWEEN -20 AND 16
GROUP BY pct_band
ORDER BY pct_bandThe chain spreads across 10 four point bands of moneyness. Down in the band running -20% to -16% against the underlying price, 12 of 12 listed strikes printed a trade that session. Up in the 16% to 20% band, 1 of 1 did. Quoted bids reach further out than trades do, which is the gap the zero bid run is measuring. These counts illustrate the shape of a chain on one pinned day, on a fund rather than on the index, and no figure in this panel forms part of any official settlement value.
Why the SOQ prints away from the 9:30 VIX level
Four mechanical differences separate the settlement print from the index level on the same morning.
The inputs differ. The index samples bid and ask midpoints from quotes that are live at the moment of calculation. The SOQ samples opening prices, and an opening price is a trade struck against whatever size the auction collected.
The timing differs. SPX series do not all open in the same instant. Each opens in its own rotation, and the prints feeding the SOQ can be spread across the first minutes of the session, making the SOQ a composite of moments rather than a snapshot of one moment.
The strip differs. One 30 day series feeds the SOQ. Two interpolated series feed the index.
The strike list differs. The zero bid test is applied to opening quotes, so the set of strikes admitted at settlement can differ from the set the index was using minutes earlier.
The first two carry the most weight on volatile mornings, when opening spreads sit at their widest. The panel below measures that width on the underlying itself, across the trailing four months of sessions.
| et_time | avg_range_bps | avg_volume_thousands |
|---|---|---|
| 09:30 | 10.7 | 523 |
| 09:31 | 8.5 | 227 |
| 09:32 | 7.3 | 192 |
| 09:33 | 6.7 | 154 |
| 09:34 | 6.3 | 153 |
| 09:35 | 7.3 | 168 |
| 09:36 | 6.9 | 157 |
| 09:37 | 6.1 | 131 |
| 09:38 | 5.9 | 124 |
| 09:39 | 5.6 | 141 |
| 09:40 | 7.3 | 164 |
| 09:41 | 6 | 119 |
| 09:42 | 6 | 118 |
| 09:43 | 5.9 | 120 |
| 09:44 | 6.1 | 118 |
| 09:45 | 7.7 | 176 |
| 09:46 | 6.5 | 139 |
| 09:47 | 6.1 | 129 |
| 09:48 | 6.1 | 133 |
| 09:49 | 6.1 | 155 |
The exact SQL behind every number
SELECT
formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') AS et_time,
round(avg((toFloat64(high) - toFloat64(low)) / toFloat64(low) * 10000), 1) AS avg_range_bps,
round(avg(volume) / 1000, 0) AS avg_volume_thousands
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 120
AND low > 0
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 599
GROUP BY et_time
ORDER BY et_timeOver the 30 minutes in view, the 09:30 bar averaged 10.7 basis points of high to low travel (a basis point is one hundredth of one percent), against 5.5 basis points in the 09:59 bar. Option prices inherit that width, and the SOQ is drawn from the leftmost end of it. A settlement value sitting away from the index level a reader watched at 9:30 is a property of how the auction prices are collected, not a data error. The related gap, between the index and the futures curve that VIX options are priced off, is covered in why VIX options do not track the VIX.
Data notes
The settlement ladder computes dates from the published rule (30 days before the third Friday of the following month) and does not apply holiday shifts. The two chain panels use one pinned session, August 14, 2026, on SPY rather than on the index, chosen so the numbers stay fixed across regeneration. They illustrate chain structure only. The official settlement value for any given expiration is the SOQ published by CBOE under the ticker VRO on that morning, and it is not reproduced or reconstructed anywhere on this page.
FAQ
What number do VIX options settle against?
The Special Opening Quotation, published by CBOE under the ticker VRO on settlement morning. It is a cash settlement value computed with the VIX formula from the opening prices of the SPX option series that has exactly 30 days left to run.
Is the SOQ the same as the VIX opening level?
No. The index opening level comes from live quote midpoints. The SOQ comes from opening auction prices for one strip of SPX options, selected under the zero bid rule. The two land close together most mornings and match exactly almost never.
What time is the VIX SOQ determined?
Its inputs are the opening prices of the SPX series, so the value is struck at the opening of SPX options trading on the settlement Wednesday and published once every constituent series has opened, generally inside the first hour of the session.
Why do VIX options settle on a Wednesday?
The settlement date is defined as 30 days before the third Friday of the following month, and 30 days before a Friday always falls on a Wednesday. That offset leaves exactly 30 days of life in the SPX strip the SOQ is built from.
What happens to a VIX option after the SOQ prints?
In the money contracts are exercised automatically and settle in cash against the SOQ, with nothing delivered. The last trading day is the Tuesday before, so an expiring position cannot be traded out on settlement morning itself.
Every panel above ships with the exact SQL beneath it. To rebuild the strike ladder for a different expiry, or to check where the next settlement Wednesday lands, ask the question in plain English on the Strasmore terminal.