24 मार्च 2020 को बाजार में आया बड़ा मोड़
24 मार्च 2020 का विस्तृत विश्लेषण देखें: बाजार की गिरावट, नकदी की मांग, Fed पैकेज और सेक्टर की स्थिति का सटीक विवरण जानने के लिए इस लेख को पढ़ें।
23 मार्च, 2020 को, Federal Reserve ने बिना किसी सीमा के ओपन-एंडेड एसेट परचेज (QE) की घोषणा की। इसके साथ ही, उन्होंने एक नया कदम उठाया: कॉर्पोरेट बॉन्ड खरीदने के लिए विशेष सुविधाएं। 24 मार्च, 2020 को बाजार ने इसका जवाब दिया: COVID स्टिमुलस रैली, जो अमेरिकी इक्विटी के इतिहास में एक ही दिन में हुई सबसे बड़ी बढ़त में से एक थी। अब यह स्पष्ट है कि यह एक नए बुल मार्केट का दूसरा दिन था। बाजार का निचला स्तर (bottom) घोषणा होने से एक दिन पहले ही तय हो चुका था।
मोड़ से पहले की गिरावट
गिरावट का विवरण के लिए एक अलग पेज है; यहाँ वह आधार दिया गया है — उच्चतम स्तर से लेकर निचले स्तर तक का हर सत्र, जिसमें 10-year Treasury yield को basis points में दिखाया गया है:
हर आंकड़े के पीछे का पूरा SQL
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_date2020-02-19 को $338.31 के सर्वकालिक उच्च स्तर पर बंद होने के बाद, SPY 2020-03-23 तक गिरकर $222.51 पर आ गया — यह एक -34.2% की गिरावट थी, जिसके हर सत्र का विवरण पैनल की 24 पंक्तियों में दिया गया है।
Yield कॉलम महत्वपूर्ण संकेत देता है। 2020-03-09 के दौरान, 10-year yield 156 basis points से गिरकर उस समय के रिकॉर्ड 54 पर आ गया — यह 'flight to safety' का एक स्पष्ट उदाहरण था, जहाँ पैसा शेयरों से निकलकर बॉन्ड्स में जा रहा था। फिर यह पैटर्न बदल गया: 2020-03-18 तक yield बढ़कर 118 basis points से अधिक हो गया, जबकि SPY की गिरावट -18.9% से बढ़कर -28.8% तक पहुँच गई। शेयरों और Treasuries का एक साथ गिरना 'forced selling' का संकेत है — जहाँ निवेशक नकदी जुटाने के लिए उन संपत्तियों को भी बेच रहे हैं जिनमें मांग बची है। मार्च के मध्य तक, संकट शेयरों की कीमतों के बारे में नहीं, बल्कि क्रेडिट की कार्यप्रणाली (plumbing of credit) के बारे में था।
Fed ने वास्तव में क्या घोषणा की — और क्या काम नहीं आया
ब्याज दरों में कटौती का प्रयास पहले ही किया जा चुका था। घटनाओं का क्रम इस प्रकार है:
- 2020-03-03 — आधा प्रतिशत की आपातकालीन दर कटौती, जो 2008 के बाद बैठक के बीच की पहली कटौती थी। SPY $300.34 पर बंद हुआ, जो उच्च स्तर से -11.2% कम था, और गिरावट जारी रही।
- 15 मार्च, रविवार — दरों को शून्य कर दिया गया और $700 बिलियन का परिसंपत्ति-खरीद कार्यक्रम शुरू किया गया। अगली सत्र, 2020-03-16, फरवरी के उच्च स्तर से -29.2% नीचे बंद हुआ — जो पूरे क्रैश के सबसे खराब एकल सत्रों में से एक था।
- 23 मार्च, सुबह 8:00 बजे ET — Fed ने सीमा हटा दी: Treasuries और mortgage-backed securities की खरीद "आवश्यक मात्रा में" जारी रहेगी, जो अनिश्चितकालीन थी। इसके साथ PMCCF और SMCCF भी शामिल थे — Fed की पहली कॉर्पोरेट-बॉन्ड-खरीद सुविधाएं — और उपभोक्ता ऋण को समर्थन देने के लिए TALF को पुनर्जीवित किया गया। उस दोपहर SPY अभी भी मंदी के निचले स्तर पर बंद हुआ।
- 24 मार्च — नीचे दिया गया सत्र। रात भर में, Congress लगभग $2 ट्रिलियन के CARES Act पर सहमत हुआ; इस पर 27 मार्च को हस्ताक्षर किए गए, जैसा कि नीचे दिए गए तीन दिनों के घटनाक्रम में दर्ज है।
23 मार्च के पैकेज और उससे पहले के प्रयासों में दो संरचनात्मक अंतर थे। एक निश्चित आकार के कार्यक्रम की समाप्ति तिथि होती है जिसे तनावग्रस्त बाजार देख सकता है; लेकिन "आवश्यक मात्रा में" की कोई सीमा नहीं होती। और कॉर्पोरेट सुविधाओं ने सार्वजनिक खरीदार को सीधे उन क्रेडिट बाजारों में स्थापित कर दिया जहाँ तरलता रुक गई थी। क्या वे अंतर महत्वपूर्ण थे, यह एक व्यक्तिगत निर्णय है; डेटा केवल घटनाओं का क्रम दर्ज करता है — दो बार वृद्धि, निरंतर गिरावट, एक तीसरा डिज़ाइन, और फिर सुधार।
एक ही दिशा में दिन का उतार-चढ़ाव
हर आंकड़े के पीछे का पूरा SQL
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')23 मार्च को $222.51 पर हुई क्लोजिंग के बाद — जो कि bear market की अंतिम क्लोजिंग थी — SPY में +5.4% का गैप आया और यह $234.42 पर खुला। शुरुआती मिनटों में (09:31 ET) इसने $233.8 का सत्र का निचला स्तर (session low) छुआ, लेकिन फिर कभी उस स्तर पर वापस नहीं आया: दिन की क्लोजिंग $243.59 पर हुई जो कि +9.5% थी। यह एक ऐसी रैली है जिसका पहले मिनट का निचला स्तर, उस क्रैश का ठीक उल्टा है जो अपने निचले स्तर पर बंद होता है। हालांकि, एक ही दिशा में रहने के बावजूद, नीचे दिया गया आधा घंटे का डेटा सत्र के दौरान आए उतार-चढ़ाव को दर्शाता है।
सत्र का स्वरूप
हर आंकड़े के पीछे का पूरा SQL
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
round(toFloat64(argMax(close, window_start)), 2) AS bucket_close,
round(min(toFloat64(low)), 2) AS bucket_low,
round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2020-03-24 04:00:00') AND window_start < toDateTime('2020-03-24 23:59:00')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY et_time
ORDER BY et_timeबाजार की स्थिति स्पष्ट है: रुझान बदल गया। शुरुआती मिनट में $233.8 का निचला स्तर (low) बना और फिर कभी वहां तक नहीं पहुंचा — एकतरफा रुझान का यह हिस्सा सही है। लेकिन दोपहर के सत्र तक $242.24 तक पहुंचने के बाद, बाजार दो घंटों तक नीचे गिरा — 13:30 का सत्र $237.25 पर बंद हुआ, और 14:00 के सत्र में दोपहर का सबसे निचला स्तर $235.05 दर्ज किया गया — यह वह समय था जब बाजार एक और विफल रिकवरी (failed bounce) में बदल सकता था। इसके बजाय, गिरावट के बाद कीमतें शुरुआती निचले स्तर से काफी ऊपर बनी रहीं, और अंतिम आधे घंटे में सत्र का उच्चतम स्तर $243.59 दर्ज किया गया। यह 34.7 मिलियन शेयरों के साथ हुआ — जो 232.4 मिलियन शेयरों वाले इस दिन का सबसे बड़ा वॉल्यूम था, जो ओपनिंग के 27.3 मिलियन से भी अधिक था। दोपहर की गिरावट में खरीदार आए और सत्र का समापन उच्चतम स्तर पर भारी वॉल्यूम के साथ हुआ।
व्यापक रैली, या सीमित?
किसी इंडेक्स को कुछ चुनिंदा mega-caps द्वारा ऊपर खींचा जा सकता है। लेकिन यह वैसा नहीं था। बारह फंड्स — तीन प्रमुख index trackers और नौ S&P sector funds — दोनों क्लोजिंग पर एक ही दिशा में थे:
हर आंकड़े के पीछे का पूरा SQL
SELECT
ticker,
round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2020-03-23')), 2) AS mar23_close,
round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2020-03-24')), 2) AS mar24_close,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2020-03-24')) / argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2020-03-23')) - 1) * 100, 1) AS change_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'DIA', 'QQQ', 'IWM', 'XLE', 'XLI', 'XLF', 'XLK', 'XLY', 'XLV', 'XLU', 'XLP')
AND window_start >= toDateTime('2020-03-23 00:00:00') AND window_start < toDateTime('2020-03-25 00:00:00')
GROUP BY ticker
ORDER BY change_pct DESCसभी 12 बढ़त के साथ बंद हुए। Energy (XLE) 16.4% के साथ सबसे आगे रहा, इसके बाद industrials (XLI, +12.8%) और financials (XLF, +12.7%) रहे — ये बाजार के सबसे अधिक आर्थिक रूप से संवेदनशील क्षेत्र हैं, जिन पर shutdown का सबसे पहले प्रभाव पड़ता है। Dow tracker DIA में 11.3% की वृद्धि हुई — यही वह हलचल थी जिसने उस सप्ताह की "1933 के बाद का सबसे अच्छा दिन" वाली सुर्खियों को जन्म दिया, जो Dow के लंबे मूल्य इतिहास का एक विशेष हिस्सा है। सबसे कम बढ़त पारंपरिक defensives, consumer staples (XLP, +5.1%) और healthcare (XLV, +7.4%) में देखी गई, जबकि Nasdaq-100 का QQQ (+7.7%), SPY के +9.5% से पीछे रहा। Cyclicals द्वारा संचालित, हर तरफ बढ़त वाला यह बाजार, एक सीमित mega-cap squeeze के बिल्कुल विपरीत है — इस दिन की मुख्य विशेषता market breadth थी।
यह वास्तव में कितना ऐतिहासिक था?
उस सप्ताह के समाचार पत्रों के अनुसार Dow के लिए "1933 के बाद का सबसे बड़ा दिन" यह आंकड़ा है। हमारे स्वयं के डेटा के अनुसार, जो केवल इसके दायरे में आता है, विवरण यहाँ दिया गया है:
हर आंकड़े के पीछे का पूरा SQL
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_shares2003-09-10 से — जो हमारे मिनट डेटा का पहला सत्र है — SPY ने 5613 दैनिक क्लोज-टू-क्लोज रिटर्न दर्ज किए हैं। 24 मार्च, 2020 का +9.5% रिटर्न #3 स्थान पर है: ठीक 2 सत्रों ने इसे पीछे छोड़ा (2008-10-13, 2008-10-28), और ये दोनों अक्टूबर 2008 की मंदी के दौरान हुए थे। तीन दिनों का यह क्रम और भी दुर्लभ है: 23 मार्च के क्लोज से 26 मार्च के क्लोज तक की +17.5% की बढ़त के लिए इस पूरे सैंपल में 0 से अधिक तीन-सत्रों की बढ़त कहीं नहीं मिली। हमारे डेटाबेस में उपलब्ध सभी जानकारी के अनुसार, इस उछाल के समान कुछ भी नहीं है।
वॉल्यूम एक अलग कहानी बताता है: 232 मिलियन SPY शेयर्स पिछले एक वर्ष के औसत से 2.86× अधिक थे — और पिछले 30 सत्रों के औसत से केवल 1.12× अधिक थे। इतिहास के किसी भी सामान्य दौर की तुलना में यह गतिविधि असाधारण थी; लेकिन इससे पहले के क्रैश वाले हफ्तों की तुलना में, यह तूफान के बीच एक सामान्य दिन जैसा ही था। ऐतिहासिक मोड़ हमेशा ऐतिहासिक वॉल्यूम के साथ नहीं आते।
तीन दिनों की तेज़ी
हर आंकड़े के पीछे का पूरा SQL
SELECT
toString(et_date) AS session,
close_usd,
round(if(prev_close = 0, NULL, (close_usd / prev_close - 1) * 100), 1) AS change_pct,
shares_m
FROM (
SELECT et_date, close_usd, shares_m,
lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
FROM (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS close_usd,
round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2020-03-20 00:00:00') AND window_start < toDateTime('2020-03-26 23:59:00')
GROUP BY et_date
)
)
WHERE et_date >= toDate('2020-03-23') AND et_date <= toDate('2020-03-26')
ORDER BY et_dateबाज़ार में बढ़त तुरंत जारी रही: 24 तारीख को +9.5%, 25 तारीख को +1.3%, और 26 तारीख को +5.9% — यह तीन सत्रों का एक ऐसा सिलसिला था जिसने हफ्तों की गिरावट को खत्म कर दिया। पूरे डेटा सेट में इससे बड़ी बढ़त कहीं नहीं देखी गई। मार्च 2020 का यह पैटर्न March 2009 के समान है: दोनों ही मामलों में, निर्णायक नीतिगत प्रतिक्रिया निचले स्तर के करीब आई थी, रैली का पहला चरण बहुत तेज़ था, और उस सुबह अधिकतम अवसर वाला दिन किसी सामान्य bear-market bounce जैसा ही लग रहा था।
क्या रैली बरकरार रही?
वास्तविक समय में, "bear-market bounce" (मंदी बाजार की उछाल) को ही सर्वमान्य माना जा रहा था, और संदेह करने वालों के पास अपने प्रमाण थे: ग्यारह दिन पहले भी बाजार में लगभग इतनी ही बड़ी रैली देखी गई थी — 2020-03-12 को $248.1 से 2020-03-13 को $270.93 तक — और उसके अगले सत्र का समापन $239.41 पर हुआ था, जो पूरे क्रैश का सबसे खराब दिन था। एक सकारात्मक दिन ने कुछ भी सिद्ध नहीं किया। 24 मार्च की विशेषता वह है जो उसके बाद हुआ:
हर आंकड़े के पीछे का पूरा SQL
SELECT
round(ath_close, 2) AS feb19_ath_close,
round(bottom_close, 2) AS mar23_bottom_close,
toString(rec_date) AS recovery_date,
countIf(et_date > toDate('2020-03-23') AND et_date <= rec_date) AS sessions_to_new_high,
dateDiff('day', toDate('2020-03-23'), rec_date) AS days_low_to_new_high,
dateDiff('day', toDate('2020-02-19'), rec_date) AS round_trip_days,
round(minIf(close_usd, et_date > toDate('2020-03-23') AND et_date <= rec_date), 2) AS lowest_close_after,
toString(argMinIf(et_date, (close_usd, et_date), et_date > toDate('2020-03-23') AND et_date <= rec_date)) AS lowest_close_date,
round((minIf(close_usd, et_date > toDate('2020-03-23') AND et_date <= rec_date) / bottom_close - 1) * 100, 1) AS closest_retest_pct,
toString(peak07_date) AS peak_2007_date,
toString(rec07_date) AS recovery_2013_date,
dateDiff('day', peak07_date, rec07_date) AS round_trip_2008_days
FROM (
SELECT
et_date, close_usd, ath_close, bottom_close, peak07_date,
min(if(et_date > toDate('2020-03-23') AND close_usd >= ath_close, et_date, toDate('2099-01-01'))) OVER () AS rec_date,
min(if(et_date >= toDate('2008-01-01') AND close_usd >= peak07_close, et_date, toDate('2099-01-01'))) OVER () AS rec07_date
FROM (
SELECT
et_date, close_usd,
max(if(et_date = toDate('2020-02-19'), close_usd, -999)) OVER () AS ath_close,
max(if(et_date = toDate('2020-03-23'), close_usd, -999)) OVER () AS bottom_close,
max(if(et_date >= toDate('2007-01-01') AND et_date < toDate('2008-01-01'), (close_usd, et_date), (-999., toDate('1970-01-01')))) OVER () .1 AS peak07_close,
max(if(et_date >= toDate('2007-01-01') AND et_date < toDate('2008-01-01'), (close_usd, et_date), (-999., toDate('1970-01-01')))) OVER () .2 AS peak07_date
FROM (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS close_usd
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start < toDateTime('2021-01-01 00:00:00')
GROUP BY et_date
HAVING close_usd > 0
)
)
)
GROUP BY ath_close, bottom_close, rec_date, peak07_date, rec07_dateरीटेस्ट (retest) कभी नहीं हुआ। 23 मार्च के बाद, SPY का अब तक का सबसे निचला क्लोजिंग स्तर $243.59 था — जो 2020-03-24 को, यानी स्टिमुलस-रैली वाले दिन ही आया था। बाजार फिर कभी निचले स्तर के 9.5% के भीतर क्लोज नहीं हुआ। COVID-पूर्व का $338.31 का उच्च स्तर 2020-08-18 को वापस प्राप्त कर लिया गया — जो निचले स्तर के 103 ट्रेडिंग सत्र बाद था, और ऑल-टाइम हाई से वापस ऑल-टाइम हाई तक 181 दिनों का राउंड ट्रिप था। 2008 के साथ तुलना, समान तरीके से गणना करने पर: SPY के 2007-10-09 शिखर ने 2013-03-14 तक नया क्लोजिंग हाई नहीं देखा, जो 1983 दिन बाद था। दो संकट, दो अलग गति, और बीच में अपनी कार्यप्रणाली बदल चुका एक बाजार।
यह दिन क्या सिखाता है
तीन मुख्य बातें समझने योग्य हैं। पहली, गैप (gap) ने काम किया: दिन की अधिकांश बढ़त बाजार खुलने से पहले ही हो चुकी थी — जो भी नियमित घंटों में प्रवेश का इंतज़ार कर रहे थे, उन्हें पूरे दिन ऊँची कीमतों पर खरीदना पड़ा — overnight gap की प्रक्रिया अपने चरम पर थी। दूसरी, निचले स्तर (bottom) की पुष्टि से पहले ही वह आ गया था: 23 मार्च का क्लोजिंग लो (low) था, जो केवल इस तरह के सत्रों के बाद ही स्पष्ट हुआ जब बाजार ने उस स्तर को दोबारा नहीं छुआ। तीसरी, गति (velocity) दोनों दिशाओं में काम करती है: वही मार्केट स्ट्रक्चर जिसने -34.2% की गिरावट को 24 की पंक्तियों में समेट दिया, उसने शुरुआती रिकवरी को भी तीन सत्रों में समेट दिया। गति इस युग की मार्केट प्लंबिंग (market plumbing) का गुण है, न कि अच्छी या बुरी खबर का।
उस सप्ताह के संदेहवादी मूर्ख नहीं थे: मार्केट की व्यापकता (breadth), उछाल, और वह रीटेस्ट (retest) जो कभी नहीं आया — 24 मार्च और विफल रैली के बीच का हर अंतर केवल बाद में ही मापा जा सकता है। बेयर-मार्केट रैली और नए बुल मार्केट के बीच का अंतर पहले दिन दिखाई नहीं देता, लेकिन कुछ महीनों के भीतर स्पष्ट हो जाता है।
COVID रैली FAQ
24 मार्च, 2020 को क्या हुआ था?
Fed द्वारा असीमित-QE की घोषणा के बाद पहला पूरा सत्र: SPY बाजार खुलने पर +5.4% गैप के साथ खुला और +9.5% पर बंद हुआ — यह 5613 सत्रों में हमारी मिनट टेप द्वारा कवर किए गए #3 सबसे अधिक एकल-दिवसीय लाभ था, जिसके बाद केवल अक्टूबर 2008 के दो दिन आते हैं।
Fed ने 23 मार्च, 2020 को क्या घोषणा की थी?
Treasury और mortgage-backed securities की "आवश्यक मात्रा में" अनिश्चितकालीन खरीद — इसके साथ ही PMCCF और SMCCF, जो कॉर्पोरेट बॉन्ड खरीदने के लिए इसके पहले ही साधन थे, और उपभोक्ता ऋण के लिए एक पुनर्जीवित TALF। यह बयान बाजार खुलने से पहले सुबह 8:00 बजे ET पर जारी किया गया था; SPY उस दिन भी अपने bear-market निचले स्तर पर बंद हुआ।
क्या 23 मार्च, 2020 COVID क्रैश का निचला स्तर (bottom) था?
हाँ, क्लोजिंग प्राइस के अनुसार: Fed की घोषणा के कुछ घंटों बाद 23 मार्च को SPY $222.51 के निचले स्तर पर बंद हुआ। इस स्तर पर बाजार फिर कभी नहीं पहुँचा — इसके बाद का सबसे निचला क्लोज 2020-03-24 को आया, जो निचले स्तर से 9.5% ऊपर था।
शेयर बाजार ने अपना pre-COVID हाई कब हासिल किया?
SPY ने पहली बार 19 फरवरी, 2020 के अपने all-time-high क्लोज से 2020-08-18, 103 ट्रेडिंग सत्रों के बाद 2020-08-18 पर ऊपर क्लोज किया — यह एक 181-दिवसीय round trip था, जबकि 2008 के क्रैश की समान यात्रा में 1983 दिन लगे थे।
क्या खबर आने के बाद खरीदारी करने पर भी अच्छा मुनाफा हो सकता था?
नियमित ट्रेडिंग शुरू होने से पहले बाजार +5.4% गैप के साथ खुला, और दिन भर बढ़त बनी रही — हर बाद के प्रवेश (entry) की लागत पिछले क्लोज से अधिक थी, फिर भी यह अगस्त 2020 की रिकवरी के स्तर से काफी नीचे था।
डेटा नोट्स
- क्लोजिंग प्राइस नियमित सत्र (9:30 am-4:00 pm ET) के अंतिम प्रिंट हैं; ये आधिकारिक ऑक्शन क्लोज से कुछ सेंट भिन्न हो सकते हैं।
- रिकवरी की तारीखें केवल कीमत पर आधारित हैं; total-return माप (लाभांश पुनर्निवेशित) स्वाभाविक रूप से जल्दी रिकवर हो जाता है।
- 10-year yield ट्रेडिंग तिथियों पर Treasury की दैनिक श्रृंखला में शामिल होता है; basis points प्रतिशत बिंदु का सौवां हिस्सा होते हैं।
- रैंक पैनल का सैंपल 2003-09-10 से शुरू होता है — इस पेज पर "2003 से" का अर्थ वह समय सीमा है, न कि पूरी दर्ज बाजार हिस्ट्री।
ऊपर दिया गया प्रत्येक पैनल ऐतिहासिक टेप पर एक संग्रहीत, versioned क्वेरी है — प्रत्येक माप देखने के लिए SQL का विस्तार करें। इसे पढ़ने के बजाय अनुभव करना चाहते हैं? यह Strasmore Labs trading simulator में खेलने योग्य परिदृश्यों में से एक है।