STRASMORE/EXPLORE 2,170 QUERIES

Completed SPY drawdowns since 2016: depth, days falling, days climbing back

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-08-05, from What Is Maximum Drawdown? Depth vs Recovery.

as of table 8×5read in context →
Completed SPY drawdowns since 2016: depth, days falling, days climbing back — 8 rows by 5 columns, computed from US exchange, SIP and OPRA data.
episode_labelfall_from_peak_pctdays_to_troughdays_to_new_highdays_underwater
Feb 202034.233148181
Jan 202225.4282464746
Sep 201820.295126221
Feb 2025194880128
Jan 201810.166144210
Sep 20209.8215172
Jan 20269.1621678
Jan 20169.1372966
Rows × columns
8 × 5
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 Completed SPY drawdowns since 2016: depth, days falling, days climbing back, derived from the stored result.
ColumnTypeRangeNotes
episode_label text 8 distinct values (Feb 2020, Feb 2025, Jan 2016…)
fall_from_peak_pct number 9.1 to 34.2 percent
days_to_trough number 21 to 282
days_to_new_high number 16 to 464 US dollars
days_underwater number 66 to 746

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.

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-01-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
),
runs AS (
    SELECT session_date,
           close_px,
           max(close_px) OVER (ORDER BY session_date
                               ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak
    FROM daily
),
episodes AS (
    SELECT running_peak AS peak_px,
           min(session_date) AS peak_date,
           argMin(session_date, close_px) AS trough_date,
           min(close_px) AS trough_px
    FROM runs
    GROUP BY running_peak
),
sequenced AS (
    SELECT peak_px,
           peak_date,
           trough_date,
           trough_px,
           leadInFrame(peak_date, 1) OVER (ORDER BY peak_date
                                           ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS recovery_date
    FROM episodes
)
SELECT formatDateTime(peak_date, '%b %Y') AS episode_label,
       round(100 * (1 - trough_px / peak_px), 1) AS fall_from_peak_pct,
       dateDiff('day', peak_date, trough_date) AS days_to_trough,
       dateDiff('day', trough_date, recovery_date) AS days_to_new_high,
       dateDiff('day', peak_date, recovery_date) AS days_underwater
FROM sequenced
WHERE recovery_date > trough_date
  AND round(100 * (1 - trough_px / peak_px), 1) >= 5
ORDER BY fall_from_peak_pct DESC
LIMIT 8

Run your own version of this

The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.

More from this analysisWhat Is Maximum Drawdown? Depth vs Recovery
SPY underwater curve: month end close against its running peak, 2016 to 2026 series 127×2 Maximum drawdown against annualized volatility: eight large caps, five years to July 31, 2026 ranking 8×3 Same fund, five lookback windows: SPY maximum drawdown by sample length to July 31, 2026 ranking 5×3 Survivors-only average vs whole-cohort average, by starting year table 7×6 SPY realised volatility by month against a 10% target series 72×4 Weekly realised volatility and the weight it implied, Nov 2019 to Apr 2020 series 25×4 See all 2,170 queries →