STRASMORE/EXPLORE 2,170 QUERIES

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.

as of scalar 1×7read in context →
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
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for SPY's update-weighted average quoted spread: July 7 ranked against the trailing month (rank 1 = tightest), derived from the stored result.
ColumnTypeRangeNotes
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 →