Strasmore Research
Mga imbestigasyon Matt ConnorNi Matt Connor · Na-update noong 2026-07-25

Market Turn noong March 24, 2020

Balik-tanaw sa March 24, 2020: ang crash at dash for cash, ang Fed package na nagpabago sa takbo ng market, sector breadth, at ang retest na hindi na nangyari.

Noong March 23, 2020, inanunsyo ng Federal Reserve ang open-ended asset purchases. Ito ay QE na walang itinakdang limitasyon. Nagdagdag din sila ng isang bagay na hindi pa nila nagawa noon: mga facility para bumili ng corporate bonds.

Ang March 24, 2020 ang naging sagot ng market. Ito ang COVID stimulus rally, na isa sa pinakamalaking single-day US equity gains sa record. Nakita lamang pagkatapos na ito ang ikalawang araw ng isang bagong bull market.

Ang bottom mismo ay nagsara na noong hapon bago lumabas ang anunsyo.

Ang crash bago ang pag-ikot

Ang crash mismo ay may sariling pahina; narito ang rekord na pinagbatayan nito — bawat session mula sa all-time high hanggang sa bottom, kasama ang 10-year Treasury yield sa basis points:

QuerySPY daily close, drawdown, at 10-year yield — Feb 19 to Mar 23, 2020
Ang eksaktong SQL sa likod ng bawat numero
WITH daily AS (
    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
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2020-02-19 00:00:00') AND window_start < toDateTime('2020-03-24 04:00:00')
    GROUP BY et_date
    HAVING et_date >= toDate('2020-02-19') AND et_date <= toDate('2020-03-23') AND close_usd > 0
)
SELECT
    toString(d.et_date) AS session,
    d.close_usd,
    round((d.close_usd / (SELECT max(close_usd) FROM daily) - 1) * 100, 1) AS drawdown_pct,
    round(t.yield_10_year * 100) AS y10_bps
FROM daily AS d
LEFT JOIN global_markets.treasury_yields AS t ON t.date = d.et_date
ORDER BY d.et_date

Mula sa all-time-high close na $338.31 noong 2020-02-19, bumagsak ang SPY sa $222.51 pagsapit ng 2020-03-23 — isang -34.2% drawdown, kung saan ang bawat session ng pagbaba ay nasa loob ng 24 rows ng panel.

Ang yield column ang nagpapakita ng katotohanan. Noong 2020-03-09, ang 10-year yield ay bumagsak mula 156 basis points patungo sa record noon na 54 — ang klasikong flight to safety, kung saan lumilipat ang pera mula sa stocks patungo sa bonds. Pagkatapos ay nabago ang pattern: noong 2020-03-18, ang yield ay higit sa nadoble patungong 118 basis points habang ang drawdown ng SPY ay lumalim mula -18.9% patungong -28.8%. Ang sabay na pagbagsak ng stocks at Treasuries ay tanda ng forced selling — kung saan kumukuha ng cash ang mga holders sa pamamagitan ng pagbenta ng anumang may bid pa. Noong kalagitnaan ng Marso, ang krisis ay tungkol na sa plumbing ng credit mismo, at hindi na sa presyo ng stocks.

Ano ang aktwal na inanunsyo ng Fed — at kung ano ang hindi gumana

Sinubukan na ang mga rate cut. Narito ang pagkakasunod-sunod ng mga petsa, kung saan ang bawat entry ay mababasa sa panel sa itaas:

  • 2020-03-03 — isang emergency half-point rate cut, ang unang cut sa pagitan ng mga meeting simula noong 2008. Ang SPY ay nagsara sa $300.34, -11.2% mula sa high, at nagpatuloy ang pagbagsak.
  • March 15, isang Linggo — ibinaba ang rates sa zero kasama ang isang $700 billion asset-purchase program. Ang susunod na session, 2020-03-16, ay nagsara nang -29.2% sa ibaba ng February high — isa sa mga pinakamalalang single session sa buong crash.
  • March 23, 8:00 am ET — inalis ng Fed ang ceiling: ang pagbili ng Treasuries at mortgage-backed securities ay magpapatuloy "sa mga halagang kailangan," nang walang takdang limitasyon. Kasama rito ang PMCCF at SMCCF — ang mga kauna-unahang corporate-bond-buying facilities ng Fed — at isang binuhay na TALF para suportahan ang consumer credit. Ang SPY ay nagsara pa rin sa bear's low nang hapong iyon.
  • March 24 — ang session sa ibaba. Overnight, nagkasundo ang Congress sa halos $2 trillion CARES Act; nilagdaan ito noong March 27, sa loob ng three-day burst na nakatala sa ibaba.

