STRASMORE/EXPLORE 3,293 QUERIES

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-10-18, from Why Are Spreads Wider at the Open? Real Data.

as of table 3×12read in context →
The opening premium priced: median and 90th-percentile spread at the open (9:30-10:00 ET) vs. midday (12:00-14:00 ET) — 3 rows by 12 columns, computed from US exchange, SIP and OPRA data.
tickervalid_updates_mopen30_centsmidday_centsopen30_bpsmidday_bpsopen_vs_midday_xopen30_p90_centsmidday_p90_centsopen30_p90_bpsp90_xdropped_onesided_locked_crossed
SPY16.55220.260.261330.391128824
AAPL4.69732.030.892.281363.892.2440256
ETSY0.3419725.249.712.6421256.513.63348
Rows × columns
3 × 12
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for The opening premium priced: median and 90th-percentile spread at the open (9:30-10:00 ET) vs. midday (12:00-14:00 ET), derived from the stored result.
ColumnTypeRangeNotes
ticker text 3 distinct values (AAPL, ETSY, SPY)
valid_updates_m number 0.34 to 16.55
open30_cents number 2 to 19
midday_cents number 2 to 7
open30_bps number 0.26 to 25.24
midday_bps number 0.26 to 9.71
open_vs_midday_x number 1 to 2.6 US dollars
open30_p90_cents number 3 to 42
midday_p90_cents number 3 to 12
open30_p90_bps number 0.39 to 56.51
p90_x number 1 to 3.63
dropped_onesided_locked_crossed text 3 distinct values (128824, 348, 40256)

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.

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)
⌘/Ctrl + Enter

在你的 AI 助手中使用这些数据

打开即可查询,已带上本页数据。免费,无需账号。

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 3,293 queries →