SPY's update-weighted average quoted spread: July 6 ranked against the trailing month (rank 1 = tightest)
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-07-26, from Market Recap: July 6, 2026, The Day in Numbers.
jul6 avg spread cents
1.815
tightness rank
1
sessions compared
21
widest session cents
2.865
other sessions avg cents
2.337
first session
June 4, 2026
dropped invalid quotes
41,468
- Rows × columns
- 1 × 7
- Period covered
- 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 |
|---|---|---|---|
jul6_avg_spread_cents |
number | every row is 1.815 | |
tightness_rank |
number | every row is 1 | |
sessions_compared |
number | every row is 21 | |
widest_session_cents |
number | every row is 2.865 | |
other_sessions_avg_cents |
number | every row is 2.337 | |
first_session |
date | June 4, 20 | |
dropped_invalid_quotes |
number | every row is 41,468 |
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
round(anyIf(avg_spread_cents, d = toDate('2026-07-06')), 3) AS jul6_avg_spread_cents,
arrayCount(x -> x < anyIf(avg_spread_cents, d = toDate('2026-07-06')), groupArrayIf(avg_spread_cents, d != toDate('2026-07-06'))) + 1 AS tightness_rank,
count() AS sessions_compared,
round(max(avg_spread_cents), 3) AS widest_session_cents,
round(avgIf(avg_spread_cents, d != toDate('2026-07-06')), 3) AS other_sessions_avg_cents,
replaceAll(formatDateTime(min(d), '%M %e, %Y'), ' ', ' ') AS first_session,
sum(dropped_invalid) AS dropped_invalid_quotes
FROM (
SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS d,
avgIf(toFloat64(ask_price - bid_price), bid_price > 0 AND ask_price >= bid_price) * 100 AS avg_spread_cents,
countIf(NOT (bid_price > 0 AND ask_price >= bid_price)) AS dropped_invalid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
AND sip_timestamp >= toDateTime('2026-06-04 00:00:00')
AND sip_timestamp < toDateTime('2026-07-07 00:00:00')
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY d
)
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 analysisMarket Recap: July 6, 2026, The Day in Numbers
Session check: SPY's observed minute-bar span, the July 3 closure, and the next one on the calendar
scalar 1×8
→
One row for the whole options day: volume, call share, and the Monday same-day expiry
scalar 1×16
→
SPY's open-to-close move ranked against the trailing month of sessions (rank 1 = biggest absolute move)
scalar 1×4
→
The whole equity NBBO stream: July 6 vs the July 2 session, and where Monday's quotes clustered
scalar 1×6
→
July 6's corporate calendar and information flow, in one row (including the reverse-split wall behind a screener trap)
scalar 1×12
→
Advancers vs decliners among tickers with at least $1M traded on July 6
scalar 1×7
→
See all 2,170 queries →