Dalawang pagkakaiba sa disenyo ang naghiwalay sa package noong March 23 mula sa mga naunang pagsubok. Ang isang fixed-size program ay may end date na nakikita ng isang stressed market; ang "sa mga halagang kailangan" ay wala. At ang mga corporate facilities ay naglagay ng isang public buyer nang direkta sa loob ng credit markets kung saan tumigil ang daloy ng plumbing. Kung ang mga pagkakaibang ito ang naging mahalaga ay isang judgment call; itinatala ng tape ang pagkakasunod-sunod — dalawang escalation, patuloy na pagbagsak, isang ikatlong disenyo, at pagkatapos ay ang pag-ikot.

Ang araw, sa isang row

QuerySPY noong March 24, 2020 — the turn, receipted
Ang eksaktong SQL sa likod ng bawat numero
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('2020-03-23 00:00:00') AND window_start < toDateTime('2020-03-24 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('2020-03-24 04:00:00') AND window_start < toDateTime('2020-03-24 23:59:00')

Mula sa March 23 close na $222.51 — ang huling close ng bear market — ang SPY ay nag-gap ng +5.4% para mag-open sa $234.42, na-print ang session low nito na $233.8 sa mga unang minuto (09:31 ET), at hindi na bumalik dito: ang close sa $243.59 ay +9.5% para sa araw na ito. Ang isang rally kung saan ang low ay na-print sa unang minuto ay ang mirror image ng isang crash na nag-close sa low nito. Isang row, gayunpaman, ang nagpapatag ng landas — ipinapakita ng half-hour tape sa ibaba ang fade na kailangang absorb ng session.

Ang takbo ng session

QuerySPY bawat half-hour — March 24, 2020 regular session
Ang eksaktong SQL sa likod ng bawat numero
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('2020-03-24 04:00:00') AND window_start < toDateTime('2020-03-24 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

Tapat ang panel: nagbago ang direksyon. Ang low na $233.8 ay lumabas sa unang minuto at hindi na muling nabalikan — totoo ang bahaging ito ng one-directional story. Ngunit matapos maabot ang $242.24 sa noon bucket, bumaba ang tape sa loob ng dalawang oras — ang 13:30 bucket ay nagsara sa $237.25, at ang 14:00 bucket ang nagtala ng pinakamababang low ng hapon, $235.05 — ang bahagi kung saan maaaring naging isa na namang failed bounce ang araw. Sa halip, ang give-back ay nanatiling malayo sa opening low, at ang huling kalahating oras ang naghatid ng pinakamataas na bucket close ng session, $243.59, sa 34.7 million shares — ang pinakamabigat na bucket sa 232.4-million-share day, mas mataas pa kaysa sa 27.3 million ng open. Isang midday dip na nakahanap ng mga buyer, at pagkatapos ay nagsara sa highs sa peak volume.

Malawak na rally, o limitado?

Maaaring mahila pataas ang isang index ng iilang mega-caps. Hindi ito ang nangyari rito. Labindalawang funds — ang tatlong pangunahing index trackers kasama ang siyam na S&P sector funds — sa parehong dalawang closes:

QueryMarch 24, 2020 sa index at sector ETFs — lahat tumaas, cyclicals muna
Ang eksaktong SQL sa likod ng bawat numero
SELECT
    ticker,
    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 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2020-03-23')), 2) AS mar23_close,
    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 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2020-03-24')), 2) AS mar24_close,
    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 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2020-03-24')) / argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2020-03-23')) - 1) * 100, 1) AS change_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'DIA', 'QQQ', 'IWM', 'XLE', 'XLI', 'XLF', 'XLK', 'XLY', 'XLV', 'XLU', 'XLP')
  AND window_start >= toDateTime('2020-03-23 00:00:00') AND window_start < toDateTime('2020-03-25 00:00:00')
GROUP BY ticker
ORDER BY change_pct DESC

Lahat ng 12 ay nagsara nang mas mataas. Nanguna ang Energy (XLE) sa +16.4%, kasunod ang industrials (XLI, +12.8%) at financials (XLF, +12.7%) — ang mga bahagi ng market na pinaka-sensitive sa ekonomiya, at ang mga unang nanganganib kapag may shutdown. Ang Dow tracker na DIA ay tumaas ng 11.3% — ang paggalaw sa likod ng mga headline na "best day since 1933" ng linggong iyon, isang superlative na bahagi ng mas mahabang price history ng Dow. Ang pinakamababang gains ay nasa mga classic defensives, ang consumer staples (XLP, +5.1%) at healthcare (XLV, +7.4%), at ang QQQ (+7.7%) ng Nasdaq-100 ay nahuli sa +9.5% ng SPY. Ang isang everything-green tape na pinangunahan ng mga cyclicals ay kabaligtaran ng isang narrow mega-cap squeeze — breadth ang naging marka ng araw na ito.

