STRASMORE/EXPLORE 3,293 QUERIES 22Y EQUITIES · 12Y OPTIONS

3,293 answered market questions

every one with its exact SQL, its result and the date it was computed · free, no signup

Full options quote history: clean NBBO bid/ask snapshots for any US option contract at the interval you choose, by SQL API, $79 a month. See the options quotes plan
Stock Returns After the First Fed Rate Hike
Lowest and highest SPY close in the twelve months after each first hiketable · 2026-09-20 · 3×5 SPY versus its hike-day close, week by week, three cycles alignedtable · 2026-09-20 · 53×4 SPY forward returns after the first hike of each cycletable · 2026-09-20 · 3×5 The 2s10s Treasury spread on hike day and twelve months laterranking · 2026-09-20 · 3×4Preview: 3 ranked values, largest first.
Lowest and highest SPY close in the twelve months after each first hike

Lowest and highest SPY close in the twelve months after each first hike

most recentas of table 3×5read in context →
Lowest and highest SPY close in the twelve months after each first hike — 3 rows by 5 columns, computed from US exchange, SIP and OPRA data.
cyclelow_vs_hike_pctlow_onhigh_vs_hike_pcthigh_on
Jun 30, 2004-6.7Aug 6, 20047.2Mar 7, 2005
Dec 16, 2015-12.1Feb 11, 20169.5Dec 13, 2016
Mar 16, 2022-18.1Oct 12, 20226Mar 29, 2022
the exact SQL behind every number
WITH px AS
(
    SELECT
        date,
        toFloat64(close) AS px_close,
        multiIf(date <= '2005-06-30', toDate('2004-06-30'),
                date <= '2016-12-16', toDate('2015-12-16'),
                                      toDate('2022-03-16')) AS hike_date
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND ((date >= '2004-06-30' AND date <= '2005-06-30')
        OR (date >= '2015-12-16' AND date <= '2016-12-16')
        OR (date >= '2022-03-16' AND date <= '2023-03-16'))
)
SELECT
    formatDateTime(hike_date, '%b %e, %Y')                                AS cycle,
    round(100 * (min(px_close) / argMin(px_close, date) - 1), 1)          AS low_vs_hike_pct,
    formatDateTime(argMin(date, px_close), '%b %e, %Y')                   AS low_on,
    round(100 * (max(px_close) / argMin(px_close, date) - 1), 1)          AS high_vs_hike_pct,
    formatDateTime(argMax(date, px_close), '%b %e, %Y')                   AS high_on
FROM px
GROUP BY hike_date
ORDER BY hike_date
$