Marktomslag op 24 maart 2020
Analyse van de crash en de dash for cash op 24 maart 2020, inclusief de Fed package en de impact op de 10-year Treasury yield in basis points.
Op 23 maart 2020 kondigde de Federal Reserve openlopende aankopen van activa aan — QE zonder een vastgesteld limiet — plus een maatregel die zij nog nooit eerder had uitgevoerd: faciliteiten voor de aankoop van corporate bonds. De reactie van de markt volgde op 24 maart 2020: de COVID-stimulans rally, een van de grootste dagelijkse stijgingen van Amerikaanse aandelen ooit genoteerd, en — pas achteraf zichtbaar — de tweede dag van een nieuwe bull market. Het dieptepunt was al bereikt in de middag vóór de aankondiging werd gepubliceerd.
De crash voor de ommekeer
De crash zelf heeft een eigen pagina; dit is de onderbouwing hiervan — elke sessie van het all-time high naar de bodem, met de 10-year Treasury yield in basis points:
De exacte SQL achter elk getal
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_dateVanaf de slotkoers op het all-time high van $338.31 op 2020-02-19, daalde SPY naar $222.51 tegen 2020-03-23 — een -34.2% drawdown, waarbij elke sessie van de daling in de 24 rijen van het paneel staat.
De kolom met de yield is doorslaggevend. Gedurende 2020-03-09 daalde de 10-year yield van 156 basis points naar een toenmalig record van 54 — de klassieke flight to safety, waarbij kapitaal van aandelen naar bonds verschuift. Daarna werd het patroon doorbroken: tegen 2020-03-18 was de yield meer dan verdubbeld naar 118 basis points, terwijl de drawdown van SPY verdiepte van -18.9% naar -28.8%. Het gelijktijdig dalen van aandelen en Treasuries is het kenmerk van gedwongen verkopen — houders die cash genereren door alles te verkopen waar nog een bid op zit. Halverwege maart draaide de crisis om de werking van de creditmarkt zelf, niet om de koers van aandelen.
Wat de Fed daadwerkelijk heeft aangekondigd — en wat niet werkte
Renteverlagingen waren al eerder geprobeerd. De chronologische volgorde, zoals te lezen in het paneel hierboven:
- 2020-03-03 — een noodzakelijke renteverlaging van een half punt, de eerste verlaging tussen twee vergaderingen sinds 2008. SPY sloot op $300.34, -11.2% onder de piek, en de daling zette voort.
- 15 maart, een zondag — de rente werd verlaagd naar nul plus een asset-purchase programma van $700 miljard. De volgende sessie, 2020-03-16, sloot -29.2% onder de piek van februari — een van de slechtste individuele sessies tijdens de gehele crash.
- 23 maart, 08:00 uur ET — de Fed heeft het plafond opgeheven: de aankoop van Treasuries en mortgage-backed securities zal doorgaan "in de benodigde omvang", zonder einddatum. Hierbij kwamen de PMCCF en SMCCF — de eerste corporate-bond-buying facilities van de Fed — en een herleefde TALF ter ondersteuning van consumentenkrediet. SPY sloot die middag nog steeds op de laagste stand van de bear market.
- 24 maart — de onderstaande sessie. Gedurende de nacht bereikte het Congres overeenstemming over de CARES Act van ongeveer twee biljoen dollar; deze werd op 27 maart ondertekend, binnen de driedaagse stijging die verderop wordt vermeld.
Twee ontwerpverschillen onderscheidden het pakket van 23 maart van de eerdere pogingen. Een programma met een vaste omvang heeft een einddatum waar een gestreste markt rekening mee kan houden; "in de benodigde omvang" heeft dat niet. Bovendien plaatsten de corporate facilities een publieke koper direct in de kredietmarkten waar de liquiditeit was opgedroogd. Of deze verschillen doorslaggevend waren, is een kwestie van interpretatie; de marktgegevens registreren enkel de volgorde — twee escalaties, een voortdurende daling, een derde ontwerp, en vervolgens de trendbreuk.
De dag, in één beweging
De exacte SQL achter elk getal
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')Vanaf de slotkoers van $222.51 op 23 maart — de laatste dag van de bear market — maakte SPY een gap van +5.4% naar een opening op $234.42. De koers bereikte de laagste waarde van de sessie op $233.8 in de eerste minuten (09:31 ET) en herstelde daar niet meer van: de dagsluiting op $243.59 was een stijging van +9.5% op die dag. Deze rally, die in de eerste minuut een laagste koers noteerde, is het spiegelbeeld van een crash die op de laagste koers sluit. Eén enkele beweging vlakt het verloop af — de halfuur-tape hieronder laat de daling zien die de sessie moest opvangen.
Het verloop van de sessie
De exacte SQL achter elk getal
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_timeDe markt laat een duidelijk beeld zien: de koersbeweging was eenzijdig. De laagste koers van $233.8 werd in de eerste minuut geregistreerd en is sindsdien niet meer bereikt — de eenzijdige trend was dus reëel. Maar nadat de koers tegen de middag $242.24 bereikte, trad er twee uur lang een correctie op. De bucket van 13:30 sloot op $237.25 en de bucket van 14:00 registreerde de laagste koers van de middag op $235.05 — het moment waarop de dag een mislukte bounce had kunnen worden. In plaats daarvan bleef de koers ver boven de opening laag staan. De laatste half uur zorgde voor de hoogste bucket-sluiting van de sessie op $243.59 met een volume van 34.7 miljoen shares — de hoogste bucket van de dag met een totaal volume van 232.4 miljoen shares, zelfs hoger dan de 27.3 miljoen shares bij de opening. Een middagdip die kopers aantrok, gevolgd door een sluiting op de highs bij een piekvolume.
Brede rally, of smal?
Een index kan omhoog worden getrokken door een handvol mega-caps. Dat was hier niet het geval. Twaalf fondsen — de drie grote index trackers plus negen S&P sectorfondsen — op dezelfde twee sluitingen:
De exacte SQL achter elk getal
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 DESCAlle 12 sloten hoger. Energy (XLE) leidde met +16.4%, gevolgd door industrials (XLI, +12.8%) en financials (XLF, +12.7%) — de meest economisch gevoelige sectoren van de markt, de sectoren die het eerst worden bedreigd door een shutdown. De Dow tracker DIA steeg met 11.3% — de beweging achter de koppen van die week over de "beste dag sinds 1933", een superlatief dat bij de langere prijsgeschiedenis van de Dow hoort. De kleinste winsten werden behaald in de klassieke defensives, consumer staples (XLP, +5.1%) en healthcare (XLV, +7.4%), waarbij de QQQ van de Nasdaq-100 (+7.7%) achterbleef bij de +9.5% van SPY. Een markt waarin alles groen is en die wordt geleid door cyclicals, is het tegenovergestelde van een smalle mega-cap squeeze — de breadth was het kenmerk van de dag.
Hoe historisch was het werkelijk?
"Grootste dag sinds 1933" is een Dow-statistiek uit de kranten van die week. Dit is wat onze eigen tape kan verifiëren, beperkt tot wat deze daadwerkelijk dekt:
De exacte SQL achter elk getal
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_sharesSinds 2003-09-10 — de eerste sessie van onze minute data — heeft SPY 5613 dagelijkse close-to-close returns geregistreerd. De +9.5% van 24 maart 2020 staat op #3: precies 2 sessies waren beter (2008-10-13, 2008-10-28), beide binnen de paniek van oktober 2008. De reeks van drie dagen is nog zeldzamer: de +17.5% run van de close van 23 maart tot de close van 26 maart heeft nergens in de steekproef een grotere winst over drie sessies dan 0. Binnen alles wat deze warehouse kan controleren, komt niets in de buurt van deze explosie.
Het volume vertelt een rustiger verhaal: 232 miljoen SPY shares was 2.86× het gemiddelde van het afgelopen jaar — en slechts 1.12× het gemiddelde van de voorafgaande 30 sessies. Vergeleken met elke normale periode in de geschiedenis was de activiteit buitengewoon; vergeleken met de crash-weken die eraan voorafgingen, was het slechts een normale dag in de storm. Historische wendingen kondigen zich niet aan met historische volumes.
De driedaagse stijging
De exacte SQL achter elk getal
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_dateDe trend zette zich direct voort: +9.5% op de 24e, +1.3% op de 25e, +5.9% op de 26e — een reeks van drie sessies die weken van daling ongedaan maakte. Geen enkele andere reeks in de bovenstaande steekproef was groter. Het patroon van maart 2020 vertoont duidelijke gelijkenissen met maart 2009: in beide gevallen kwam de beslissende beleidsreactie nabij de bodem, was de eerste rally-fase heftig, en leek de dag met de maximale opportunity — die ochtend — niet te onderscheiden van een andere bounce in een bear-market.
Hield de rally stand?
In real time was de consensus dat er sprake was van een "bear-market bounce". Sceptici hadden hun eigen bewijslast: elf dagen eerder had de markt al een rally van bijna deze omvang laten zien — van $248.1 op 2020-03-12 naar $270.93 op 2020-03-13 — en de sessie daarna sloot op $239.41, de slechtste dag van de gehele crash. Eén groene dag bewees niets. Wat 24 maart onderscheidt, is wat er daarna gebeurde:
De exacte SQL achter elk getal
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_dateDe retest bleef uit. Na 23 maart was de laagste slotkoers die de SPY ooit heeft geregistreerd $243.59 — op 2020-03-24, de dag van de stimulus-rally zelf. De markt sloot nooit meer binnen 9.5% van de bodem. Het pre-COVID hoogtepunt van $338.31 werd hersteld op 2020-08-18 — 103 handelsdagen na de bodem, een 181-daagse round trip van het all-time high terug naar het all-time high. De vergelijking met 2008, op dezelfde wijze berekend: de 2007-10-09 piek van de SPY bereikte pas 2013-03-14, 1983 dagen later een nieuw slothoogtepunt. Twee crises, twee snelheden, één markt die daarvoor van metabolisme was veranderd.
Wat deze dag leert
Drie lessen zijn van belang. Ten eerste was de gap de drijvende kracht: een groot deel van de winst van vandaag was al aanwezig vóór de opening — iedereen die wachtte op een instap tijdens de reguliere handelsuren, betaalde de hele dag door — de mechanica van de overnight gap was op maximale amplitude. Ten tweede ging de bodem vooraf aan de bevestiging: de slotkoers van 23 maart was het laagste punt, wat pas zichtbaar werd nadat sessies zoals deze weigerden dit niveau opnieuw te testen. Ten derde werkt snelheid in beide richtingen: dezelfde marktstructuur die een -34.2% drawdown comprimeerde in de 24 rijen hierboven, comprimeerde het initiële herstel in drie sessies. Snelheid is een eigenschap van de marktstructuur van dit tijdperk, niet van goed of slecht nieuws.
De sceptici van die week waren geen dwazen: de breedte, de burst, de retest die nooit kwam — elk bewijs dat 24 maart onderscheidt van de mislukte rallies is alleen met achteraf te meten. Het verschil tussen een bear-market rally en een nieuwe bull market is op de eerste dag onzichtbaar en binnen enkele maanden onmiskenbaar.
COVID rally FAQ
Wat gebeurde er op 24 maart 2020?
De eerste volledige sessie na de aankondiging van de Fed over onbeperkte QE: SPY had een gap om +5.4% bij de opening en sloot met +9.5% — de #3 grootste dagelijkse stijging in de 5613 sessies die onze minute tape dekt, na slechts twee dagen in oktober 2008.
Wat heeft de Fed aangekondigd op 23 maart 2020?
Onbeperkte aankopen van Treasury en mortgage-backed securities — "in de benodigde hoeveelheden" — plus de PMCCF en SMCCF, de eerste faciliteiten voor de aankoop van corporate bonds, en een herstart van het TALF voor consumentenkrediet. De verklaring werd om 8:00 am ET uitgebracht, vóór de opening; SPY sloot die dag nog steeds op de laagste stand van de bear-market.
Was 23 maart 2020 het dieptepunt van de COVID-crash?
Ja, op basis van de slotkoers: de laagste slotkoers van SPY van $222.51 werd geregistreerd op 23 maart, enkele uren na de aankondiging van de Fed. Dit niveau is nooit meer bereikt — de laagste slotkoers daarna vond plaats op 2020-03-24, 9.5% boven het dieptepunt.
Wanneer herstelde de aandelenmarkt naar het hoogtepunt van vóór COVID?
SPY sloot voor het eerst boven het all-time-high slot van 19 februari 2020 op 2020-08-18, 103 handelsdagen na het dieptepunt — een round trip van 181 dagen, tegenover 1983 dagen voor de equivalente beweging tijdens de crash van 2008.
Had u na het nieuws kunnen kopen en nog steeds winst kunnen maken?
De opening had een gap van +5.4% voordat de reguliere handel begon, en de koers bleef stijgen — elke latere instap kostte meer dan de voorgaande slotkoers, en bleef nog steeds ver onder het niveau van het herstel in augustus 2020.
Databemerkingen
- Slotkoersen zijn de laatste prints van de reguliere sessie (9:30 am-4:00 pm ET) uit de minute tape; deze kunnen enkele cents afwijken van de officiële veilingkoersen.
- Hersteldata zijn gebaseerd op prijs alleen; een total-return maatstaf (met herbelegde dividenden) herstelt constructief gezien eerder.
- De 10-year yield wordt toegevoegd aan de dagelijkse Treasury-reeks op handelsdagen; basis points zijn honderdste van een procentpunt.
- De steekproef van het rank-paneel start op 2003-09-10 — "sinds 2003" op deze pagina betekent die periode, niet de volledige geregistreerde markthistorie.
Elk paneel hierboven is een opgeslagen, versioneerde query over de historische tape — breid de SQL uit om elke meting te zien. Wilt u deze dag ervaren in plaats van erover te lezen? Het is een van de speelbare scenario's in de Strasmore Labs trading simulator.