The opening premium priced: median and 90th-percentile spread at the open (9:30-10:00 ET) vs. midday (12:00-14:00 ET)
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-08-08, from Why Are Spreads Wider at the Open? Real Data.
| ticker | valid_updates_m | open30_cents | midday_cents | open30_bps | midday_bps | open_vs_midday_x | open30_p90_cents | midday_p90_cents | open30_p90_bps | p90_x | dropped_onesided_locked_crossed |
|---|---|---|---|---|---|---|---|---|---|---|---|
| SPY | 29.47 | 2 | 2 | 0.27 | 0.27 | 1 | 3 | 3 | 0.41 | 1 | 163496 |
| AAPL | 12.55 | 7 | 4 | 2.09 | 1.17 | 1.79 | 12 | 5 | 3.9 | 2.34 | 36079 |
| ETSY | 0.2 | 20 | 6 | 23.8 | 7.23 | 3.29 | 50 | 11 | 59.92 | 4.69 | 141 |
- Rows × columns
- 3 × 12
- 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 |
|---|---|---|---|
ticker |
text | 3 distinct values (AAPL, ETSY, SPY) | |
valid_updates_m |
number | 0.2 to 29.47 | |
open30_cents |
number | 2 to 20 | |
midday_cents |
number | 2 to 6 | |
open30_bps |
number | 0.27 to 23.8 | |
midday_bps |
number | 0.27 to 7.23 | |
open_vs_midday_x |
number | 1 to 3.29 | US dollars |
open30_p90_cents |
number | 3 to 50 | |
midday_p90_cents |
number | 3 to 11 | |
open30_p90_bps |
number | 0.41 to 59.92 | |
p90_x |
number | 1 to 4.69 | |
dropped_onesided_locked_crossed |
text | 3 distinct values (141, 163496, 36079) |
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.
the exact SQL behind every number
SELECT ticker,
round(countIf(isNotNull(spread_cents)) / 1e6, 2) AS valid_updates_m,
round(quantileExactIf(0.5)(spread_cents, clock_min BETWEEN 810 AND 839), 2) AS open30_cents,
round(quantileExactIf(0.5)(spread_cents, clock_min BETWEEN 960 AND 1079), 2) AS midday_cents,
round(quantileExactIf(0.5)(spread_bps, clock_min BETWEEN 810 AND 839), 2) AS open30_bps,
round(quantileExactIf(0.5)(spread_bps, clock_min BETWEEN 960 AND 1079), 2) AS midday_bps,
round(quantileExactIf(0.5)(spread_bps, clock_min BETWEEN 810 AND 839)
/ quantileExactIf(0.5)(spread_bps, clock_min BETWEEN 960 AND 1079), 2) AS open_vs_midday_x,
round(quantileExactIf(0.9)(spread_cents, clock_min BETWEEN 810 AND 839), 2) AS open30_p90_cents,
round(quantileExactIf(0.9)(spread_cents, clock_min BETWEEN 960 AND 1079), 2) AS midday_p90_cents,
round(quantileExactIf(0.9)(spread_bps, clock_min BETWEEN 810 AND 839), 2) AS open30_p90_bps,
round(quantileExactIf(0.9)(spread_bps, clock_min BETWEEN 810 AND 839)
/ quantileExactIf(0.9)(spread_bps, clock_min BETWEEN 960 AND 1079), 2) AS p90_x,
toString(countIf(isNull(spread_cents))) AS dropped_onesided_locked_crossed
FROM (
SELECT ticker,
toHour(sip_timestamp) * 60 + toMinute(sip_timestamp) AS clock_min,
if(bid_price > 0 AND ask_price > bid_price, toFloat64(ask_price - bid_price) * 100, NULL) AS spread_cents,
if(bid_price > 0 AND ask_price > bid_price, toFloat64(ask_price - bid_price) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, NULL) AS spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'ETSY')
AND sip_timestamp >= toDateTime(today() - 14)
AND sip_timestamp < toDateTime(today() - 3)
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
)
GROUP BY ticker
ORDER BY indexOf(['SPY', 'AAPL', 'ETSY'], ticker)
Run your own version of this
The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.
More from this analysisWhy Are Spreads Wider at the Open? Real Data
Session by session: how often, and by how much, the open ran wider than midday
table 3×6
→
Share of quote updates at the one-cent minimum spread, by half hour (regular hours, ET)
series 13×4
→
Median spread each half hour, as a multiple of each name's tightest bucket (regular hours, ET)
series 13×4
→
MU: median quoted spread by half hour on July 7, 2026 (ET, regular hours)
series 13×5
→
Median quoted spread by phase of the trading day, in basis points (ET clock)
ranking 5×4
→
Window guard: the UTC session filter maps to a 9:30 a.m. ET start on both ends of the rolling window
scalar 1×2
→
See all 2,170 queries →