Strasmore Research
Analizy Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-07-24

Krach na rynkach 24 marca 2020

Analiza przebiegu sesji z 24 marca 2020 roku. Omówienie ucieczki do gotówki, pakietów Fed oraz wpływu decyzji na rentowność obligacji skarbowych i sektory.

23 marca 2020 roku Fed ogłosił nieograniczone skup aktywów — QE bez określonego limitu — oraz nowe, dotychczas niespotykane działania: mechanizmy skupu obligacji korporacyjnych. 24 marca 2020 roku rynek zareagował na te decyzje. Nastąpiło odbicie wywołane stymulacją w dobie COVID, co stanowiło jeden z największych jednodniowych wzrostów na rynku akcji w USA w historii. Z perspektywy czasu widać, że był to drugi dzień nowego trendu wzrostowego. Samo dno zostało osiągnięte podczas sesji popołudniowej przed ogłoszeniem decyzji.

Krach przed odwróceniem trendu

Sam krach posiada własną stronę; tutaj znajduje się podstawa tych danych — każda sesja od historycznego szczytu do dołka, wraz z rentownością 10-letnich obligacji skarbowych podaną w punktach bazowych:

ZapytanieSPY: zamknięcia dzienne, drawdown i rentowność 10-letnich obligacji skarbowych — 19 feb – 23 mar 2020
Dokładny kod SQL dla każdej liczby
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

Od zamknięcia na historycznym szczycie na poziomie $338.31 w dniu 2020-02-19, indeks SPY spadł do $222.51 do dnia 2020-03-23 — co stanowiło drawdown o wartości -34.2%, przy czym każda sesja spadków została uwzględniona w 24 wierszach panelu.

Kolumna rentowności stanowi kluczowy wskaźnik. W okresie 2020-03-09 rentowność 10-letnich obligacji skarbowych spadła z 156 punktów bazowych do ówczesnego rekordu wynoszącego 54 — był to klasyczny ucieczka do bezpiecznych przystani, czyli odpływ kapitału z akcji w stronę obligacji. Następnie wzorzec ten uległ przełamaniu: do 2020-03-18 rentowność wzrosła ponad dwukrotnie do 118 punktów bazowych, podczas gdy drawdown indeksu SPY pogłębił się z -18.9% do -28.8%. Jednoczesne spadki akcji oraz obligacji skarbowych są sygnałem wymuszonej sprzedaży — posiadacze aktywów pozyskiwali gotówkę, sprzedając wszystko, co posiadało popyt. Do połowy marca kryzys dotyczył mechanizmów rynku kredytowego, a nie samych cen akcji.

Co faktycznie ogłosił Fed — i co nie przyniosło efektów

Obniżki stóp procentowych zostały już podjęte. Chronologiczna sekwencja, zgodnie z danymi w panelu powyżej:

  • 2020-03-03 — nagła obniżka stóp o pół punktu procentowego, pierwsza między posiedzeniami od 2008 roku. SPY zamknął się na poziomie $300.34, -11.2% poniżej szczytu, a spadki trwały nadal.
  • 15 marca, niedziela — obniżono stopy do zera oraz wprowadzono program skupu aktywów o wartości 700 miliardów USD. Następna sesja, 2020-03-16, zamknęła się -29.2% poniżej lutowego szczytu — była to jedna z najgorszych pojedynczych sesji podczas całego krachu.
  • 23 marca, 8:00 am ET — Fed usunął górny limit: skup obligacji skarbowych oraz papierów wartościowych zabezpieczonych hipoteką będzie kontynuowany „w potrzebnych kwotach”, bez określonego limitu. Wprowadzono mechanizmy PMCCF oraz SMCCF — pierwsze w historii Fed programy skupu obligacji korporacyjnych — oraz reaktywowany TALF wspierający kredyt konsumencki. SPY zamknął się tego popołudnia na dołku bessy.
  • 24 marca — sesja opisana poniżej. W nocy Kongres wypracował porozumienie w sprawie CARES Act o wartości około 2 bilionów USD; ustawa została podpisana 27 marca, w ramach trzydniowego okresu intensywnych działań odnotowanego dalej w tekście.