Gaano ba talaga ito ka-historiko?

Ang "Pinakamalaking araw mula noong 1933" ay isang Dow statistic mula sa mga pahayagan ng linggong iyon. Narito ang maaaring kumpirmahin ng aming sariling tape, base sa saklaw nito:

QueryMarch 24, 2020 ranked laban sa bawat SPY session sa minute tape
Ang eksaktong SQL sa likod ng bawat numero
SELECT
    countIf(isFinite(day_pct)) AS sessions_measured,
    toString(min(et_date)) AS first_session,
    round(mar24_d, 1) AS mar24_gain_pct,
    countIf(isFinite(day_pct) AND day_pct > mar24_d) AS bigger_days,
    countIf(isFinite(day_pct) AND day_pct > mar24_d) + 1 AS mar24_rank,
    arrayStringConcat(arraySort(groupArrayIf(toString(et_date), isFinite(day_pct) AND day_pct > mar24_d)), ', ') AS bigger_day_dates,
    round(mar26_b, 1) AS burst3_gain_pct,
    countIf(isFinite(burst3_pct) AND burst3_pct > mar26_b) AS bigger_bursts,
    round(mar24_r30, 2) AS vol_vs_30d,
    round(mar24_r250, 2) AS vol_vs_250d,
    round(mar24_shares / 1e6, 0) AS mar24_shares_m
FROM (
    SELECT
        et_date, day_pct, burst3_pct,
        max(if(et_date = toDate('2020-03-24'), day_pct, -999)) OVER () AS mar24_d,
        max(if(et_date = toDate('2020-03-26'), burst3_pct, -999)) OVER () AS mar26_b,
        max(if(et_date = toDate('2020-03-24'), shares / vol_avg_30, -999)) OVER () AS mar24_r30,
        max(if(et_date = toDate('2020-03-24'), shares / vol_avg_250, -999)) OVER () AS mar24_r250,
        max(if(et_date = toDate('2020-03-24'), shares, -999)) OVER () AS mar24_shares
    FROM (
        SELECT
            et_date,
            (close_usd / lagInFrame(close_usd, 1) OVER (ORDER BY et_date ASC ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) - 1) * 100 AS day_pct,
            (close_usd / lagInFrame(close_usd, 3) OVER (ORDER BY et_date ASC ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) - 1) * 100 AS burst3_pct,
            shares,
            avg(shares) OVER (ORDER BY et_date ASC ROWS BETWEEN 30 PRECEDING AND 1 PRECEDING) AS vol_avg_30,
            avg(shares) OVER (ORDER BY et_date ASC ROWS BETWEEN 250 PRECEDING AND 1 PRECEDING) AS vol_avg_250
        FROM (
            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,
                toFloat64(sum(volume)) AS shares
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE ticker = 'SPY' AND window_start < toDateTime('2026-01-01 00:00:00')
            GROUP BY et_date
            HAVING close_usd > 0
        )
    )
)
GROUP BY mar24_d, mar26_b, mar24_r30, mar24_r250, mar24_shares

Mula 2003-09-10 — ang unang session ng aming minute data — ang SPY ay nagtala ng 5613 close-to-close daily returns. Ang +9.5% noong March 24, 2020 ay nasa rank na #3: eksaktong 2 sessions ang humigit dito (2008-10-13, 2008-10-28), na kapwa nangyari sa loob ng October 2008 panic. Mas bihira pa ang three-day sequence: ang +17.5% run mula sa March 23 close hanggang sa March 26 close ay may 0 mas malalaking three-session gains sa buong sample. Sa lahat ng maaaring suriin ng warehouse na ito, walang tumutugma sa pagsabog na ito.

Iba ang kwento ng volume: ang 232 million SPY shares ay 2.86× ng trailing-year average — at 1.12× lamang ng average ng nakaraang 30 sessions. Kumpara sa anumang normal na bahagi ng kasaysayan, ang aktibidad ay extraordinary; ngunit kumpara sa mga crash weeks bago ito, isa lamang itong ordinaryong araw sa gitna ng bagyo. Ang mga historic turns ay hindi laging nagpapahayag ng sarili sa pamamagitan ng historic volume.

Ang tatlong araw na pagsipa

