Strasmore Research
Mga imbestigasyon Matt ConnorNi Matt Connor · Na-update noong 2026-09-28

COVID Crash 2020: Apat na Halt at Peak-to-Trough

COVID crash noong 2020: nawawala sa tape ang March 9 halt minutes, apat na circuit breaker sa walong araw, at peak-to-trough map ng SPY.

Umabot ang COVID crash noong 2020 sa S&P 500 mula sa record close noong February 19 hanggang sa -34.2% peak-to-trough loss sa loob ng 23 trading days. May apat na market-wide circuit-breaker halt sa panahong ito, ang unang ganitong serye mula noong 1997. Muling sinusundan ng page na ito ang buong pangyayari batay sa tape: ang mapa ng crash, ang March 9 halt session minuto bawat minuto, kasama ang mga minutong wala sa data na pinakamalinaw na ebidensya sa page, ang mga pangalang pinakamalaking bumagsak, at ang naging galaw ng Treasuries at options tape. Ang bawat numero ay mula sa stored query; i-expand ang anumang panel para makita ang SQL.

Ang buong crash, sa isang row

Bago ang sikat na single day, naroon ang kabuuang larawan. Isang query sa daily regular-session closes ng SPY ang nagtukoy sa peak, trough, bilis ng pagbaba, at recovery. Kasama rin ang parehong measurement run para sa 2008 bear market bilang paghahambing.

QueryAng COVID crash, mula peak hanggang trough hanggang recovery: daily closes ng SPY, isang row
peak datepeak closetrough datetrough closedecline %sessions peak to troughcalendar dayssessions to -30GFC 2008 sessions to -30recovery datesessions trough to recovery
2020-02-19338.312020-03-23222.51-34.22333222502020-08-18103
Ang eksaktong SQL sa likod ng bawat numero
WITH dailies AS (
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS d,
        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 c
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2020-02-01 00:00:00') AND window_start < toDateTime('2020-09-01 00:00:00')
    GROUP BY d
),
peak AS (SELECT argMax(d, (c, -toInt32(d))) AS pd, max(c) AS pc FROM dailies WHERE d < toDate('2020-03-01')),
trough AS (SELECT argMin(d, (c, toInt32(d))) AS td, min(c) AS tc FROM dailies WHERE d < toDate('2020-04-01')),
gfc AS (
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS d,
        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 c
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2007-06-01 00:00:00') AND window_start < toDateTime('2009-01-01 00:00:00')
    GROUP BY d
),
gpeak AS (SELECT argMax(d, (c, -toInt32(d))) AS pd, max(c) AS pc FROM gfc WHERE d < toDate('2008-01-01'))
SELECT
    toString((SELECT pd FROM peak)) AS peak_date,
    round((SELECT pc FROM peak), 2) AS peak_close,
    toString((SELECT td FROM trough)) AS trough_date,
    round((SELECT tc FROM trough), 2) AS trough_close,
    round(((SELECT tc FROM trough) / (SELECT pc FROM peak) - 1) * 100, 1) AS decline_pct,
    countIf(d > (SELECT pd FROM peak) AND d <= (SELECT td FROM trough)) AS sessions_peak_to_trough,
    dateDiff('day', (SELECT pd FROM peak), (SELECT td FROM trough)) AS calendar_days,
    countIf(d > (SELECT pd FROM peak) AND d <= (SELECT min(d) FROM dailies WHERE c <= 0.7 * (SELECT pc FROM peak))) AS sessions_to_minus_30,
    (SELECT countIf(d > (SELECT pd FROM gpeak) AND d <= (SELECT min(d) FROM gfc WHERE c <= 0.7 * (SELECT pc FROM gpeak))) FROM gfc) AS gfc_2008_sessions_to_minus_30,
    toString((SELECT min(d) FROM dailies WHERE d > (SELECT td FROM trough) AND c >= (SELECT pc FROM peak))) AS recovery_date,
    countIf(d > (SELECT td FROM trough) AND d <= (SELECT min(d) FROM dailies WHERE d > (SELECT td FROM trough) AND c >= (SELECT pc FROM peak))) AS sessions_trough_to_recovery
