SPY's update-weighted average quoted spread: July 7 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 7, 2026, The Day in Numbers.
jul7 avg spread cents
1.809
tightness rank
1
sessions compared
21
tightest session cents
1.809
widest session cents
2.865
first session
2026-06-05
dropped invalid quotes
41,883
- 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 |
|---|---|---|---|
jul7_avg_spread_cents |
number | every row is 1.809 | |
tightness_rank |
number | every row is 1 | |
sessions_compared |
number | every row is 21 | |
tightest_session_cents |
number | every row is 1.809 | |
widest_session_cents |
number | every row is 2.865 | |
first_session |
date | 2026-06-05 | |
dropped_invalid_quotes |
number | every row is 41,883 |
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-07')), 3) AS jul7_avg_spread_cents,
arrayCount(x -> x < anyIf(avg_spread_cents, d = toDate('2026-07-07')), groupArrayIf(avg_spread_cents, d != toDate('2026-07-07'))) + 1 AS tightness_rank,
count() AS sessions_compared,
round(min(avg_spread_cents), 3) AS tightest_session_cents,
round(max(avg_spread_cents), 3) AS widest_session_cents,
toString(min(d)) 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-05 00:00:00')
AND sip_timestamp < toDateTime('2026-07-08 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 7, 2026, The Day in Numbers
SPY's option quotes on July 7: the whole root, and the near-the-money same-day touch through the air pocket against a midday control
scalar 1×13
→
Session check: SPY's observed minute-bar span, the holiday table, and the next closure on the calendar
scalar 1×8
→
One row for the whole options day: volume, call share, 0DTE, and the two contracts that bracketed SPY's close
scalar 1×24
→
July 7's corporate calendar and information flow, in one row
scalar 1×15
→
QQQ and SPY: July 7 ranked against the trailing month of sessions (rank 1 = biggest absolute move)
scalar 1×7
→
The whole equity NBBO stream: July 7 vs July 6 update counts
scalar 1×5
→
See all 2,170 queries →