STRASMORE/EXPLORE 3,293 QUERIES
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

spy_vs_peers

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-11-01, from what-is-spy-etf.

as of series 12×6read in context →
spy_vs_peers — 12 rows by 6 columns, computed from US exchange, SIP and OPRA data.
monthmonth_labelspy_pctvoo_pctivv_pctspy_minus_voo_pct
2025-11Nov 2025-0.33-0.32-0.310.01
2025-12Dec 20250.460.470.40.02
2026-01Jan 20260.910.890.910.03
2026-02Feb 2026-0.52-0.5-0.470.03
2026-03Mar 2026-4.18-4.27-4.190.09
2026-04Apr 20269.99.99.930
2026-05May 20264.884.894.90
2026-06Jun 2026-1.14-1.11-1.330.02
2026-07Jul 20260.270.280.260.01
2026-08Aug 20262.352.332.350.02
2026-09Sep 20260.080.060.030.02
2026-10Oct 2026-1.13-1.1-1.110.03
Rows × columns
12 × 6
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_vs_peers, derived from the stored result.
ColumnTypeRangeNotes
month text 12 distinct values (2025-11, 2025-12, 2026-01…)
month_label text 12 distinct values (Apr 2026, Aug 2026, Dec 2025…)
spy_pct number -4.18 to 9.9 percent
voo_pct number -4.27 to 9.9 percent
ivv_pct number -4.19 to 9.93 percent
spy_minus_voo_pct number 0 to 0.09 percent

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.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

SELECT
    month,
    any(month_label)                                                                            AS month_label,
    round(100 * (anyIf(end_close, ticker = 'SPY') / anyIf(start_open, ticker = 'SPY') - 1), 2)  AS spy_pct,
    round(100 * (anyIf(end_close, ticker = 'VOO') / anyIf(start_open, ticker = 'VOO') - 1), 2)  AS voo_pct,
    round(100 * (anyIf(end_close, ticker = 'IVV') / anyIf(start_open, ticker = 'IVV') - 1), 2)  AS ivv_pct,
    round(abs(
        100 * (anyIf(end_close, ticker = 'SPY') / anyIf(start_open, ticker = 'SPY') - 1)
      - 100 * (anyIf(end_close, ticker = 'VOO') / anyIf(start_open, ticker = 'VOO') - 1)
    ), 2)                                                                                       AS spy_minus_voo_pct
FROM
(
    SELECT
        ticker,
        formatDateTime(toStartOfMonth(date), '%Y-%m')   AS month,
        formatDateTime(toStartOfMonth(date), '%b %Y')   AS month_label,
        toFloat64(argMin(open, date))                   AS start_open,
        toFloat64(argMax(close, date))                  AS end_close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SPY', 'VOO', 'IVV')
      AND date >= toStartOfMonth(today() - 365)
      AND date <= today()
    GROUP BY ticker, toStartOfMonth(date)
)
GROUP BY month
HAVING countIf(ticker = 'SPY') > 0
   AND countIf(ticker = 'VOO') > 0
   AND countIf(ticker = 'IVV') > 0
ORDER BY month
⌘/Ctrl + Enter

Use dis data for your AI assistant

E go open ready to query, with dis page data. Free, no account.