FROM dailies
Subukan mo mismo

Ang peak close ng SPY ay $338.31 noong 2020-02-19. Ang trough close na $222.51 noong 2020-03-23 ay -34.2% na mas mababa rito. Isa itong bear market na naganap sa loob lamang ng 23 trading sessions o 33 calendar days. Makikita rin sa parehong row ang batayan ng madalas banggitin na claim na ito ang “pinakamabilis na thirty-percent drawdown na naitala”: unang bumaba ang close ng SPY nang 30% mula sa peak makalipas lamang ang 22 sessions. Ang 2008 bear market, na sinukat sa parehong paraan mula sa peak close noong October 2007, ay nangailangan ng 250 sessions para mawalan ng parehong 30%. Ang umabot nang humigit-kumulang isang taon noong 2008 ay nangyari sa loob lamang ng halos isang buwan noong 2020.

Ang kronolohiya ng crash, kung saan ang bawat numero ay mula sa mga panel sa page na ito:

  • February 19, 2020, ang record close ng SPY na $338.31.
  • March 9, ang unang market-wide circuit breaker mula noong 1997; bumaba ang close ng SPY nang -7.7%. May minute-by-minute na tala sa ibaba.
  • March 12, 16, at 18, tatlo pang Level-1 halt. Bumaba ang close noong March 16 nang -11.6%, ang pinakamalalang single session ng crash.
  • March 23, ang closing low: $222.51, o -34.2% mula sa peak.
  • March 24, ang pagliko ng trend. Ang stimulus rally noong March 24 ang nagdala sa tape na iyon.
  • 2020-08-18, muling nagsara ang SPY sa itaas ng February peak, 103 sessions matapos ang low.

Marso 9, 2020: ang session na nag-trigger sa circuit breaker

Nakabatay sa S&P 500 ang mga circuit breaker na sumasaklaw sa buong merkado. Kaya binabasa ng panel na ito ang paghinto sa pamamagitan ng SPY, ang S&P 500 ETF, sa halip na ibang proxy. Noong nakaraang weekend, nagsabay ang muling pagpresyo dahil sa pandemya at ang shock sa supply ng langis (higit pa tungkol dito sa ibaba). Dahil dito, hindi talaga nagbukas nang maayos ang merkado.