QuerySPY closes, March 23-26, 2020 — the three-day burst
Ang eksaktong SQL sa likod ng bawat numero
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
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('2020-03-20 00:00:00') AND window_start < toDateTime('2020-03-26 23:59:00')
        GROUP BY et_date
    )
)
WHERE et_date >= toDate('2020-03-23') AND et_date <= toDate('2020-03-26')
ORDER BY et_date

Agad na bumilis ang pag-angat: +9.5% noong ika-24, +1.3% noong ika-25, +5.9% noong ika-26 — isang sequence ng tatlong session na bumura sa ilang linggong pagbagsak, at wala nang mas malaki pa rito sa sample sa itaas. Ang pattern noong March 2020 ay katulad ng noong March 2009: sa dalawang pagkakataon, ang mapagpasyang policy response ay dumating malapit sa low, naging agresibo ang unang leg ng rally, at ang araw ng maximum opportunity ay mukhang — noong umagang iyon — walang pagkakaiba sa isa pang bear-market bounce.

Nanatili ba ang rally?

Sa real time, ang consensus reading ay isang "bear-market bounce," at may mga basehan ang mga skeptics: labing-isang araw bago nito, nagkaroon na ng rally na halos kasinglaki nito — mula $248.1 noong 2020-03-12 hanggang $270.93 noong 2020-03-13 — at ang session pagkatapos noon ay nagsara sa $239.41, ang pinakamalalang araw ng buong crash. Walang pinapatunayan ang isang green day. Ang nagpapaiba sa March 24 ay ang mga sumunod na nangyari:

QueryNag-hold ba? Ang retest na hindi nangyari, at dalawang recovery clocks
Ang eksaktong SQL sa likod ng bawat numero
SELECT
    round(ath_close, 2) AS feb19_ath_close,
    round(bottom_close, 2) AS mar23_bottom_close,
    toString(rec_date) AS recovery_date,
    countIf(et_date > toDate('2020-03-23') AND et_date <= rec_date) AS sessions_to_new_high,
    dateDiff('day', toDate('2020-03-23'), rec_date) AS days_low_to_new_high,
    dateDiff('day', toDate('2020-02-19'), rec_date) AS round_trip_days,
    round(minIf(close_usd, et_date > toDate('2020-03-23') AND et_date <= rec_date), 2) AS lowest_close_after,
    toString(argMinIf(et_date, (close_usd, et_date), et_date > toDate('2020-03-23') AND et_date <= rec_date)) AS lowest_close_date,
    round((minIf(close_usd, et_date > toDate('2020-03-23') AND et_date <= rec_date) / bottom_close - 1) * 100, 1) AS closest_retest_pct,
    toString(peak07_date) AS peak_2007_date,
    toString(rec07_date) AS recovery_2013_date,
    dateDiff('day', peak07_date, rec07_date) AS round_trip_2008_days
FROM (
    SELECT
        et_date, close_usd, ath_close, bottom_close, peak07_date,
        min(if(et_date > toDate('2020-03-23') AND close_usd >= ath_close, et_date, toDate('2099-01-01'))) OVER () AS rec_date,
        min(if(et_date >= toDate('2008-01-01') AND close_usd >= peak07_close, et_date, toDate('2099-01-01'))) OVER () AS rec07_date
    FROM (
        SELECT
            et_date, close_usd,
            max(if(et_date = toDate('2020-02-19'), close_usd, -999)) OVER () AS ath_close,
            max(if(et_date = toDate('2020-03-23'), close_usd, -999)) OVER () AS bottom_close,
            max(if(et_date >= toDate('2007-01-01') AND et_date < toDate('2008-01-01'), (close_usd, et_date), (-999., toDate('1970-01-01')))) OVER () .1 AS peak07_close,
            max(if(et_date >= toDate('2007-01-01') AND et_date < toDate('2008-01-01'), (close_usd, et_date), (-999., toDate('1970-01-01')))) OVER () .2 AS peak07_date
        FROM (
            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('2021-01-01 00:00:00')
            GROUP BY et_date
            HAVING close_usd > 0
        )
    )
)
GROUP BY ath_close, bottom_close, rec_date, peak07_date, rec07_date

Hindi na nagkaroon ng retest. Pagkatapos ng March 23, ang pinakamababang close na naitala ng SPY ay $243.59 — noong 2020-03-24, ang mismong araw ng stimulus-rally. Hindi na muling nagsara ang market sa loob ng 9.5% mula sa bottom. Ang pre-COVID high na $338.31 ay nabawi noong 2020-08-18103 trading sessions pagkatapos ng low, isang 181-day round trip mula all-time high pabalik sa all-time high. Ang paghahambing sa 2008, na kinalkula sa parehong paraan: ang 2007-10-09 peak ng SPY ay hindi nakakita ng bagong closing high hanggang 2013-03-14, 1983 araw ang lumipas. Dalawang krisis, dalawang bilis, isang market na nagbago ang metabolism sa pagitan nito.

