STRASMORE/EXPLORE 2,433 QUERIES

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-09-20, from what-is-spy-etf.

as of series 13×6read in context →
spy_vs_peers — 13 rows by 6 columns, computed from US exchange, SIP and OPRA data.
monthmonth_labelspy_pctvoo_pctivv_pctspy_minus_voo_pct
2025-09Sep 20254.54.494.470.01
2025-10Oct 20252.852.842.830
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 2026-0.040.19-0.090.23
Rows × columns
13 × 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 13 distinct values (2025-09, 2025-10, 2025-11…)
month_label text 13 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.23 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