Strasmore Research
Deep Dives Matt ConnorBy Matt Connor · Updated 2026-07-26

Lehman's Collapse: The 2008 Tape, Replayed

September 15, 2008: Lehman filed and SPY closed on its low. LEH's eighteen-month death spiral, the whipsaw week, and the full crash, panel by panel.

On the morning of September 15, 2008, Lehman Brothers filed the largest bankruptcy in US history, and the S&P 500 opened into it. This page replays the whole event from stored market data: what took the firm down, the eighteen-month death spiral of Lehman's own stock, the minute tape of the Monday itself, the whipsaw week that followed, and how far the 2008 crash finally ran. Every number is a stored query over the tape; expand any panel for the SQL.

What took Lehman down

Lehman was a 158-year-old securities firm and the fourth-largest US investment bank when it failed, and the mechanics were not exotic. Through the mid-2000s housing boom it loaded its balance sheet with mortgage-linked assets, subprime and Alt-A loans, commercial real estate, and the securitized bundles built from them, while running leverage of roughly thirty dollars of assets for every dollar of shareholder equity. At that ratio, a small percentage decline in asset values wipes out the equity entirely. When US house prices turned down in 2006 and 2007, the market value of those holdings fell, write-downs mounted quarter after quarter, and trading counterparties demanded ever more collateral to keep facing the firm.

The endgame compressed into ten days. Talks to sell a stake to the state-owned Korea Development Bank ended without a deal in early September. A multi-billion-dollar third-quarter loss was pre-announced on September 10. Over the final weekend, Bank of America bought Merrill Lynch instead; Barclays could not obtain the UK regulatory sign-off needed before Monday's open; and the US government, which had backstopped the Bear Stearns rescue in March, declined to guarantee Lehman's book. Out of buyers and out of collateral, the firm filed for Chapter 11 in the early hours of Monday, September 15, holding roughly $600 billion in assets.

Eighteen months to zero: Lehman's own tape

The filing did not ambush the stock market. Lehman's own ticker had been dying in plain sight for a year and a half, and the monthly closes preserve the whole descent:

QueryLEH month-end closes, January 2007 to the September 2008 filing
21 rows (showing 20)
monthmonth_closevs_best_month_close_pct
2007-0182.170
2007-0273.32-10.8
2007-0370-14.8
2007-0475.19-8.5
2007-0573.37-10.7
2007-0674.48-9.4
2007-0761.85-24.7
2007-0854.72-33.4
2007-0961.73-24.9
2007-1063.37-22.9
2007-1162.64-23.8
2007-1265.41-20.4
2008-0164.01-22.1
2008-0251-37.9
2008-0337.48-54.4
2008-0444.27-46.1
2008-0536.72-55.3
2008-0619.67-76.1
2008-0717.03-79.3
2008-0815.85-80.7
The exact SQL behind every number
WITH monthly AS (
    SELECT
        formatDateTime(month_start, '%Y-%m') AS month,
        round(argMax(day_close, et_date), 2) AS month_close
    FROM (
        SELECT
            toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
            toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
            argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS day_close
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'LEH'
          AND window_start >= toDateTime('2007-01-01 00:00:00') AND window_start < toDateTime('2008-09-18 00:00:00')
        GROUP BY et_date, month_start
    )
    GROUP BY month_start
)
SELECT
    month,
    month_close,
    round((month_close / max(month_close) OVER () - 1) * 100, 1) AS vs_best_month_close_pct
FROM monthly
ORDER BY month
Run this yourself

The best month-end close of the span is the first row: $82.17 in 2007-01. By 2008-03, the month Bear Stearns failed into its rescue, LEH closed at $37.48, -54.4% below that peak. August 2008 ended at $15.85. Then the final row: $0.14, -99.8% from the top, the last level the warehouse holds before the ticker went dark on September 17. A major financial stock does not go from the $80s to pennies in one weekend; the bankruptcy was the final step of a decline the tape had repriced month after month.

The day, on one row

Here is the filing day itself, compressed to one receipt row, every claim that follows reads from it:

