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

2,170 answered market questions

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

What Is Maximum Drawdown? Depth vs Recovery
Same fund, five lookback windows: SPY maximum drawdown by sample length to July 31, 2026ranking · 2026-08-05 · 5×3Preview: 5 ranked values, smallest first. Completed SPY drawdowns since 2016: depth, days falling, days climbing backtable · 2026-08-05 · 8×5 SPY underwater curve: month end close against its running peak, 2016 to 2026series · 2026-08-05 · 127×2Preview: a 16-point series, roughly flat. Maximum drawdown against annualized volatility: eight large caps, five years to July 31, 2026ranking · 2026-08-05 · 8×3Preview: 8 ranked values, largest first.
Same fund, five lookback windows: SPY maximum drawdown by sample length to July 31, 2026

Same fund, five lookback windows: SPY maximum drawdown by sample length to July 31, 2026

most recentas of ranking 5×3read in context →
Same fund, five lookback windows: SPY maximum drawdown by sample length to July 31, 2026 — 5 rows by 3 columns, computed from US exchange, SIP and OPRA data.
lookbackmax_drawdown_pctworst_point
1 year9.1Mar 2026
2 years19Apr 2025
3 years19Apr 2025
5 years25.4Oct 2022
10 years34.2Mar 2020
the exact SQL behind every number
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2016-07-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY session_date
),
scoped AS (
    SELECT arrayJoin([1, 2, 3, 5, 10]) AS lookback_years,
           session_date,
           close_px
    FROM daily
),
windowed AS (
    SELECT lookback_years, session_date, close_px
    FROM scoped
    WHERE session_date >= subtractYears(toDate('2026-07-31'), lookback_years)
),
runs AS (
    SELECT lookback_years,
           session_date,
           close_px,
           max(close_px) OVER (PARTITION BY lookback_years ORDER BY session_date
                               ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak
    FROM windowed
)
SELECT concat(toString(lookback_years), if(lookback_years = 1, ' year', ' years')) AS lookback,
       round(100 * max(1 - close_px / running_peak), 1) AS max_drawdown_pct,
       formatDateTime(argMax(session_date, 1 - close_px / running_peak), '%b %Y') AS worst_point
FROM runs
GROUP BY lookback_years
ORDER BY lookback_years
$