Strasmore Research
深度研究 Matt Connor作者: Matt Connor · 更新于 2026-07-23

2009年3月9日金融危机底部回顾

回顾2009年3月9日金融危机底部,当时 SPY 经历了 {{q:drawdown:decline_pct}}% 的跌幅,市场表现平淡却标志着长牛起点。

2009年3月9日是现代市场史上的重要日期之一:金融危机的底部,较2007年10月的峰值低了 -56.5% —— 也是长达十余年牛市的起点。历史记录显示,该周一的指数水平为:标普500指数为676.53点,道琼斯指数为6,547点。下文的数据使用 SPY(标普500 ETF)进行计算,本数据库存储了该 ETF 自2003年以来的逐分钟行情。数据揭示了一个残酷的事实:当日交易并未显露任何转折迹象。 没有恐慌性抛售的顶点,也没有反转的爆发 —— 那只是一个平淡、压抑的下跌周一,却恰好是最后一次下跌。所有数据均为存储查询结果;点击任何面板即可查看其 SQL 语句。

跌向谷底之路

危机分阶段爆发,以下内容需结合具体日期进行解读。2008年3月,贝尔斯登被摩根大通收购。2008年9月15日周一,雷曼兄弟申请破产 —— 查看该交易日的详细页面。10月3日,美国国会通过了7000亿美元的银行救助基金 TARP。AIG 的政府救助规模曾两次扩大。花旗集团在11月获得了第二次联邦支持。冬季反弹后势头减弱,到2009年2月下旬,各大指数跌破了11月的低点并持续下跌。下表记录了这段长达17个月的走势:

查询从峰值到谷底再到回升 —— 一行看清整个危机
每个数字背后的完整 SQL
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-02 00:00:00') AND window_start < toDateTime('2013-07-01 00:00:00')
    GROUP BY et_date
),
(SELECT max(close_usd) FROM daily WHERE et_date < toDate('2008-01-01')) AS peak_close_usd
SELECT
    round(peak_close_usd, 2) AS peak_close,
    toString(argMaxIf(et_date, (close_usd, et_date), et_date < toDate('2008-01-01'))) AS peak_date,
    round(minIf(close_usd, et_date BETWEEN toDate('2008-07-01') AND toDate('2009-06-30')), 2) AS trough_close,
    toString(argMinIf(et_date, (close_usd, et_date), et_date BETWEEN toDate('2008-07-01') AND toDate('2009-06-30'))) AS trough_date,
    round((minIf(close_usd, et_date BETWEEN toDate('2008-07-01') AND toDate('2009-06-30')) / peak_close_usd - 1) * 100, 1) AS decline_pct,
    toString(minIf(et_date, et_date > toDate('2009-03-09') AND close_usd >= peak_close_usd)) AS recovered_date
FROM daily

SPY 从 2007-10-09 的收盘高点 $156.41 跌至 2009-03-09 的 $68.07 ——跌幅达 -56.5%,是自1930年代以来最深的一次跌幅。该表还包含了长期投资者最关注的数据:回本周期。SPY 直到 2013-03-14 才再次收于2007年的高点之上 —— 这距离底部已过去四年,距离顶部已过去五年半。以下将分别详细说明这两个阶段的数据。

交易概况

