Análisis del mercado el 24 de marzo de 2020
Revisión detallada de la volatilidad del 24 de marzo de 2020, el impacto del paquete de la Fed, el spread de los bonos y el inicio del rally alcista.
El 23 de marzo de 2020, la Reserva Federal anunció compras de activos sin límite —QE sin un tope establecido— además de una medida inédita: facilidades para comprar bonos corporativos. El 24 de marzo de 2020 fue la respuesta del mercado: el rally de estímulo por el COVID, uno de los mayores incrementos en acciones de EE. UU. en un solo día en la historia y —visible solo en retrospectiva— el segundo día de un nuevo mercado alcista. El punto más bajo se alcanzó al cierre de la tarde antes de que se publicara el anuncio.
La caída antes del cambio
La caída en sí tiene su propia página; aquí está el registro que la sustenta — cada sesión desde el máximo histórico hasta el fondo, con el rendimiento del Treasury a 10 años a la par en puntos básicos:
El SQL exacto detrás de cada cifra
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_dateDesde el cierre en el máximo histórico de $338.31 el 2020-02-19, el SPY cayó a $222.51 para el 2020-03-23 — un drawdown del -34.2%, con cada sesión del descenso incluida en las filas 24 del panel.
La columna de rendimientos es la clave. Durante el 2020-03-09, el rendimiento a 10 años colapsó de 156 puntos básicos a un récord de entonces de 54 — la clásica huida hacia la seguridad, con el dinero saliendo de las acciones hacia los bonos. Luego el patrón se rompió: para el 2020-03-18 el rendimiento se había más que duplicado hasta los 118 puntos básicos, mientras el drawdown del SPY se profundizó de -18.9% a -28.8%. La caída simultánea de acciones y Treasuries es la firma de las ventas forzadas — los tenedores buscan liquidez vendiendo cualquier activo que aún tenga demanda. Para mediados de marzo, la crisis se centraba en la estructura del crédito, no en el precio de las acciones.
Lo que la Fed anunció realmente — y lo que no funcionó
Ya se habían intentado recortes de tasas. La secuencia cronológica, con cada entrada legible en el panel superior:
- 2020-03-03 — un recorte de emergencia de medio punto, el primer recorte entre reuniones desde 2008. El SPY cerró en $300.34, -11.2% por debajo del máximo, y la caída continuó.
- 15 de marzo, domingo — las tasas bajaron a cero junto con un programa de compra de activos de $700 mil millones. En la siguiente sesión, 2020-03-16, cerró -29.2% por debajo del máximo de febrero — una de las peores sesiones individuales de todo el crash.
- 23 de marzo, 8:00 am ET — la Fed eliminó el límite: las compras de Treasuries y valores respaldados por hipotecas continuarían "en las cantidades necesarias", sin un límite definido. Se adjuntaron el PMCCF y el SMCCF — las primeras facilidades de compra de bonos corporativos de la Fed — y un TALF reactivado para respaldar el crédito al consumo. El SPY cerró esa tarde en el mínimo del mercado bajista.
- 24 de marzo — la sesión a continuación. Durante la noche, el Congreso se unificó en el CARES Act de aproximadamente $2 billones; se firmó el 27 de marzo, dentro del periodo de tres días detallado más adelante.
Dos diferencias de diseño separaron el paquete del 23 de marzo de los intentos anteriores. Un programa de tamaño fijo tiene una fecha de finalización que un mercado estresado puede prever; "en las cantidades necesarias" no la tiene. Además, las facilidades corporativas colocaron a un comprador público directamente dentro de los mercados de crédito donde la liquidez se había detenido. Determinar si esas diferencias fueron lo determinante es una cuestión de juicio; el registro muestra la secuencia: dos escaladas, una caída continua, un tercer diseño y luego el cambio de tendencia.
El día, en una sola línea
El SQL exacto detrás de cada cifra
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')Desde el cierre del 23 de marzo de $222.51 —el último cierre del mercado bajista—, el SPY tuvo un gap de +5.4% para abrir en $234.42, registró su mínimo de sesión en $233.8 durante los primeros minutos (09:31 ET) y nunca volvió a ese nivel: el cierre en $243.59 fue de +9.5% en el día. Un rally cuyo mínimo en el primer minuto es el reflejo de un desplome que cierra en su punto más bajo. Sin embargo, una sola línea suaviza el recorrido; la cinta de media hora que se muestra abajo detalla la caída que la sesión tuvo que absorber.
La estructura de la sesión
El SQL exacto detrás de cada cifra
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_timeEl panel es claro: la tendencia cambió de dirección. El mínimo de $233.8 se registró en el primer minuto y nunca se volvió a tocar; esa parte de la tendencia unidireccional es real. Sin embargo, tras alcanzar los $242.24 hacia el bloque del mediodía, el precio retrocedió durante dos horas — el bloque de las 13:30 cerró en $237.25, y el bloque de las 14:00 registró el mínimo más bajo de la tarde, en $235.05 — el tramo donde el día podría haber sido otro rebote fallido. En lugar de eso, la pérdida de ganancias se mantuvo muy por encima del mínimo de apertura, y la última media hora entregó el cierre más alto de la sesión, en $243.59, con 34.7 millones de acciones — el bloque con mayor volumen de la jornada de 232.4 millones de acciones, superando incluso los 27.3 millones de la apertura. Una caída al mediodía que encontró compradores, seguida de un cierre en máximos con volumen peak.
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:
El SQL exacto detrás de cada cifra
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.
¿Qué tan histórico fue, realmente?
"El día más grande desde 1933" es una estadística del Dow extraída de los periódicos de esa semana. Esto es lo que nuestra propia cinta puede verificar, limitado a lo que realmente cubre:
El SQL exacto detrás de cada cifra
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_sharesDesde 2003-09-10 —la primera sesión de nuestros datos por minuto— el SPY ha registrado 5613 retornos diarios de cierre a cierre. El +9.5% del 24 de marzo de 2020 ocupa el puesto #3: exactamente 2 sesiones lo superaron (2008-10-13, 2008-10-28), ambas dentro del pánico de octubre de 2008. La secuencia de tres días es aún más rara: la racha de +17.5% desde el cierre del 23 de marzo al cierre del 26 de marzo tiene 0 ganancias de tres sesiones más grandes en toda la muestra. Dentro de todo lo que este almacén puede verificar, nada iguala ese estallido.
El volumen cuenta una historia más discreta: 232 millones de acciones de SPY representaron 2.86× el promedio del último año, y solo 1.12× el promedio de las 30 sesiones previas. Frente a cualquier periodo normal de la historia, la actividad fue extraordinaria; frente a las semanas de desplome que la precedieron, fue solo un día más dentro de la tormenta. Los giros históricos no se anuncian con volúmenes históricos.
El repunte de tres días
El SQL exacto detrás de cada cifra
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_dateEl giro se intensificó de inmediato: +9.5% el día 24, +1.3% el día 25, +5.9% el día 26 — una secuencia de tres sesiones que revirtió semanas de caída, sin que existiera un movimiento mayor en la muestra superior. El patrón de marzo de 2020 es similar al de marzo de 2009: en ambos casos, la respuesta política decisiva llegó cerca del mínimo, la primera etapa del rally fue violenta y el día de máxima oportunidad parecía —esa mañana— indistinguible de otro rebote de mercado bajista.
¿Se mantuvo el rally?
En tiempo real, el consenso era que se trataba de un "rebote de mercado bajista", y los escépticos tenían sus propios argumentos: once días antes, el mercado ya había registrado un rally de magnitud similar —de $248.1 en 2020-03-12 a $270.93 en 2020-03-13— y la sesión posterior cerró en $239.41, el peor día de todo el desplome. Un día de ganancias no demostraba nada. Lo que distingue al 24 de marzo es lo que ocurrió después:
El SQL exacto detrás de cada cifra
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_dateEl retest nunca sucedió. Después del 23 de marzo, el cierre más bajo que el SPY haya registrado fue de $243.59 —el 2020-03-24, el mismo día del rally por el estímulo—. El mercado nunca volvió a cerrar dentro de un 9.5% del fondo. El máximo previo al COVID de $338.31 se recuperó el 2020-08-18 —103 sesiones de negociación después del mínimo, un viaje de ida y vuelta de 181 días desde el máximo histórico de vuelta al máximo histórico—. La comparación con 2008, calculada de la misma forma: el pico del 2007-10-09 del SPY no registró un nuevo cierre máximo hasta el 2013-03-14, 1983 días después. Dos crisis, dos velocidades, un mercado que había cambiado su metabolismo entre medio.
Lo que este día nos enseña
Tres lecciones que deben interiorizarse. Primero, el gap hizo el trabajo: gran parte de la ganancia del día ocurrió antes de la apertura; cualquier inversor que esperó una entrada en horario regular pagó un precio alto durante todo el día — la mecánica del overnight gap operó a máxima amplitud. Segundo, el mínimo precedió a la confirmación: el cierre del 23 de marzo fue el punto más bajo, algo que solo se hizo evidente después de que sesiones como esta evitaran volver a ese nivel. Tercero, la velocidad actúa en ambos sentidos: la misma estructura de mercado que comprimió una caída del -34.2% en las filas del 24 comprimió la recuperación inicial en tres sesiones. La velocidad es una propiedad de la infraestructura del mercado actual, no de las noticias buenas o malas.
Los escépticos de esa semana no eran tontos: la amplitud, el estallido, el retest que nunca ocurrió — cada factor que separa el 24 de marzo de los rallies fallidos solo es medible en retrospectiva. La diferencia entre un rally de mercado bajista y un nuevo mercado alcista es invisible el primer día e inequívoca en cuestión de meses.
Preguntas frecuentes sobre el rally de COVID
¿Qué ocurrió el 24 de marzo de 2020?
Fue la primera sesión completa tras el anuncio de QE ilimitado de la Fed: el SPY tuvo un gap de +5.4% en la apertura y cerró +9.5% — la ganancia de un solo día número #3 en las 5613 sesiones que cubre nuestro registro minuto a minuto, superada solo por dos días en octubre de 2008.
¿Qué anunció la Fed el 23 de marzo de 2020?
Compras abiertas de bonos del Tesoro y valores respaldados por hipotecas —"en las cantidades necesarias"— además del PMCCF y el SMCCF, sus primeras facilidades para comprar bonos corporativos, y un TALF reactivado para el crédito al consumo. El comunicado se emitió a las 8:00 am ET, antes de la apertura; el SPY aún cerró ese día en su mínimo del bear market.
¿Fue el 23 de marzo de 2020 el fondo del crash de COVID?
Sí, según el precio de cierre: el cierre mínimo del SPY de $222.51 se registró el 23 de marzo, horas después del anuncio de la Fed. Ese nivel nunca se volvió a tocar —el cierre más bajo posterior ocurrió el 2020-03-24, 9.5% por encima del fondo.
¿Cuándo recuperó el mercado de valores su máximo previo al COVID?
El SPY cerró por primera vez por encima de su máximo histórico del 19 de febrero de 2020 el 2020-08-18, 103 sesiones de trading después del fondo —un ciclo completo de 181 días, frente a los 1983 días que tomó el recorrido equivalente del crash de 2008.
¿Se podría haber comprado tras la noticia y haber obtenido buenos resultados?
La apertura tuvo un gap de +5.4% antes de que comenzara la negociación regular, y el mercado siguió subiendo durante el día —cada entrada posterior costó más que el cierre anterior, y aun así se mantuvo muy por debajo de donde se encontraba el mercado durante la recuperación de agosto de 2020.
Notas de datos
- Los cierres son los últimos registros de la sesión regular (9:30 am-4:00 pm ET) del registro minuto a minuto; pueden diferir de los cierres oficiales de subasta por unos pocos centavos.
- Las fechas de recuperación se basan solo en el precio; una medida de retorno total (dividendos reinvertidos) se recupera antes por definición.
- El rendimiento a 10 años se une a la serie diaria del Tesoro en las fechas de negociación; los puntos básicos son centésimas de un punto porcentual.
- La muestra del panel de ranking comienza en 2003-09-10 —"desde 2003" en esta página se refiere a ese periodo, no a toda la historia registrada del mercado.
Cada panel anterior es una consulta almacenada y versionada sobre el registro histórico; expanda el SQL para ver cada medición. ¿Quiere experimentar este día en lugar de leerlo? Es uno de los escenarios jugables en el simulador de trading de Strasmore Labs.