Analisi del crash di mercato del 24 marzo 2020
Analisi dettagliata del crash e della corsa alla liquidità del 24 marzo 2020. Focus su pacchetti Fed, settori e dinamiche del 10-year Treasury.
Il 23 marzo 2020, la Federal Reserve ha annunciato acquisti di asset illimitati — QE senza un limite prestabilito — oltre a una misura mai adottata prima: programmi per l'acquisto di corporate bond. Il 24 marzo 2020 è stata la risposta del mercato: il rally stimolato dal COVID, uno dei maggiori incrementi azionario statunitense in una singola giornata mai registrati, e — visibile solo a posteriori — il secondo giorno di un nuovo bull market. Il minimo di mercato era stato già raggiunto nel pomeriggio prima dell'annuncio.
Il crollo prima dell'inversione
Il crollo stesso ha una sua pagina dedicata; qui è riportato il documento su cui si basa questo articolo — ogni sessione dal massimo storico al minimo, con il rendimento del 10-year Treasury espresso in basis points:
L'esatto SQL dietro ogni 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_dateDalla chiusura del massimo storico a $338.31 in 2020-02-19, SPY è sceso a $222.51 entro 2020-03-23 — un drawdown del -34.2%, con ogni sessione del declino riportata nelle righe 24 del pannello.
La colonna dei rendimenti è l'elemento chiave. Attraverso 2020-03-09 il rendimento del 10-year è crollato da 156 basis points al record di allora di 54 — il classico flight to safety, con i capitali che escono dalle azioni per spostarsi sui bond. Successivamente il pattern si è interrotto: entro 2020-03-18 il rendimento era più che raddoppiato arrivando a 118 basis points, mentre il drawdown di SPY si è accentuato passando da -18.9% a -28.8%. La caduta simultanea di azioni e Treasuries è la firma delle vendite forzate — i possessitori che aumentano la liquidità vendendo qualsiasi asset abbia ancora domanda. Entro metà marzo la crisi riguardava la struttura stessa del credito, non il prezzo delle azioni.
Cosa ha effettivamente annunciato la Fed — e cosa non ha funzionato
I tagli dei tassi erano già stati tentati. La sequenza temporale, con ogni voce leggibile nel pannello sopra:
- 2020-03-03 — un taglio d'emergenza dei tassi di mezzo punto, il primo taglio tra una riunione e l'altra dal 2008. SPY ha chiuso a $300.34, -11.2% sotto il massimo, e il calo è continuato.
- 15 marzo, domenica — i tassi sono stati azzerati insieme a un programma di acquisto di asset da 700 miliardi di dollari. La sessione successiva, 2020-03-16, ha chiuso -29.2% sotto il massimo di febbraio — tra le peggiori singole sessioni dell'intero crash.
- 23 marzo, ore 8:00 ET — la Fed ha rimosso il limite massimo: gli acquisti di Treasury e mortgage-backed securities sarebbero continuati "per le quantità necessarie", senza limiti temporali. Sono stati introdotti il PMCCF e il SMCCF — le prime facility della Fed per l'acquisto di corporate-bond — e un rilancio del TALF per sostenere il credito al consumo. SPY ha comunque chiuso al minimo del bear market quel pomeriggio.
- 24 marzo — la sessione riportata sotto. Durante la notte, il Congresso si è accordato per il CARES Act di circa 2 trilioni di dollari; è stato firmato il 27 marzo, all'interno del burst di tre giorni documentato più avanti.
Due differenze di progettazione separavano il pacchetto del 23 marzo dai tentativi precedenti. Un programma a dimensione fissa ha una data di fine che un mercato sotto stress può prevedere; "per le quantità necessarie" no. Inoltre, le facility per il corporate hanno inserito un acquirente pubblico direttamente nei mercati del credito dove il plumbing si era bloccato. Stabilire se queste differenze siano state determinanti è una valutazione soggettiva; i dati registrano la sequenza — due escalation, declino continuo, un terzo modello di intervento, e poi la svolta.
La giornata, in un'unica riga
L'esatto SQL dietro ogni 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')Dalla chiusura del 23 marzo di $222.51 — l'ultima chiusura del bear market — SPY ha registrato un gap di +5.4% aprendo a $234.42, ha toccato il minimo di sessione a $233.8 nei primi minuti di negoziazione (09:31 ET) e non è più tornato su quel livello: la chiusura a $243.59 è stata di +9.5% sulla giornata. Un rally il cui minimo registrato nel primo minuto è l'immagine speculare di un crash che chiude sul suo minimo. Una sola riga, tuttavia, appiattisce l'andamento — il tape a mezz'ora sottostante mostra il calo che la sessione ha dovuto assorbire.
L'andamento della sessione
L'esatto SQL dietro ogni 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_timeI dati sono chiari: il trend ha cambiato direzione. Il minimo di $233.8 è stato registrato nel primo minuto di apertura e non è stato più toccato; la componente unidirezionale del movimento è reale. Tuttavia, dopo aver raggiunto i $242.24 nella sessione di mezzogiorno, il prezzo ha perso terreno per due ore. La sessione delle 13:30 si è chiusa a $237.25, mentre quella delle 14:00 ha registrato il minimo pomeridiano a $235.05, il punto in cui la giornata avrebbe potuto trasformarsi in un altro tentativo di rimbalzo fallito. Invece, il calo si è arrestato ben al di sopra del minimo di apertura. L'ultima mezz'ora ha registrato la chiusura più alta della sessione a $243.59, con un volume di 34.7 milioni di azioni: il volume più alto della giornata da 232.4 milioni di azioni, superando persino i 27.3 milioni dell'apertura. Un calo a metà giornata che ha trovato acquirenti, seguito da una chiusura sui massimi con volumi di picco.
Broad rally, or narrow?
An index can be dragged higher by a handful of mega-caps. That is not what this was. Twelve funds — the three major index trackers plus nine S&P sector funds — on the same two closes:
L'esatto SQL dietro ogni 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 DESCAll 12 closed higher. Energy (XLE) led at +16.4%, with industrials (XLI, +12.8%) and financials (XLF, +12.7%) right behind — the most economically-sensitive corners of the market, the ones a shutdown threatens first. The Dow tracker DIA gained 11.3% — the move behind that week's "best day since 1933" headlines, a superlative that belongs to the Dow's longer price history. The smallest gains sat in the classic defensives, consumer staples (XLP, +5.1%) and healthcare (XLV, +7.4%), and the Nasdaq-100's QQQ (+7.7%) trailed SPY's +9.5%. A cyclicals-led, everything-green tape is the opposite shape of a narrow mega-cap squeeze — breadth was the day's signature.
Quanto è stato davvero storico?
"Il giorno più importante dal 1933" è un dato del Dow tratto dai quotidiani di quella settimana. Ecco cosa può verificare il nostro database, limitatamente a quanto effettivamente coperto:
L'esatto SQL dietro ogni 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_sharesDall'inizio di 2003-09-10 — la prima sessione dei nostri dati al minuto — SPY ha registrato 5613 rendimenti giornalieri close-to-close. Il valore di +9.5% del 24 marzo 2020 si posiziona al #3: esattamente 2 sessioni lo hanno superato (2008-10-13, 2008-10-28), entrambe durante il panico di ottobre 2008. La sequenza di tre giorni è ancora più rara: il rialzo del +17.5% dalla chiusura del 23 marzo alla chiusura del 26 marzo presenta 0 guadagni in tre sessioni superiori a qualsiasi altro dato nel campione. Tra tutti gli elementi verificabili dal nostro archivio, nulla eguaglia quel picco.
I volumi raccontano una storia diversa: 232 milioni di azioni SPY rappresentavano 2.86× la media dell'ultimo anno — e solo 1.12× la media delle precedenti 30 sessioni. Rispetto a qualsiasi periodo storico normale, l'attività è stata straordinaria; rispetto alle settimane di crash precedenti, è stata solo un altro giorno all'interno della tempesta. I momenti storici non si annunciano con volumi storici.
L'ondata di tre giorni
L'esatto SQL dietro ogni 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_dateIl trend positivo si è intensificato immediatamente: +9.5% il 24, +1.3% il 25, +5.9% il 26 — una sequenza di tre sessioni che ha annullato settimane di crollo, senza alcun movimento superiore nell'intero campione sopra citato. Il pattern di marzo 2020 richiama intenzionalmente marzo 2009: in entrambi i casi, la risposta politica decisiva è arrivata vicino al minimo, la prima fase di rally è stata violenta e il giorno di massima opportunità appariva — quella mattina — indistinguibile da un altro rimbalzo del bear-market.
Il rally è durato?
In tempo reale, il consenso indicava un "bear-market bounce", e gli scettici avevano le proprie prove: undici giorni prima il mercato aveva già registrato un rally di dimensioni quasi analoghe — da $248.1 su 2020-03-12 a $270.93 su 2020-03-13 — e la sessione successiva si era chiusa a $239.41, la peggiore giornata dell'intero crash. Una singola giornata positiva non prova nulla. Ciò che distingue il 24 marzo è ciò che è accaduto dopo:
L'esatto SQL dietro ogni 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_dateIl retest non si è mai verificato. Dopo il 23 marzo, il minimo di chiusura mai registrato da SPY è stato di $243.59 — il 2020-03-24, proprio il giorno del rally dovuto allo stimulus. Il mercato non si è mai più chiuso entro il 9.5% dal minimo. Il massimo pre-COVID di $338.31 è stato recuperato il 2020-08-18 — 103 sessioni di trading dopo il minimo, un round trip di 181 giorni dal massimo storico al massimo storico. Il confronto con il 2008, calcolato con lo stesso metodo: il picco del 2007-10-09 di SPY non ha registrato un nuovo massimo di chiusura fino al 2013-03-14, 1983 giorni dopo. Due crisi, due velocità, un unico mercato che nel mezzo ha cambiato il proprio metabolismo.
Cosa insegna questa giornata
Tre lezioni da interiorizzare. Primo, il gap ha svolto il compito: gran parte del guadagno della giornata si è accumulata prima dell'apertura — chiunque abbia atteso un ingresso durante l'orario regolare ha pagato tutto il giorno — la meccanica dell'overnight gap alla massima ampiezza. Secondo, il minimo è avvenuto prima della conferma: la chiusura del 23 marzo è stata il punto più basso, visibile come tale solo dopo che sessioni come questa hanno rifiutato di tornare su quel livello. Terzo, la velocità agisce in entrambe le direzioni: la stessa struttura di mercato che ha compresso un drawdown del -34.2% nelle righe del 24 ha compresso il recupero iniziale in tre sessioni. La velocità è una proprietà della struttura del mercato attuale, non dipende da notizie positive o negative.
Gli scettici di quella settimana non erano stolti: la ampiezza, l'esplosione, il retest che non è mai avvenuto — ogni elemento che separa il 24 marzo dai rally falliti è misurabile solo a posteriori. La differenza tra un rally bear-market e un nuovo bull market è invisibile al primo giorno, ma diventa inconfutabile dopo pochi mesi.
FAQ sul rally COVID
Cosa è successo il 24 marzo 2020?
La prima sessione completa dopo l'annuncio della Fed sull'QE illimitato: SPY ha aperto con un gap di +5.4% e ha chiuso a +9.5% — il guadagno giornaliero #3 tra le 5613 sessioni coperte dal nostro minute tape, superato solo da due giorni nell'ottobre 2008.
Cosa ha annunciato la Fed il 23 marzo 2020?
Acquisti illimitati di Treasury e titoli garantiti da mutui — "per le quantità necessarie" — oltre al PMCCF e al SMCCF, le sue prime strutture per l'acquisto di bond corporate, e un rilancio del TALF per il credito al consumo. Il comunicato è stato rilasciato alle 8:00 ET, prima dell'apertura; SPY ha comunque chiuso quel giorno al suo minimo del bear-market.
Il 23 marzo 2020 è stato il minimo del crash COVID?
Sì, in base al prezzo di chiusura: il minimo di chiusura di SPY a $222.51 registrato il 23 marzo, ore dopo l'annuncio della Fed. Quel livello non è mai stato più raggiunto — la chiusura più bassa successiva è avvenuta il 2020-03-24, 9.5% sopra il minimo.
Quando il mercato azionario ha recuperato il massimo pre-COVID?
SPY ha chiuso per la prima volta sopra il suo massimo storico del 19 febbraio 2020 il 2020-08-18, 103 sessioni di trading dopo il minimo — un round trip di 181 giorni, contro i 1983 giorni necessari per il percorso equivalente del crash del 2008.
Si sarebbe potuto comprare dopo la notizia ottenendo comunque buoni rendimenti?
L'apertura ha segnato un gap di +5.4% prima dell'inizio della trading session regolare, e il prezzo ha continuato a salire — ogni ingresso successivo è costato più della chiusura precedente, e si è comunque posizionato molto al di sotto dei livelli raggiunti dal mercato durante il recupero dell'agosto 2020.
Note sui dati
- Le chiusure sono gli ultimi prezzi registrati durante la sessione regolare (9:30 am-4:00 pm ET) dal minute tape; possono differire di pochi centesimi dalle chiusure ufficiali d'asta.
- Le date di recupero si riferiscono solo al prezzo; una misura del total-return (dividendi reinvestiti) recupera prima per costruzione.
- Il rendimento a 10 anni si unisce alla serie giornaliera della Treasury nelle date di trading; i basis point sono centesimi di punto percentuale.
- Il campione del pannello dei ranking parte da 2003-09-10 — "dal 2003" in questa pagina si riferisce a quel periodo, non a tutta la storia di mercato registrata.
Ogni pannello sopra è una query memorizzata e versionata sul tape storico — espandi la SQL per vedere ogni misurazione. Vuoi vivere questa giornata invece di leggerla? È uno degli scenari giocabili nel simulatore di trading di Strasmore Labs.