STRASMORE/EXPLORE 2,170 QUERIES

SPY / QQQ day move in trailing context (~22 sessions)

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 9, 2026, The Day in Numbers.

as of scalar 1×7read in context →
qqq close over close pct
1.67
qqq abs move rank
10
qqq sessions compared
21
spy open to close pct
0.57
spy abs move rank
8
spy sessions compared
22
first session
2026-06-08
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 / QQQ day move in trailing context (~22 sessions), derived from the stored result.
ColumnTypeRangeNotes
qqq_close_over_close_pct number every row is 1.67 percent
qqq_abs_move_rank number every row is 10
qqq_sessions_compared number every row is 21
spy_open_to_close_pct number every row is 0.57 percent
spy_abs_move_rank number every row is 8
spy_sessions_compared number every row is 22
first_session date 2026-06-08

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(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-09')), 2) AS qqq_close_over_close_pct,
    arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-09'))), groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-07-09'))) + 1 AS qqq_abs_move_rank,
    countIf(ticker = 'QQQ' AND isFinite(cc_pct)) AS qqq_sessions_compared,
    round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-09')), 2) AS spy_open_to_close_pct,
    arrayCount(x -> x > abs(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-09'))), groupArrayIf(abs(oc_pct), ticker = 'SPY' AND d != toDate('2026-07-09'))) + 1 AS spy_abs_move_rank,
    countIf(ticker = 'SPY') AS spy_sessions_compared,
    toString(min(d)) AS first_session
FROM (
    SELECT ticker, d,
           if(isFinite(close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY d) - 1),
              (close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY d) - 1) * 100, NULL) AS cc_pct,
           oc_pct
    FROM (
        SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMax(toFloat64(close), window_start) AS close_px,
               (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN ('SPY', 'QQQ')
          AND window_start >= toDateTime('2026-06-08 13:30:00')
          AND window_start < toDateTime('2026-07-10 00:00:00')
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY ticker, 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 9, 2026, The Day in Numbers
Session verification: first/last SPY bar ET, regular-bar count, holiday receipts, next closure scalar 1×9 On deck: the next session, its ex-dividend slate, the SPY expiry ladder, and the short-interest clock scalar 1×8 Ex-divs, splits, SEC filings, news attention scalar 1×14 Treasury print status: July 9 rows on record, and the July 8 curve (latest at authoring) scalar 1×6 SPY's RTH average quoted spread in trailing-month context scalar 1×6 Stocks NBBO update count: July 9 vs July 8, with named-ticker updates (millions) scalar 1×8 See all 2,170 queries →