QuerySPY on September 15, 2008: the Lehman Monday, receipted
prior_closerth_opengap_pctrth_lowlow_etrth_highrth_closeday_change_pctlow_vs_prior_pctday_shares_mrth_minute_bars
125.75121.81-3.1120.1415:59125.65120.34-4.3-4.5465.5390
The exact SQL behind every number
WITH
    (
        SELECT argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND window_start >= toDateTime('2008-09-12 00:00:00') AND window_start < toDateTime('2008-09-15 04:00:00')
    ) AS prior_rth_close
SELECT
    round(prior_rth_close, 2) AS prior_close,
    round(toFloat64(argMinIf(open, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)), 2) AS rth_open,
    round((toFloat64(argMinIf(open, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)) / prior_rth_close - 1) * 100, 1) AS gap_pct,
    round(minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS rth_low,
    formatDateTime(toTimeZone(argMinIf(window_start, (toFloat64(low), toInt64(toUnixTimestamp(window_start))), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 'America/New_York'), '%H:%i') AS low_et,
    round(maxIf(toFloat64(high), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS rth_high,
    round(toFloat64(argMaxIf(close, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)), 2) AS rth_close,
    round((toFloat64(argMaxIf(close, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)) / prior_rth_close - 1) * 100, 1) AS day_change_pct,
    round((minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / prior_rth_close - 1) * 100, 1) AS low_vs_prior_pct,
    round(toFloat64(sum(volume)) / 1e6, 1) AS day_shares_m,
    countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS rth_minute_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
  AND window_start >= toDateTime('2008-09-15 04:00:00') AND window_start < toDateTime('2008-09-15 23:59:00')
Run this yourself

From Friday's $125.75 close, SPY opened at $121.81, a -3.1% gap down, severe but not yet panic. The panic took all day to arrive: the low of $120.14 printed at 15:59 ET, the final minute of the session. SPY closed at $120.34, -4.3% on the day, on 465.5 million shares. A crash that closes on its exact low is a specific and ominous shape: no dip-buyers stepped in front of the bell.

The shape of the session

Half-hour buckets show where inside the day the damage actually happened:

QuerySPY by half-hour: September 15, 2008 regular session
et_timebucket_closebucket_lowshares_m
09:30122.2121.6952.4
10:00123.0212235.4
10:30123.88122.8338.4
11:00122.9512219.6
11:30122.38122.2526.7
12:00123.06122.328
12:30123.13122.6321.8
13:00122.78122.6516.3
13:30122.33121.8926.3
14:00122.4122.1224.7
14:30121.78121.4723.2
15:00120.81120.5135.6
15:30120.34120.1465.4
The exact SQL behind every number
SELECT
    formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
    round(toFloat64(argMax(close, window_start)), 2) AS bucket_close,
    round(min(toFloat64(low)), 2) AS bucket_low,
    round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
  AND window_start >= toDateTime('2008-09-15 04:00:00') AND window_start < toDateTime('2008-09-15 23:59:00')
  AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY et_time
ORDER BY et_time
Run this yourself

The morning actually stabilized, drifting near $123.88 through late morning. The afternoon buckets tell the real story: the midday bounce stalled at $123.13 in the 12:30 bucket, and from 14:00 onward every half-hour closed below the one before, $122.4, $121.78, $120.81, $120.34 at the final print. This is what a systemic-fear session looks like in buckets, not one waterfall, but a market that keeps re-asking the same question and getting a worse answer.

The week nobody remembers correctly

Memory says Lehman week was a straight collapse. The tape disagrees:

QuerySPY closes and Treasury yields, September 15-19, 2008: the whipsaw week
sessionclose_usdchange_pctshares_mtbill_3m_pcty10_pct
2008-09-15120.34-4.3465.51.023.47
2008-09-16121.871.3577.80.843.48
2008-09-17116.3-4.6620.70.033.41
2008-09-18120.63.7763.70.233.54
2008-09-19125.043.7484.20.993.78
The exact SQL behind every number
SELECT
    toString(et_date) AS session,
    close_usd,
    round(if(prev_close = 0, NULL, (close_usd / prev_close - 1) * 100), 1) AS change_pct,
    shares_m,
    tbill_3m_pct,
    y10_pct
FROM (
    SELECT et_date, close_usd, shares_m,
           lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
    FROM (
        SELECT
            toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
            round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS close_usd,
            round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND window_start >= toDateTime('2008-09-12 00:00:00') AND window_start < toDateTime('2008-09-19 23:59:00')
        GROUP BY et_date
    )
) s
LEFT JOIN (
    SELECT date, round(toFloat64(yield_3_month), 2) AS tbill_3m_pct, round(toFloat64(yield_10_year), 2) AS y10_pct
    FROM global_markets.treasury_yields
    WHERE date BETWEEN '2008-09-15' AND '2008-09-19'
) t ON s.et_date = t.date
WHERE et_date >= toDate('2008-09-15') AND et_date <= toDate('2008-09-19')
ORDER BY et_date
Run this yourself

Tuesday closed 1.3%, Wednesday fell -4.6% (the money-market and AIG stress day), and then Thursday and Friday rallied, 3.7% and 3.7%, ending the week at $125.04, close to where it began, following the first announcements of what became the TARP program.

The panel's yield columns carry what the money market did the same week. The 3-month Treasury bill, the closest tradable thing to cash, yielded 1.02% on Monday and 0.03% on Wednesday, September 17: investors accepting essentially zero return for three months in exchange for certainty of repayment, the day after the oldest US money-market fund "broke the buck" on its Lehman paper. The 10-year yield barely moved by comparison, 3.47% to 3.78% across the week, the panic was about the next ninety days, not the next decade. Stocks ended the week nearly flat; the bill market ended it in outright flight. The true equity collapse came later, September 29, the day the first TARP vote failed in the House, ranks 6th among every SPY session in this warehouse, receipted in the ranking table below, and the overnight gap carried the first shock while the sessions after carried the verdict.

The other dominoes

Lehman did not fall alone. The same week's closes reprice every institution holding similar assets, name by name:

QueryThe financials in Lehman week: Friday 9/12 close to Friday 9/19 close
tickerfri_closemon_closemon_pctweek_low_closelow_close_vs_fri_pctfri19_closeweek_pct
AIG12.25.09-58.32.06-83.14.22-65.4
MS37.1532.4-12.821.17-4327-27.3
GS154.23135.5-12.1107.88-30.1126.02-18.3
WM2.762.01-27.22.01-27.23.7234.8
C17.9915.53-13.714.04-2220.312.8
SPY125.75120.34-4.3116.3-7.5125.04-0.6
The exact SQL behind every number
WITH daily AS (
    SELECT
        ticker,
        toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
        argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS close_usd
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AIG', 'MS', 'GS', 'WM', 'C', 'SPY')
      AND window_start >= toDateTime('2008-09-12 00:00:00') AND window_start < toDateTime('2008-09-20 00:00:00')
    GROUP BY ticker, et_date
)
SELECT
    ticker,
    round(maxIf(close_usd, et_date = toDate('2008-09-12')), 2) AS fri_close,
    round(maxIf(close_usd, et_date = toDate('2008-09-15')), 2) AS mon_close,
    round((maxIf(close_usd, et_date = toDate('2008-09-15')) / maxIf(close_usd, et_date = toDate('2008-09-12')) - 1) * 100, 1) AS mon_pct,
    round(minIf(close_usd, et_date >= toDate('2008-09-15')), 2) AS week_low_close,
    round((minIf(close_usd, et_date >= toDate('2008-09-15')) / maxIf(close_usd, et_date = toDate('2008-09-12')) - 1) * 100, 1) AS low_close_vs_fri_pct,
    round(maxIf(close_usd, et_date = toDate('2008-09-19')), 2) AS fri19_close,
    round((maxIf(close_usd, et_date = toDate('2008-09-19')) / maxIf(close_usd, et_date = toDate('2008-09-12')) - 1) * 100, 1) AS week_pct
FROM daily
GROUP BY ticker
ORDER BY low_close_vs_fri_pct ASC
Run this yourself

AIG, carrying an insurer-sized book of credit protection written on the same mortgage securities, fell -58.3% on Monday alone, $12.2 to $5.09, and closed as low as $2.06, -83.1% below Friday, before the Federal Reserve extended it an emergency credit line on Tuesday night. Morgan Stanley's lowest close of the week sat -43% below Friday and Goldman Sachs's -30.1%, the last two independent investment banks trading like the queue's next entries. Washington Mutual, the country's largest thrift, entered the week already at $2.76 and was seized by regulators ten days later (in September 2008 the symbol WM belonged to the thrift; it trades Waste Management today). Then Friday: after the SEC banned short sales in hundreds of financial names before the open, WM ended the week up 34.8%, Citigroup up 12.8%, while SPY finished -0.6% below its prior Friday close. A week that cut three of the six names by thirty percent or more at their lows ended with two of them green, policy whipsaw, printed on the tape.

Where Lehman Monday actually ranks

Ask someone to name the worst market day of the crisis and most will point to the day Lehman filed. The ranking table disagrees:

QueryThe ten worst SPY sessions, 2003-2025, plus where Lehman Monday ranks
sessionrankchange_pcttarp_vote_rankpost_lehman_2008_top10
2020-03-161-11.666
2020-03-122-9.666
2008-10-153-9.266
2008-12-014-8.966
2020-03-095-7.766
2008-09-296-766
2008-10-097-6.866
2008-11-208-6.666
2011-08-089-6.566
2008-10-0710-6.166
2008-09-1534-4.366
The exact SQL behind every number
WITH daily AS (
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
        argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS close_usd
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2003-09-10 00:00:00') AND window_start < toDateTime('2026-01-01 00:00:00')
    GROUP BY et_date
),
changes AS (
    SELECT et_date, close_usd,
           lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
    FROM daily
),
ranked AS (
    SELECT
        row_number() OVER (ORDER BY (close_usd / prev_close - 1) ASC, et_date ASC) AS rank,
        toString(et_date) AS session,
        round((close_usd / prev_close - 1) * 100, 1) AS change_pct
    FROM changes
    WHERE prev_close > 0 AND isFinite(close_usd / prev_close)
),
(SELECT any(rank) FROM ranked WHERE session = '2008-09-29') AS tarp_rank_s,
(SELECT countIf(rank <= 10 AND session BETWEEN '2008-09-16' AND '2008-12-31') FROM ranked) AS post_lehman_s
SELECT
    session,
    rank,
    change_pct,
    tarp_rank_s AS tarp_vote_rank,
    post_lehman_s AS post_lehman_2008_top10
FROM ranked
WHERE rank <= 10 OR session = '2008-09-15'
ORDER BY rank
Run this yourself

Lehman Monday ranks 34th among every SPY session from late 2003 through the end of 2025, at -4.3%. The top belongs to the COVID crash, -11.6% on 2020-03-16 is the single worst, and to the autumn of 2008 itself: 6 of the ten worst sessions land between late September and the start of December 2008, every one of them after the filing. The TARP-vote failure on 2008-09-29 sits at rank 6, -7%. One famous crash is missing by construction: Black Monday 1987 predates this warehouse's minute data, which begins in 2003, so it cannot appear in the table. The measurable pattern is stark: the day the news breaks is rarely the day the tape breaks, the weeks after the filing repriced the whole system.

How big was the whole crash?

How big was the whole 2008 crash, and how long did it take to come back? One receipt row answers both:

QueryThe full bear market: SPY peak close to trough close, and the road back
peak_datepeak_closetrough_datetrough_closepeak_to_trough_pctsessions_peak_to_troughlehman_monday_closepeak_to_lehman_pcttrough_vs_lehman_pctlehman_eve_reclaim_datesessions_until_reclaim
2007-10-09156.412009-03-0968.07-56.5355120.34-23.1-43.42010-12-22572
The exact SQL behind every number
WITH daily AS (
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
        argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS close_usd
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2007-01-01 00:00:00') AND window_start < toDateTime('2014-01-01 00:00:00')
    GROUP BY et_date
),
(SELECT argMax(et_date, (close_usd, et_date)) FROM daily WHERE et_date < toDate('2008-09-15')) AS peak_d,
(SELECT argMin(et_date, (close_usd, et_date)) FROM daily WHERE et_date < toDate('2010-01-01')) AS trough_d,
(SELECT max(close_usd) FROM daily WHERE et_date = toDate('2008-09-12')) AS lehman_eve_close,
(SELECT min(et_date) FROM daily WHERE et_date > toDate('2008-09-15') AND close_usd >= lehman_eve_close) AS reclaim_d
SELECT
    toString(peak_d) AS peak_date,
    round(maxIf(close_usd, et_date = peak_d), 2) AS peak_close,
    toString(trough_d) AS trough_date,
    round(maxIf(close_usd, et_date = trough_d), 2) AS trough_close,
    round((maxIf(close_usd, et_date = trough_d) / maxIf(close_usd, et_date = peak_d) - 1) * 100, 1) AS peak_to_trough_pct,
    countIf(et_date > peak_d AND et_date <= trough_d) AS sessions_peak_to_trough,
    round(maxIf(close_usd, et_date = toDate('2008-09-15')), 2) AS lehman_monday_close,
    round((maxIf(close_usd, et_date = toDate('2008-09-15')) / maxIf(close_usd, et_date = peak_d) - 1) * 100, 1) AS peak_to_lehman_pct,
    round((maxIf(close_usd, et_date = trough_d) / maxIf(close_usd, et_date = toDate('2008-09-15')) - 1) * 100, 1) AS trough_vs_lehman_pct,
    toString(reclaim_d) AS lehman_eve_reclaim_date,
    countIf(et_date > toDate('2008-09-15') AND et_date < reclaim_d) AS sessions_until_reclaim
FROM daily
Run this yourself

From its pre-crisis peak close of $156.41 on 2007-10-09, SPY fell to $68.07 on 2009-03-09, -56.5% over 355 trading sessions. Lehman Monday sits in the middle of that slope, not at its edge: by that close SPY stood -23.1% below the peak, and the trough printed another -43.4% below the Lehman-Monday close, five months and three weeks later, the March 2009 bottom carries that day's full tape. The road back ran longer than the fall: SPY did not close above its pre-Lehman Friday level again until 2010-12-22, with 572 trading sessions in between. These are price returns; dividends paid along the way made the real recovery somewhat shorter.

Data notes
  • Official closes are ET-regular-session closes, the last minute-bar close inside the 9:30-16:00 ET window, on the ET clock. An unfiltered last print would catch after-hours trades.
  • WM's identity is window-specific. In September 2008 the symbol WM traded Washington Mutual (single-digit dollars on the tape); the symbol belongs to Waste Management today. No post-2008 data is attributed to the thrift.
  • LEH's tape ends September 17, 2008, the last prints stored before the listing was removed, which is why the dominoes panel excludes it.
  • SPY is the measuring stick. ETF closes differ slightly from S&P 500 index closes; ranks and percentages here are SPY's.
  • The worst-days ranking is pinned to 2003 through 2025, so this historical page does not drift as new sessions arrive.
  • Treasury yields are the stored daily par-yield marks; price returns throughout exclude dividends.

Lehman crash FAQ

How much did the market fall when Lehman collapsed?

On the filing day, September 15, 2008, SPY closed -4.3% down, finishing on its exact low of the session. The full bear market measured -56.5% from the October 2007 peak close to the March 2009 trough close.

What caused Lehman Brothers to collapse?

Concentrated mortgage exposure carried on roughly thirty-to-one leverage, write-downs that ate the firm's equity through 2008, and a final ten days in which every exit closed: the Korea Development Bank talks ended, Barclays could not get regulatory sign-off in time, and the US government declined a backstop. With no buyer and no guarantee, Lehman filed Chapter 11 on September 15, 2008.

Did the market crash immediately at the open?

It gapped -3.1% down at the open and then held surprisingly stable through the morning. The selling accelerated in the afternoon and never stopped, the day's low printed in the last minute of trading.

Was Lehman the bottom of the 2008 crash?

Not close. SPY fell for another five-plus months; the bottom printed on 2009-03-09 at $68.07, -43.4% below the Lehman-Monday close. The March 2009 bottom holds that day's tape.

How does the 2008 crash compare to the COVID crash of 2020?

2020 was faster; 2008 went deeper and lasted far longer. March 2020 owns the single worst SPY session in this data (-11.6% on 2020-03-16), but the 2008 decline ran 355 trading sessions from peak to trough, about seventeen months, versus a matter of weeks in March 2020.


Every panel above is a stored, versioned query over the historical tape, expand the SQL to see each measurement. Want to feel this day instead of reading it? It is one of the playable scenarios in the Strasmore Labs trading simulator.