Pakiet z 23 marca różnił się od wcześniejszych prób dwiema kwestiami projektowymi. Program o stałej skali posiada datę końcową, którą zestresowany rynek może przewidzieć; sformułowanie „w potrzebnych kwotach” nie określa ram czasowych. Ponadto mechanizmy korporacyjne wprowadziły publicznego nabywcę bezpośrednio na rynki kredytowe, gdzie doszło do paraliżu płynności. To, czy te różnice miały kluczowe znaczenie, jest kwestią interpretacji; dane rejestrują jedynie sekwencję — dwa etapy eskalacji, dalszy spadek, trzeci model interwencji, a następnie odwrócenie trendu.

Dzień w jednej linii

ZapytanieSPY: 24 mar 2020 — punkt zwrotny
Dokładny kod SQL dla każdej liczby
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')

Po zamknięciu z dnia 23 marca na poziomie $222.51 — ostatnim zamknięciu w bessie — SPY zaliczył lukę wzrostową o 5.4% i otworzył się na poziomie $234.42. W pierwszych minutach sesji (09:31 ET) odnotowano minimum sesyjne na poziomie $233.8, jednak cena nigdy do niego nie powróciła. Zamknięcie na poziomie $243.59 oznaczało wzrost o 9.5% w ciągu dnia. Jest to rajd, którego minimum w pierwszej minucie stanowi lustrzane odbicie krachu kończącego się na najniższym poziomie. Jedna linia wygładza jednak przebieg — półgodzinne zestawienie poniżej pokazuje osłabienie, które rynek musiał zaabsorbować podczas sesji.

Przebieg sesji

ZapytanieSPY w interwałach 30 min — sesja regulaminowa 24 mar 2020
Dokładny kod SQL dla każdej liczby
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

Analiza wskazuje na jednokierunkowy trend. Minimum na poziomie $233.8 zostało ustanowione w pierwszej minucie i nie zostało ponownie osiągnięte. Po osiągnięciu poziomu $242.24 w południe, cena przez dwie godziny traciła wypracowane zyski. Sesja o 13:30 zamknęła się na poziomie $237.25, natomiast o 14:00 odnotowano najniższy poziom popołudniowy wynoszący $235.05. W tym momencie ryzyko kolejnego nieudanego odbicia było wysokie. Ostatecznie jednak spadki zatrzymały się znacznie powyżej otwarcia. W ostatniej pół godziny odnotowano najwyższe zamknięcie sesji na poziomie $243.59 przy wolumenie 34.7 mln akcji. Był to największy wolumen w dniu o całkowitym obrocie wynoszącym 232.4 mln akcji, przewyższający wolumen z otwarcia wynoszący 27.3 mln akcji. Spadek w południe został wygaszony przez popyt, co doprowadziło do zamknięcia sesji na szczytach przy maksymalnym wolumenie.

Szerokie czy wąskie odbicie?

Wzrost indeksu może być stymulowany przez kilka spółek typu mega-cap. Tym razem tak nie było. Dwanaście funduszy — trzy główne fundusze indeksowe oraz dziewięć funduszy sektorowych S&P — odnotowało te same dwa zamknięcia:

Zapytanie24 mar 2020: szerokość rynku (indeksy i sektory ETF) — wzrosty we wszystkich, najpierw sektory cykliczne
Dokładny kod SQL dla każdej liczby
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

Wszystkie 12 zamknęły się wyżej. Sektor energetyczny (XLE) przewodził wzrostom na poziomie +16.4%, a tuż za nim uplasowały się sektory przemysłowy (XLI, +12.8%) oraz finansowy (XLF, +12.7%) — są to najbardziej wrażliwe gospodarczo segmenty rynku, które najbardziej zagrożone są w przypadku shutdownu. Indeks Dow tracker DIA zyskał 11.3% — był to ruch stojący za nagłówkami o „najlepszym dniu od 1933 roku”, co jest superlatywem należącym do dłuższej historii cenowej Dow. Najmniejsze wzrosty odnotowano w klasycznych sektorach defensywnych: dóbr podstawowej konsumpcji (XLP, +5.1%) oraz ochronie zdrowia (XLV, +7.4%), natomiast QQQ z indeksu Nasdaq-100 (+7.7%) ustąpił wynikom SPY (+9.5%). Szerokie wzrosty napędzane przez spółki cykliczne, gdzie wszystkie notowania są na zielono, stanowią przeciwieństwo wąskiego wzrostu typu mega-cap squeeze — to właśnie szerokość rynku była kluczową cechą tego dnia.

Jak bardzo był to historyczny moment?

