STRASMORE/EXPLORE 2,173 QUERIES 22Y EQUITIES · 12Y OPTIONS

2,173 answered market questions

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

Does Sell in May and Go Away Work?
Growth of one dollar: holding all year vs holding only November through Aprilranking · 2026-08-03 · 21×3Preview: 16 ranked values, smallest first. The seasonal gap by era: average half-year returns and the spread between themtable · 2026-08-03 · 3×6 S&P 500 tracker: May to October vs November to April, season by seasonranking · 2026-08-03 · 21×3Preview: 16 ranked values, smallest first. Average S&P 500 tracker return by calendar month, May 2005 through April 2026table · 2026-08-03 · 12×5 SPY distributions by ex-dividend month: inside the May to October window vs outside itranking · 2026-08-03 · 19×3Preview: 16 ranked values, smallest first.
Growth of one dollar: holding all year vs holding only November through April

Growth of one dollar: holding all year vs holding only November through April

most recentas of ranking 21×3read in context →
Growth of one dollar: holding all year vs holding only November through April — 21 rows by 3 columns, computed from US exchange, SIP and OPRA data.
yearbuy_and_hold_growthwinter_only_growth
20061.131.09
20071.281.17
20081.21.05
20090.760.94
20101.031.08
20111.181.24
20121.211.39
20131.381.57
20141.631.68
20151.81.74
20161.781.72
20172.061.93
20182.291.99
20192.542.16
20202.512.06
20213.612.64
20223.562.37
20233.592.55
20244.343.06
20254.792.98
20266.213.14
the exact SQL behind every number
WITH monthly AS (
    SELECT toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
           argMax(close, window_start) AS month_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2005-04-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-04-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY month_start
),
pairs AS (
    SELECT toYear(apr_m.month_start) + 1 AS year,
           toFloat64(oct_m.month_close) / toFloat64(apr_m.month_close) AS summer_ratio,
           toFloat64(apr_next.month_close) / toFloat64(oct_m.month_close) AS winter_ratio
    FROM monthly AS apr_m
    INNER JOIN monthly AS oct_m ON oct_m.month_start = addMonths(apr_m.month_start, 6)
    INNER JOIN monthly AS apr_next ON apr_next.month_start = addMonths(apr_m.month_start, 12)
    WHERE toMonth(apr_m.month_start) = 4
)
SELECT year,
       round(exp(sum(log(summer_ratio * winter_ratio)) OVER (ORDER BY year)), 2) AS buy_and_hold_growth,
       round(exp(sum(log(winter_ratio)) OVER (ORDER BY year)), 2) AS winter_only_growth
FROM pairs
ORDER BY year
$