QuerySPY noong March 9, 2020: ang circuit-breaker session, may resibo
prior closeRTH opengap %halt first missing EThalt missing minutesRTH lowlow ETRTH closeday change %day shares mRTH minute bars
297.42275.3-7.409:3514273.4514:44274.4-7.7304.6376
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-06 00:00:00') AND window_start < toDateTime('2020-03-09 04:00:00')
    ) AS prior_rth_close,
    (
        SELECT (formatDateTime(toTimeZone(addMinutes(prev_bar, 1), 'America/New_York'), '%H:%i'), gap_minutes - 1)
        FROM (
            SELECT
                lagInFrame(window_start) OVER (ORDER BY window_start ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_bar,
                dateDiff('minute', prev_bar, window_start) AS gap_minutes
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE ticker = 'SPY'
              AND window_start >= toDateTime('2020-03-09 04:00:00') AND window_start < toDateTime('2020-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
        )
        WHERE prev_bar > toDateTime('2020-03-09 00:00:00')
        ORDER BY gap_minutes DESC
        LIMIT 1
    ) AS halt_gap
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,
    halt_gap.1 AS halt_first_missing_et,
    halt_gap.2 AS halt_missing_minutes,
    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,
    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-09 04:00:00') AND window_start < toDateTime('2020-03-09 23:59:00')
Subukan mo mismo

Dalawang numero muna. Una, ang gap: nagbukas ang SPY sa $275.3, -7.4% na mas mababa kaysa sa Friday close na $297.42. Sa loob ng unang ilang minuto, umabot sa 7% Level-1 threshold ang pagbaba ng S&P 500. Ikalawa, at mas mabuti: 376 regular-session minute bars sa halip na karaniwang 390. Huminto ang tape pagkalipas ng 9:34 am. Simula 09:35 ET, 14 magkakasunod na minuto ang walang naitalang bar. Walang na-trade saanman. Ang puwang sa data ang mismong circuit breaker. Nagsara ang session sa $274.4, -7.7% na mas mababa, sa 304.6 milyong shares.

Ang hugis ng isang sesyon na itinigil

QuerySPY kada kalahating oras: regular session noong March 9, 2020, closing cross print sa huling kalahating oras
ET timebucket closebucket lowshares m
09:30279.93273.517.4
10:00280.72275.623.4
10:30278.61275.519.1
11:00281.03275.517.2
11:30282.69280.0619.1
12:00281.01280.9517.2
12:30279.71275.9513.4
13:00278.59278.2411.5
13:30275.84275.3419.4
14:00274.95274.0621.2
14:30276.59273.4525.9
15:00277.9275.5524.5
15:30274.4274.3750.2
Ang eksaktong SQL sa likod ng bawat numero
SELECT
    b.et_time                                                                   AS et_time,
    b.bucket_close                                                              AS bucket_close,
    b.bucket_low                                                                AS bucket_low,
    round((b.bar_shares + if(b.et_time = '15:30', p.print_shares, 0)) / 1e6, 1) AS shares_m
FROM
(
    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,
        toFloat64(sum(volume)) AS bar_shares
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2020-03-09 04:00:00') AND window_start < toDateTime('2020-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
) AS b
CROSS JOIN
(
    SELECT toFloat64(maxIf(size, has(conditions, 8))) AS print_shares
    FROM global_markets.stocks_trades
    WHERE ticker = 'SPY'
      AND sip_timestamp >= toDateTime('2020-03-09 20:00:00', 'UTC')
      AND sip_timestamp <  toDateTime('2020-03-09 20:15:00', 'UTC')
) AS p
ORDER BY et_time
Subukan mo mismo

Nasa opening bucket na agad ang crash, halt, at reopening: ang low nitong $273.5 ay ilang sentimo lamang ang layo sa low ng buong araw na $273.45, at ang afternoon print noong 14:44 ET ay muling sumubok sa level ng umaga. Pagkatapos ng reopening, halos hindi gumalaw ang tape: ang bawat kalahating-oras na closing price ay nasa loob lamang ng ilang dolyar mula sa reopening price, at nangyari na sa mga unang minuto ng trading ang buong pinsala sa araw na iyon. Pareho rin ang ipinakita ng volume sa kabaligtarang direksiyon: ang huling kalahating oras, na may 50.2 milyong shares, ang may pinakamalaking volume sa araw habang nagtawiran ang closing flows. Idinisenyo ang circuit breakers upang lumikha ng ganitong hugis: pigilan ang tuloy-tuloy na pagbagsak, pilitin ang isang reopening auction, at ipagpatuloy ang continuous trading sa bagong repriced na level. Permanenteng naka-embed na ngayon ang mekanismong ito sa orasan ng merkado.

Apat na trading halt sa walong session

March 9 pa lamang ang una.

QueryAng apat na circuit-breaker session noong March 2020: close, change, volume ng SPY
SesyonPagsasara (USD)Pagbabago (%)shares m
2020-03-09274.4-7.7304.6
2020-03-12248.1-9.6389.3
2020-03-16239.41-11.6291.5
2020-03-18241.01-5.2324.7
Ang eksaktong SQL sa likod ng bawat numero
SELECT
    toString(et_date) AS session,
    close_usd,
    change_pct,
    shares_m
FROM (
    SELECT et_date, close_usd, shares_m,
           round((close_usd / lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1) * 100, 1) AS change_pct
    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-06 00:00:00') AND window_start < toDateTime('2020-03-19 00:00:00')
        GROUP BY et_date
    )
)
WHERE toString(et_date) IN ('2020-03-09', '2020-03-12', '2020-03-16', '2020-03-18')
ORDER BY et_date
Subukan mo mismo

Na-trigger din ang Level-1 circuit breaker noong March 12 (nagsara sa -9.6%), March 16 (nagsara sa -11.6% sa $239.41, ang pinakamalaking one-day percentage drop ng S&P mula noong 1987), at March 18 (na-halt sa intraday trading at nagsara sa -5.2%). Apat na market-wide halt sa loob ng walong trading day, matapos ang dalawampu’t tatlong taon na walang ganito. Pansinin kung ano ang hindi nangyari: Level 1, ang 7% tier, ang na-trigger sa bawat pagkakataon. Hindi kailanman naabot ang 13% at 20% tiers. Kahit noong March 16, bumagal ang cascade matapos ang halt at nagtapos ang session sa loob ng Level-2 line.

Sino ang pinakamalaking bumagsak

Itinatago ng isang index number ang dispersion sa loob nito. Kapag isinagawa ang parehong arithmetic batay sa daily close sa ilang kinatawang large-cap, makikita kung saan talaga tumama ang crash, kapwa noong March 9 at sa buong pagbaba mula February 19 hanggang March 23.

QueryMga galaw noong March 9 at sa full crash: cruise, airline, energy, bank, tech, staples kumpara sa SPY
tickerMar9 (%)Pagbagsak (%)
CCL-19.9-72.3
UAL-10.4-66.9
XOM-12.2-47.9
JPM-13.7-42.6
SPY-7.7-34.2
AAPL-7.9-31
WMT-0.1-2.9
Ang eksaktong SQL sa likod ng bawat numero
WITH dailies AS (
    SELECT
        ticker,
        toDate(toTimeZone(window_start, 'America/New_York')) AS d,
        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 c
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('UAL', 'CCL', 'XOM', 'JPM', 'AAPL', 'WMT', 'SPY')
      AND window_start >= toDateTime('2020-02-18 00:00:00') AND window_start < toDateTime('2020-03-25 00:00:00')
    GROUP BY ticker, d
)
SELECT
    ticker,
    round((anyIf(c, d = toDate('2020-03-09')) / anyIf(c, d = toDate('2020-03-06')) - 1) * 100, 1) AS mar9_pct,
    round((anyIf(c, d = toDate('2020-03-23')) / anyIf(c, d = toDate('2020-02-19')) - 1) * 100, 1) AS crash_pct
FROM dailies
GROUP BY ticker
ORDER BY crash_pct ASC
Subukan mo mismo

Ang pinakamalaking tinamaan sa panel, CCL (Carnival, ang cruise operator), ay bumagsak ng -19.9% noong March 9 lamang at ng -72.3% mula peak hanggang trough. Bumaba ang United Airlines ng -66.9% sa buong crash; ang ExxonMobil ng -47.9%; at ang JPMorgan ng -42.6%. Kumpara sa mga ito, halos banayad ang -34.2% ng SPY. Bumagsak ang Apple nang halos kasabay ng merkado, sa -31%, habang ang Walmart—na nagbebenta ng groceries at essentials at nanatiling bukas sa panahon ng lockdown—ay nagtapos sa parehong window sa -2.9% lamang. Muling itinakda ng merkado ang valuation ng travel at energy para sa mundong tumigil ang galaw; halos hindi gumalaw ang staples.

Maikling paliwanag sa oil-price war

Nararapat ng isang talatang paliwanag ang energy row sa itaas dahil kabilang ang “oil-price war” sa kabilang bahagi ng kuwento noong March 9. Natapos nang walang kasunduan ang production talks ng OPEC+ sa pagitan ng Saudi Arabia at Russia noong Friday, March 6, 2020. Pagsapit ng weekend, ibinaba ng Saudi Arabia ang official selling prices nito at inanunsyo ang planong dagdagan ang output sa panahong nagsisimula nang huminto ang travel demand sa buong mundo. Supply shock ito na nadagdagan ng demand shock. Parehong dala ng equity open noong Monday ang dalawang shock. Makikita ang resulta sa panel sa itaas: bumagsak ang ExxonMobil ng -12.2% noong Monday, kumpara sa -7.7% ng SPY.

Ang paglipat sa safety, at ang linggong nabaligtad ito

Kalahati lamang ng kuwento ang equities. Ang kalahati ay ang Treasury market, kung saan umabot sa record ang klasikong paglipat sa safety, at pagkatapos, sa loob ng isang pambihirang linggo, ay nabaligtad.

Query10-year at 3-month Treasury yields sa buong crash, daily closes
31 rows (showing 20)
Petsa10-year (%)3-month (%)
2020-02-181.551.58
2020-02-191.561.58
2020-02-201.521.58
2020-02-211.461.56
2020-02-241.381.53
2020-02-251.331.53
2020-02-261.331.53
2020-02-271.31.45
2020-02-281.131.27
2020-03-021.11.13
2020-03-031.020.95
2020-03-041.020.72
2020-03-050.920.62
2020-03-060.740.45
2020-03-090.540.33
2020-03-100.760.44
2020-03-110.820.42
2020-03-120.880.33
2020-03-130.940.28
2020-03-160.730.24
Ang eksaktong SQL sa likod ng bawat numero
SELECT
    toString(date) AS date,
    round(yield_10_year, 2) AS ten_year_pct,
    round(yield_3_month, 2) AS three_month_pct
FROM global_markets.treasury_yields
WHERE date >= '2020-02-18' AND date <= '2020-03-31'
  AND isNotNull(yield_10_year)
ORDER BY date
Subukan mo mismo

Ang 10-year yield ay nasa 1.56% noong peak ng equities noong February 19. Pagsapit ng March 9, ang halt session, nagsara ito sa 0.54%, isang all-time low. Tinanggap ng mga buyer ang kalahating porsiyento kada taon sa loob ng isang dekada kapalit ng safety. Pagkatapos, nabaligtad ang pattern: pagsapit ng March 18, tumaas ang 10-year yield sa 1.18% habang patuloy na bumabagsak ang equities. Ito ang tinawag na “dash for cash,” isang linggo kung kailan ipinagbili ng mga fund, kumpanya, at foreign holder ang anumang liquid, kabilang ang Treasuries, upang makalikom ng dollars. Samantala, nagsara ang 3-month bill sa 0.02% noong araw na iyon, at naka-pin sa zero ang cash equivalents. Kapag sabay na bumabagsak ang pinakamaligtas at pinakamapanganib na asset, liquidity mismo ang binibili. Ang yield curve ay permanenteng nagtatala ng episode na ito sa kasaysayan nito.

Ano ang ipinapakita ng options tape

Ang listed options ng SPY, ang pangunahing venue ng merkado para sa hedging, ay nagtala rin ng sarili nitong senyales ng panic. Mahalaga ang timing nito.

QuerySPY options: puts kumpara sa calls na na-trade, March 2–13, 2020 (millions of contracts)
SesyonPut contracts (M)Call contracts (M)Put/Call ratio
2020-03-023.742.541.47
2020-03-033.142.241.4
2020-03-043.062.271.35
2020-03-053.141.821.73
2020-03-064.642.381.95
2020-03-094.352.381.83
2020-03-103.612.41.5
2020-03-113.752.441.54
2020-03-124.533.431.32
2020-03-134.633.271.41
Ang eksaktong SQL sa likod ng bawat numero
SELECT
    toString(toDate(toTimeZone(sip_timestamp, 'America/New_York'))) AS session,
    round(sumIf(toFloat64(size), substring(ticker, 12, 1) = 'P') / 1e6, 2) AS put_contracts_m,
    round(sumIf(toFloat64(size), substring(ticker, 12, 1) = 'C') / 1e6, 2) AS call_contracts_m,
    round(sumIf(toFloat64(size), substring(ticker, 12, 1) = 'P') / sumIf(toFloat64(size), substring(ticker, 12, 1) = 'C'), 2) AS put_call_ratio
FROM global_markets.options_trades
WHERE ticker >= 'O:SPY2' AND ticker < 'O:SPY3'
  AND sip_timestamp >= toDateTime('2020-03-02 00:00:00') AND sip_timestamp < toDateTime('2020-03-14 00:00:00')
GROUP BY session
ORDER BY session
Subukan mo mismo

Umabot sa 1.95 ang put/call volume ratio noong Biyernes, March 6, bago ang halt session. Halos two puts ang na-trade sa bawat call. Noong March 9 mismo, 4.35 million puts ang na-trade kumpara sa 2.38 million calls, para sa ratio na 1.83. Pagsapit ng March 12, isang -9.6% session, bumaba ang ratio sa 1.32 habang dumami ang call volume kasabay ng puts. Pinakamalakas ang put skew sa simula ng cascade, hindi sa pinakailalim nito. Maagang bumili ng protection ang mga investor, habang ang mas malalaking pagbaba sa mga sumunod na araw ay naganap sa mas two-sided na options tape.

Paano aktuwal na gumagana ang market-wide halt

Ang mechanics nito ay bihirang gamitin kaya madaling makalimutan. Nakabatay ang market-wide breakers sa pagbaba ng S&P 500 mula sa nakaraang closing. Kapag umabot sa 7% (Level 1) o 13% (Level 2), nagti-trigger ang bawat isa ng 15-minute halt kung mangyari ito bago mag-3:25 pm ET. Kapag umabot sa 20% (Level 3), tuluyang nagtatapos ang session. Habang may halt, walang nagta-trade sa alinmang exchange. Naka-queue ang mga order para sa reopening auction, na nagtitipon sa naipong buying at selling interest sa iisang presyo, gaya ng opening auction tuwing umaga. Nagmula ang disenyo sa mga pangyayari matapos ang flash crash noong 2010, na nagpakitang masyadong maluwag ang mga dating threshold para mag-trigger kahit sa isang tunay na cascade.

Ang March 2020 ang unang live test ng disenyong ito, at hanggang ngayon ay ito pa rin ang nag-iisa. Makikita ang resulta sa mga panel sa itaas: apat na Level-1 halt, bawat isa ay sinundan ng maayos na reopening. Hindi kailanman umabot sa Level 2 o Level 3, at gumana ang merkado sa bawat isa sa 23 session ng pinakamabilis na malaking drawdown sa kasaysayan ng index. Nanatili ang mga patakaran pagkatapos nito. Ang parehong 7/13/20 threshold, na nakabatay sa S&P 500, ay umiiral pa rin ngayon. Yumuko ang system, ngunit nanatiling gumagana ang market plumbing.

Mga FAQ tungkol sa COVID crash

Ano ang nag-trigger sa circuit breaker noong March 9, 2020?

Bumagsak ang S&P 500 ng 7% mula sa nakaraang closing price nito. Naabot nito ang Level-1 market-wide threshold sa mga unang minuto ng trading. Pansamantalang itinigil ang trading sa buong merkado nang 15 minuto, pagkatapos ay muling binuksan sa pamamagitan ng auction. Makikita ang halt sa minute tape ng pahinang ito bilang 14 magkakasunod na nawawalang bar na nagsimula noong 09:35 ET.

Gaano kalaki ang ibinagsak ng stock market sa COVID crash?

Batay sa daily closes ng SPY, -34.2%, mula $338.31 noong February 19, 2020 hanggang $222.51 noong March 23, 2020, sa loob ng 23 trading sessions.

Ilang circuit breaker ang na-trigger noong March 2020?

Apat na market-wide Level-1 halt: noong March 9, 12, 16, at 18. Ito ang mga unang ganitong halt mula noong October 1997.

Na-trigger ba noong 2020 ang Level 2 o Level 3 circuit breaker?

Hindi. Lahat ng apat na halt noong 2020 ay Level 1 (7%). Wala pang market-wide Level-2 (13%) o Level-3 (20%) halt na na-trigger sa ilalim ng kasalukuyang disenyo, kahit noong March 16, ang pinakamasamang session ng crash sa -11.6%.

Lubos bang nakabawi ang merkado mula sa COVID crash?

Oo. Nagsara ang SPY nang mas mataas sa peak nito noong February 19, 2020 noong 2020-08-18, 103 trading sessions pagkatapos ng low noong March 23. Isa ito sa pinakamabilis na full recovery mula sa bear market na ganito kalalim.


Ang bawat panel sa itaas ay isang stored, versioned query mula sa historical tape. I-expand ang SQL para makita ang bawat measurement. Gusto mo bang maranasan ang araw na ito sa halip na basahin lamang? Isa ito sa mga playable scenario sa Strasmore Labs trading simulator.

#market history#covid crash#circuit breakers#spy