„Największy dzień od 1933 roku” to statystyka Dow z gazet z tamtego tygodnia. Oto co może potwierdzić nasz własny rejestr, ograniczając się do zakresu danych:

Zapytanie24 mar 2020 w zestawieniu ze wszystkimi sesjami SPY (minute tape)
Dokładny kod SQL dla każdej liczby
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

Od 2003-09-10 — pierwszej sesji naszych danych minutowych — SPY odnotował 5613 dziennych stóp zwrotu close-to-close. Wynik +9.5% z 24 marca 2020 roku zajmuje #3 miejsce: dokładnie 2 sesji przebiło ten wynik (2008-10-13, 2008-10-28), przy czym obie należały do okresu paniki z października 2008. Trzydniowa sekwencja jest jeszcze rzadsza: wzrost o +17.5% od zamknięcia 23 marca do zamknięcia 26 marca oznacza, że w całym badanym okresie wystąpiły tylko 0 większe zyski w ciągu trzech sesji. W ramach wszystkich danych, które może zweryfikować nasz system, nic nie dorównuje temu gwałtownemu wzrostowi.

Wolumen przedstawia mniej spektakularny obraz: obrót na poziomie 232 milionów akcji SPY stanowił 2.86× średniej z ostatniego roku — i tylko 1.12× średniej z poprzednich 30 sesji. W porównaniu do typowych okresów historycznych aktywność ta była nadzwyczajna; w porównaniu do tygodni krachu poprzedzających te wydarzenia, był to tylko kolejny dzień w samym środku burzy. Historyczne zwroty nie zawsze objawiają się poprzez rekordowe wolumeny.

Trzydniowy wzrost

ZapytanieZamknięcia SPY, 23–26 mar 2020 — trzydniowy wzrost
Dokładny kod SQL dla każdej liczby
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

Trend utrzymał się bezpośrednio: +9.5% dnia 24., +1.3% dnia 25., +5.9% dnia 26. — ta trzysesyjna seria wymazała skutki wielotygodniowych spadków; w powyższym zestawieniu nie odnotowano większego wzrostu. Wzorce z marca 2020 roku wykazują podobieństwo do marca 2009: w obu przypadkach kluczowa reakcja polityki nastąpiła blisko dołka, pierwsza faza odbicia była gwałtowna, a dzień o największych możliwościach inwestycyjnych — tego ranka — był nieodróżnialny od innego odbicia w trendzie spadkowym.

Czy wzrosty utrzymały się?

W czasie rzeczywistym konsensus wskazywał na „odbicie w bessie”, a sceptycy mieli własne argumenty: jedenaście dni wcześniej rynek odnotował już niemal tak duży wzrost — ze $248.1 na 2020-03-12 do $270.93 na 2020-03-13 — a sesja po tamtym wydarzeniu zamknęła się na poziomie $239.41, co było najgorszym dniem całego krachu. Jeden zielony dzień nie stanowił dowodu. To, co odróżnia 24 marca, to to, co nastąpiło później:

ZapytanieCzy utrzymano trend? Brak ponownego testu i dwa zegary odbicia
Dokładny kod SQL dla każdej liczby
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

Ponowne przetestowanie dołków nie nastąpiło. Po 23 marca najniższe zamknięcie SPY wyniosło $243.59 — dnia 2020-03-24, czyli dnia wzrostów wywołanych pakietem stymulacyjnym. Rynek nigdy więcej nie zamknął się w granicach 9.5% od dołka. Szczyt sprzed COVID-19 na poziomie $338.31 został odzyskany 2020-08-18103 sesji handlowych po dołku, co stanowiło 181-dniowy cykl od historycznego szczytu z powrotem do historycznego szczytu. Porównanie do roku 2008, obliczone w ten sam sposób: szczyt SPY na poziomie 2007-10-09 nie został ponownie przebity aż do 2013-03-14, czyli 1983 dni później. Dwa kryzysy, dwa różne tempa, jeden rynek, który w międzyczasie zmienił swój metabolizm.

Wnioski z dzisiejszego dnia