Ano ang itinuturo ng araw na ito

Tatlong aral ang dapat tandaan. Una, ang gap ang gumawa ng trabaho: malaking bahagi ng gain ng araw ay naroon na bago pa ang open — ang sinumang naghintay ng entry sa regular hours ay nagbayad nang mataas sa buong araw — ang mechanics ng overnight gap ay nasa maximum amplitude. Pangalawa, nauna ang bottom bago ang confirmation: ang close ng March 23 ang pinakamababang presyo, na nakita lamang matapos tumanggi ang mga session na tulad nito na bumalik doon. Pangatlo, ang velocity ay gumagana sa dalawang panig: ang parehong market structure na nag-compress ng -34.2% drawdown patungo sa mga 24 rows sa itaas ay nag-compress din ng initial recovery sa loob ng tatlong session. Ang bilis ay katangian ng market plumbing ng panahong ito, hindi dahil sa mabuti o masamang balita.

Hindi hangal ang mga skeptics ng linggong iyon: ang breadth, ang burst, at ang retest na hindi nangyari — bawat ebidensyang naghihiwalay sa March 24 mula sa mga failed rally ay masusukat lamang sa hindsight. Ang pagkakaiba ng isang bear-market rally at isang bagong bull market ay hindi nakikita sa unang araw at hindi mapagkakamali sa loob ng ilang buwan.

FAQ sa COVID rally

Ano ang nangyari noong March 24, 2020?

Ito ang unang buong session pagkatapos ng anunsyo ng Fed tungkol sa unlimited-QE: nag-gap ang SPY ng +5.4% sa open at nagsara ng +9.5% — ito ang #3 pinakamalaking single-day gain sa 5613 sessions na sakop ng aming minute tape, pumapangalawa lamang sa dalawang araw noong October 2008.

Ano ang inanunsyo ng Fed noong March 23, 2020?

Open-ended purchases ng Treasury at mortgage-backed securities — "sa mga halagang kinakailangan" — kasama ang PMCCF at SMCCF, ang mga unang facility nito para sa pagbili ng corporate bonds, at isang revived TALF para sa consumer credit. Inilabas ang statement nang 8:00 am ET, bago ang open; nagsara pa rin ang SPY sa araw na iyon sa bear-market low nito.

Noong March 23, 2020 ba ang bottom ng COVID crash?

Oo, base sa closing price: ang low close ng SPY na $222.51 ay naitala noong March 23, ilang oras matapos ang anunsyo ng Fed. Hindi na ito muling nabalikan — ang pinakamababang close pagkatapos nito ay nangyari noong 2020-03-24, 9.5% sa itaas ng bottom.

Kailan nabawi ng stock market ang pre-COVID high nito?

Unang nagsara ang SPY sa itaas ng all-time-high close nito noong February 19, 2020 noong 2020-08-18, 103 trading sessions matapos ang bottom — isang 181-day round trip, kumpara sa 1983 araw para sa katulad na paglalakbay ng 2008 crash.

Maaari ka bang bumili pagkatapos ng balita at kumita pa rin nang malaki?

Nag-gap ang open ng +5.4% bago nagsimula ang regular trading, at patuloy na tumaas ang presyo sa araw na iyon — ang bawat entry pagkatapos nito ay mas mahal kaysa sa naunang close, at nanatili pa ring malayo sa kinalalagyan ng market noong August 2020 recovery.

Mga nota sa data
  • Ang mga close ay regular-session (9:30 am-4:00 pm ET) na huling prints mula sa minute tape; maaaring magkaiba ito ng ilang cents sa official auction closes.
  • Ang mga recovery date ay price-only; ang total-return measure (dividends reinvested) ay mas mabilis na nakakabawi base sa konstruksyon nito.
  • Ang 10-year yield ay kasama sa daily series ng Treasury sa mga trading date; ang basis points ay hundredths ng isang percentage point.
  • Ang sample ng rank panel ay nagsisimula noong 2003-09-10 — ang "since 2003" sa pahinang ito ay tumutukoy sa window na iyon, hindi sa lahat ng recorded market history.

Ang bawat panel sa itaas ay isang stored, versioned query mula sa historical tape — i-expand ang SQL para makita ang bawat measurement. Gusto mong maranasan ang araw na ito sa halip na basahin lang? Isa ito sa mga playable scenarios sa Strasmore Labs trading simulator.

#market history#covid rally#bull markets#federal reserve#spy