查询2009年3月9日的 SPY —— 世代级的低点,已记录
每个数字背后的完整 SQL
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('2009-03-06 00:00:00') AND window_start < toDateTime('2009-03-09 04:00:00')
    ) AS prior_rth_close,
    (
        SELECT round(avg(day_shares) / 1e6, 1)
        FROM (
            SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, toFloat64(sum(volume)) AS day_shares
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE ticker = 'SPY'
              AND window_start >= toDateTime('2008-12-01 00:00:00') AND window_start < toDateTime('2009-03-09 04:00:00')
            GROUP BY d
            ORDER BY d DESC
            LIMIT 20
        )
    ) AS avg20_shares,
    (
        SELECT round(avg(day_shares) / 1e6, 1)
        FROM (
            SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, toFloat64(sum(volume)) AS day_shares
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE ticker = 'SPY'
              AND window_start >= toDateTime('2008-12-01 00:00:00') AND window_start < toDateTime('2009-03-09 04:00:00')
            GROUP BY d
            ORDER BY d DESC
            LIMIT 60
        )
    ) AS avg60_shares
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(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,
    formatDateTime(toTimeZone(argMaxIf(window_start, (toFloat64(high), -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 high_et,
    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(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(toFloat64(sum(volume)) / 1e6, 1) AS day_shares_m,
    avg20_shares AS avg20_shares_m,
    avg60_shares AS avg60_shares_m,
    round((toFloat64(sum(volume)) / 1e6 / avg20_shares - 1) * 100, 0) AS vol_vs_20d_pct,
    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('2009-03-09 04:00:00') AND window_start < toDateTime('2009-03-09 23:59:00')

SPY 开盘价为 $67.95,较周五收盘价 $68.84 低开 -1.3%。东部时间 10:13 触及 $70 高点,随后在当日晚些时候(东部时间 15:17)跌至 $67.73 低点,最终收于 $68.07,当日涨跌幅为 -1.1%。全天波动幅度约为两美元。这一具有世代意义的收盘价,是在没有任何剧烈波动的情况下形成的。

成交量揭示了单纯数字无法回答的问题:357.4 百万股的成交量属于活跃还是低迷?对于 2009 年 3 月而言,属于低迷。过去 20 个交易日的 SPY 日均成交量为 406.3 百万股,而当日成交量仅为该均值的 -12。过去 60 个交易日的日均成交量为 337.9 百万股。关于“恐慌性抛售”的说法认为,世代级别的底部通常伴随着创纪录的成交量。然而,现代史上最著名的底部,其成交量甚至低于该月份的常规交易日。

交易走势

查询SPY 每半小时走势 —— 2009年3月9日常规交易时段
每个数字背后的完整 SQL
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('2009-03-09 04:00:00') AND window_start < toDateTime('2009-03-09 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

半小时内的走势修正了一个常见的误解:3月9日并非单边下跌。跳空低开后,SPY 在上午中段反弹,10:00 ET 时段收于 $69.49,略低于 10:13 录得的 $70 日内高点。随后,市场在下午回吐涨幅,一路跌至 15:17 录得的 $67.73 低点,并在收盘前小幅反弹。先反弹、后回落、再小幅反弹:这是一种极其普通的走势。没有瀑布式下跌,没有恐慌性成交量特征,也没有 V 型反转。对比 雷曼周一 尾盘的急跌或 闪崩 时的真空状态,这属于完全不同的第三种形态:交易力竭。那个冬天的多次百分比暴跌均发生在之前的几周。当日的底部仅仅是因为卖盘枯竭。

市场转折点

周一的数据无法解释周二的走势——转折点源于新闻动态,而非交易盘面。在周二开盘前,花旗集团(Citigroup)首席执行官 Vikram Pandit 的一份内部备忘录被泄露给媒体:备忘录称,该银行在 2009 年 1 月和 2 月实现了盈利,这是自 2007 年以来表现最好的连续两个月。花旗集团是这场危机的中心,周一收盘价为 $1.05,且已有数月未发布过任何来自原始渠道的利好消息。以下是低点之后五个交易日的盘面记录:

查询转折周 —— SPY、花旗集团与10年期收益率,3月9-13日
每个数字背后的完整 SQL
WITH daily AS (
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
        argMaxIf(toFloat64(close), window_start, ticker = 'SPY' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS spy_close_raw,
        round(argMaxIf(toFloat64(close), window_start, ticker = 'C' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS citi_close,
        round(toFloat64(sumIf(volume, ticker = 'SPY')) / 1e6, 1) AS spy_shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'C')
      AND window_start >= toDateTime('2009-03-06 04:00:00') AND window_start < toDateTime('2009-03-14 00:00:00')
    GROUP BY et_date
)
SELECT
    toString(d.et_date) AS session,
    round(d.spy_close_raw, 2) AS spy_close,
    round((d.spy_close_raw / d.prev_close - 1) * 100, 1) AS spy_change_pct,
    d.spy_shares_m,
    d.citi_close,
    t.ten_year_pct
FROM (
    SELECT *, lagInFrame(spy_close_raw) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
    FROM daily
) AS d
LEFT JOIN (
    SELECT date, round(toFloat64(yield_10_year), 2) AS ten_year_pct
    FROM global_markets.treasury_yields
    WHERE date BETWEEN '2009-03-09' AND '2009-03-13'
) AS t ON d.et_date = t.date
WHERE d.et_date >= toDate('2009-03-09')
ORDER BY d.et_date

3 月 10 日开盘走高并维持涨势:SPY 收于 $72.21,上涨 6.1%,成交量为 401.3 百万股——成交量高于触底当天。Citigroup 收于 $1.44。到周五,SPY 报收 $76.09,Citigroup 报收 $1.78。同期,10 年期国债收益率从 2.89% 上升至 2.99%——资金在股市反弹的同时流出避险资产,即“逃向质量”的交易逻辑正在逆转。

需要说明的是:那个冬天此前已有几次百分比涨幅显著但最终失败的案例,3 月 10 日的行情并未证明这次有所不同。Pandit 的备忘录是历史学家界定转折点的标志;而盘面数据所能展示的——且在上方已有所体现的——是时间上的巧合。

低点是否企稳?

只有市场不再回测,底部才算真正形成。本图表追踪了截至 2009 年 6 月底的 SPY 周度数据——包含每周的最低成交价、收盘价,以及最后一列的滚动最低价:

查询低点后十六周 —— 周线低点、收盘价及滚动最小值
每个数字背后的完整 SQL
WITH daily AS (
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
        minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS day_low,
        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 = 'SPY'
      AND window_start >= toDateTime('2009-03-10 04:00:00') AND window_start < toDateTime('2009-06-27 00:00:00')
    GROUP BY et_date
)
SELECT
    week_of,
    week_low,
    week_close,
    round(min(week_low) OVER (), 2) AS lowest_low_after_mar9
FROM (
    SELECT
        toString(toMonday(et_date)) AS week_of,
        round(min(day_low), 2) AS week_low,
        round(argMax(day_close, et_date), 2) AS week_close
    FROM daily
    GROUP BY week_of
)
ORDER BY week_of

3 月 9 日之后的 16 周内,SPY 的最低成交价为 $69.37 ——该价格出现在低点后的第一周 (2009-03-09)。SPY 之后从未跌破 3 月 9 日的收盘价 $68.07,更不用说 $67.73 的日内低点。市场既没有回测,也没有第二次机会,更没有跌回原水平:到 2009-05-04 那周,SPY 的收盘价为 $93.04,在 9 周内较底部上涨了三分之一。等待确认是有代价的,本图表准确记录了这一事实。

谁引领了从低点开始的反弹

受损最严重的银行股也是反弹的核心。从 2010 年 3 月 9 日左右的低点算起,一年时间里:

查询低点后一年 —— 危机中心与大盘对比
每个数字背后的完整 SQL
SELECT
    ticker,
    round(b_close, 2) AS close_mar9_2009,
    round(y_close, 2) AS close_mar9_2010,
    round((y_close / b_close - 1) * 100, 0) AS pct_1yr,
    fin AS financial
FROM (
    SELECT
        ticker,
        argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2009-03-09') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS b_close,
        argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2010-03-09') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS y_close,
        max(ticker IN ('C', 'BAC', 'WFC', 'JPM', 'GS', 'XLF')) AS fin
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('C', 'BAC', 'WFC', 'JPM', 'GS', 'XLF', 'SPY', 'AAPL', 'XOM')
      AND ((window_start >= toDateTime('2009-03-09 04:00:00') AND window_start < toDateTime('2009-03-10 04:00:00'))
        OR (window_start >= toDateTime('2010-03-09 04:00:00') AND window_start < toDateTime('2010-03-10 04:00:00')))
    GROUP BY ticker
)
ORDER BY pct_1yr DESC

涨幅领先的股票包括:BAC上涨了 349%,C上涨了 265%(股价从 1.05 起算),WFC上涨了 190%。这些曾因最坏预期而大幅下跌的大型金融股,如今股价翻了两倍至四倍。指数成分股并不全是银行股——AAPL在同期上涨了 168%——但该板块明确指出,表现最好的个股属于金融行业。与此同时,大盘 (SPY) 上涨了 68%,而此前在下跌过程中表现最稳健的防御型巨头 XOM 仅上涨了 3%。这次反弹几乎完全逆转了此前的跌幅排名。

与其他底部对比

由于分钟级行情数据始于 2003 年 9 月,因此 2002 年 10 月的互联网泡沫低点不在统计范围内。以下是自该时间点以来,三个最深收盘低点的对比情况:

查询四大主要低点 —— SPY 三个月及十二个月远期收益率
每个数字背后的完整 SQL
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('2009-03-09 04:00:00') AND window_start < toDateTime('2010-03-17 00:00:00'))
        OR (window_start >= toDateTime('2011-10-03 04:00:00') AND window_start < toDateTime('2012-10-10 00:00:00'))
        OR (window_start >= toDateTime('2018-12-24 04:00:00') AND window_start < toDateTime('2019-12-31 00:00:00'))
        OR (window_start >= toDateTime('2020-03-23 04:00:00') AND window_start < toDateTime('2021-03-30 00:00:00')))
    GROUP BY et_date
)
SELECT
    bottom_session,
    round(argMin(close_usd, et_date), 2) AS bottom_close,
    round((argMinIf(close_usd, et_date, et_date >= toDate(bottom_session) + 91) / argMin(close_usd, et_date) - 1) * 100, 1) AS plus_3mo_pct,
    round((argMinIf(close_usd, et_date, et_date >= toDate(bottom_session) + 365) / argMin(close_usd, et_date) - 1) * 100, 1) AS plus_1yr_pct
FROM (
    SELECT
        multiIf(et_date >= toDate('2020-03-23'), '2020-03-23',
                et_date >= toDate('2018-12-24'), '2018-12-24',
                et_date >= toDate('2011-10-03'), '2011-10-03',
                '2009-03-09') AS bottom_session,
        et_date,
        close_usd
    FROM daily
)
GROUP BY bottom_session
ORDER BY bottom_session

自 2009 年底部以来,SPY 在三个月内上涨了 38.5%,一年内上涨了 68.1%。这是大多数投资者所经历过的最强劲的 12 个月涨幅,而起点看起来只是危机中极其平凡的一天。只有 2020 年 3 月 COVID 低点 属于同级别,其首年涨幅为 +75.1% —— 关于 2020 年刺激政策引发的反弹 的结构分析请参阅专门章节。2011 年和 2018 年的回调低点(当时确实引发了恐慌)在首年分别实现了 31.4% 和 37.1% 的回报。这四种情况的共同规律是:跌幅越深,首轮反弹越陡峭,且首轮反弹始终是整个复苏过程中最剧烈的一段。

为什么底部只能事后才可见

真实的机制在于:底部的定义取决于随后没有发生的情况——即不再创出新低。由于这种定义在逻辑上无法预知,因此无法在实时交易中确定。在 2008 年末的下跌过程中,所有提出的量化“底部信号”都曾多次失效;3 月 9 日当天的表现也未触发任何信号——走势平庸,成交量低于平均水平,且利好消息直到次日早晨才出现。任何声称其指标预测了这一天的人,其实是在描述幸存者偏差,而该指标此前预测过的许多“底部”正是这种偏差的证据。

这一天的启示:应针对结果的区间进行布局,而非针对精确的点位。从 2009 年 3 月开始获利丰厚的投资者,绝大多数是那些在整个艰难的冬季中按计划持续买入的人——这正是 收益衡量惯例 所默认的方法——而非那些精准捕捉到最低点的人。在这种纪律中,行情走势的作用是校准而非预言:识别出平庸走势,才能避免将一个平淡的周一误判为下跌延续的信号,而事实上下跌其实已经结束。

2009年3月底部常见问题解答

2008-2009年股灾的准确底部在哪里?

2009年3月9日周一创下收盘低点:SPY为$68.07,标普500指数为广为人知的676.53。指数著名的盘中“666”点位出现在前一个交易日,即3月6日周五。

从2007年到2009年,股市下跌了多少?

SPY收盘下跌了-56.5%——从2007-10-09的$156.41跌至2009-03-09的$68.07——这是自1930年代以来美国股市最深的跌幅。

2009年3月10日发生了什么?

这是触底后的第一个交易日:由于花旗集团(Citigroup)的一份内部备忘录在隔夜泄露,称该银行在1月和2月已实现盈利,SPY上涨了6.1。花旗集团收盘价为$1.44,高于低点时的$1.05

市场从2009年底部反弹的速度有多快?

第一年的表现具有历史意义:SPY从底部收盘价上涨了68.1。收复整个危机期间的跌幅则耗时更长——直到2013-03-14,收盘价才首次重新回到2007年10月的峰值之上。

有任何预示底部的信号吗?

盘面数据并未显示3月9日与前后几周有任何区别——当日交易平淡,成交量低于其20日平均水平。由于此后再未跌破该点位,该点位在事后被确认为底部:随后16周内的最低成交价均高于3月9日的收盘价。


以上每个面板都是针对历史行情数据的存储版查询——展开SQL即可查看各项指标。想亲身体验这一天,而不仅仅是阅读文字?您可以在Strasmore Labs交易模拟器中体验这一可运行的场景。

#market history#2009 bottom#financial crisis#bull markets#spy