Należy wyciągnąć trzy wnioski. Po pierwsze, kluczową rolę odegrał luk. Większość dzisiejszych wzrostów dokonała się przed otwarciem sesji — każdy, kto czekał na wejście w regularnych godzinach handlu, płacił wysoką cenę przez cały dzień — mechanizm luki nocnej zadziałał z maksymalną amplitudą. Po drugie, dołek wystąpił przed potwierdzeniem: zamknięcie z 23 marca stanowiło poziom minimum, co stało się widoczne dopiero po tym, jak sesje takie jak dzisiejsza nie powróciły do tego poziomu. Po trzecie, dynamika działa w obie strony: ta sama struktura rynku, która skompresowała spadek o -34.2% do poziomów 24 powyżej, skompresowała początkowe odbicie do trzech sesji. Szybkość jest cechą współczesnej infrastruktury rynkowej, a nie wynikiem dobrych lub złych wiadomości.

Sceptycy z tamtego tygodnia nie byli niekompetentni: szerokość rynku, gwałtowność ruchu oraz brak ponownego przetestowania poziomów — każdy dowód odróżniający 24 marca od nieudanych odbić jest mierzalny dopiero po fakcie. Różnica między odbiciem w trendzie spadkowym a nowym trendem wzrostowym jest niewidoczna pierwszego dnia, a staje się oczywista w ciągu kilku miesięcy.

FAQ dotyczące odbicia COVID

Co wydarzyło się 24 marca 2020 roku?

Pierwsza pełna sesja po ogłoszeniu przez Fed nieograniczonego QE: SPY otworzył się luką dodatnią +5.4%, a zamknął na poziomie +9.5% — był to #3 wzrost w ciągu jednego dnia w obrębie 5613 sesji monitorowanych przez nasz system, ustępujący jedynie dwóm dniom w październiku 2008 roku.

Co ogłosił Fed 23 marca 2020 roku?

Nielimitowane zakupy obligacji skarbowych oraz papierów zabezpieczonych hipoteką — „w ilościach niezbędnych” — a także PMCCF i SMCCF, czyli pierwsze w historii mechanizmy zakupu obligacji korporacyjnych, oraz przywrócony program TALF dla kredytów konsumenckich. Komunikat został opublikowany o godzinie 8:00 ET, przed otwarciem rynku; SPY zamknął tego dnia na poziomie minimum dla bessy.

Czy 23 marca 2020 roku był dołkiem krachu COVID?

Tak, biorąc pod uwagę cenę zamknięcia: SPY odnotował najniższe zamknięcie na poziomie $222.51 dnia 23 marca, kilka godzin po ogłoszeniu decyzji przez Fed. Poziom ten nigdy nie został powtórzony — kolejne najniższe zamknięcie nastąpiło 2020-03-24, czyli 9.5% powyżej dołka.

Kiedy rynek akcji odzyskał przed-COVIDowskie szczyty?

SPY po raz pierwszy zamknął się powyżej historycznego szczytu z 19 lutego 2020 roku dnia 2020-08-18, po 103 sesjach handlowych od dołka — był to cykl trwający 181 dni, podczas gdy analogiczny proces w przypadku krachu z 2008 roku trwał 1983 dni.

Czy można było dokonać zakupu po tych wiadomościach i osiągnąć zysk?

Otwarcie nastąpiło z luką dodatnią +5.4% przed rozpoczęciem regularnego handlu, a kurs w ciągu dnia systematycznie rósł — każda kolejna transakcja wymagała wyższej ceny niż poprzednie zamknięcie, a mimo to poziom ten pozostawał znacznie poniżej wartości rynkowych z sierpnia 2020 roku.

Uwagi do danych
  • Ceny zamknięcia to ostatnie transakcje z sesji regularnej (9:30–16:00 ET) z rejestru minutowego; mogą różnić się o kilka centów od oficjalnych cen aukcyjnych.
  • Daty odzyskania szczytów dotyczą wyłącznie cen; wskaźnik całkowitego zwrotu (z reinwestycją dywidend) z natury osiąga szczyt wcześniej.
  • Rentowność 10-letnich obligacji skarbowych jest dołączana do dziennych szeregów czasowych w dniach handlowych; punkty bazowe to setne części punktu procentowego.
  • Próbka w panelu rankingowym zaczyna się od 2003-09-10 — oznaczenie „od 2003” na tej stronie odnosi się do tego konkretnego okna czasowego, a nie do całej historii rynku.

Każdy powyższy panel to zapisane, wersjonowane zapytanie SQL do historycznych danych — rozwiń kod, aby zobaczyć poszczególne pomiary. Chcesz przeżyć ten dzień zamiast tylko o nim czytać? Jest to jeden z dostępnych scenariuszy w symulatorze handlowym Strasmore Labs(https://labs.strasmore.com/g1).

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