মার্চ ২৪ ২০২০ বাজারের পরিবর্তন ও ধসের ইতিহাস
২৪ মার্চ ২০২০ এর বাজারের ধস এবং নগদ টাকার চাহিদা নিয়ে বিস্তারিত বিশ্লেষণ। Fed এর বিশেষ পদক্ষেপ ও বাজারের র্যালির কারণ জানতে নিবন্ধটি পড়ুন।
২৩ মার্চ, ২০২০ তারিখে Federal Reserve অনির্দিষ্ট মেয়াদের সম্পদ ক্রয় বা asset purchases — কোনো নির্দিষ্ট সীমা ছাড়াই QE — এবং এর পাশাপাশি এমন একটি পদক্ষেপ ঘোষণা করে যা তারা আগে কখনও করেনি: corporate bonds কেনার জন্য বিশেষ ব্যবস্থা। ২৪ মার্চ, ২০২০ ছিল বাজারের প্রতিক্রিয়া: COVID উদ্দীপনাজনিত র্যালি, যা মার্কিন ইক্যুইটির ইতিহাসে একদিনের মধ্যে সবচেয়ে বড় লাভগুলোর একটি এবং — যা কেবল পরে বোঝা সম্ভব হয়েছে — একটি নতুন বুল মার্কেটের দ্বিতীয় দিন। বাজারের নিম্নতম স্তরটি ঘোষণাটি আসার আগের দিন বিকেলেই ক্লোজ হয়েছিল।
পরিবর্তনের পূর্বের ধস
ধসের বিবরণ এর জন্য আলাদা পৃষ্ঠা রয়েছে; এখানে এর প্রেক্ষাপট দেওয়া হলো — সর্বকালীন উচ্চ শিখর থেকে সর্বনিম্ন স্তর পর্যন্ত প্রতিটি সেশনের তথ্য এবং বেসিস পয়েন্টে ১০-বছরের Treasury yield এর তথ্য দেওয়া হয়েছে:
প্রতিটি সংখ্যার পেছনের সঠিক 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 এর সর্বকালীন উচ্চ শিখর থেকে ক্লোজিংয়ের পর, 2020-03-23 নাগাদ SPY কমে $222.51 এ নেমে আসে — যা একটি -34.2% হ্রাস। প্যানেলের 24 সারিতে এই পতনের প্রতিটি সেশনের তথ্য দেওয়া হয়েছে।
Yield কলামটি মূল সংকেত প্রদান করে। 2020-03-09 এর মধ্যে ১০-বছরের yield 156 বেসিস পয়েন্ট থেকে তৎকালীন রেকর্ড 54 বেসিস পয়েন্টে নেমে আসে — এটি হলো ক্লাসিক 'ফ্লাইট টু সেফটি', যেখানে বিনিয়োগকারীরা স্টক ছেড়ে বন্ডের দিকে চলে যায়। এরপর এই ধারাটি পরিবর্তিত হয়: 2020-03-18 নাগাদ yield দ্বিগুণ হয়ে 118 বেসিস পয়েন্টে পৌঁছায় এবং SPY এর হ্রাস -18.9% থেকে -28.8% এ আরও গভীর হয়। স্টক এবং Treasuries এর একসাথে পতন হলো ফোর্সড সেলিং বা বাধ্য হয়ে বিক্রি করার লক্ষণ — যেখানে হোল্ডাররা যে কোনো সম্পদ বিক্রি করে নগদ অর্থ সংগ্রহের চেষ্টা করেন। মার্চের মাঝামাঝি সময়ে সংকটটি স্টকের দাম নিয়ে নয়, বরং ক্রেডিট সিস্টেমের অভ্যন্তরীণ সমস্যা নিয়ে ছিল।
Fed আসলে কী ঘোষণা করেছে — এবং যা কাজ করেনি
সুদের হার কমানোর চেষ্টা আগেই করা হয়েছিল। উপরের প্যানেলে প্রতিটি এন্ট্রি পড়া সম্ভব, যা একটি নির্দিষ্ট ক্রম অনুসরণ করে:
- 2020-03-03 — একটি জরুরি হাফ-পয়েন্ট রেট কাট, যা ২০০৮ সালের পর মিটিংয়ের মাঝখানে করা প্রথম কাট। SPY 300.34 ডলারে বন্ধ হয়েছে, যা উচ্চ শিখর থেকে -11.2% কম, এবং পতন অব্যাহত ছিল।
- মার্চ ১৫, রবিবার — সুদের হার শূন্যে নামিয়ে আনা হয়েছে এবং একটি $৭০০ বিলিয়ন সম্পদ-ক্রয় কর্মসূচি চালু করা হয়েছে। পরবর্তী সেশনে, 2020-03-16, ফেব্রুয়ারির উচ্চ শিখরের তুলনায় -29.2% কমে বন্ধ হয়েছে — যা পুরো ক্রাশের মধ্যে অন্যতম খারাপ একটি একক সেশন ছিল।
- মার্চ ২৩, সকাল ৮:০০ ET — Fed ঊর্ধ্বসীমা সরিয়ে দিয়েছে: ট্রেজারি এবং মর্গেজ-ব্যাকড সিকিউরিটিজের ক্রয় "প্রয়োজনীয় পরিমাণে" অনির্দিষ্টকালের জন্য চলবে। এর সাথে PMCCF এবং SMCCF যুক্ত করা হয়েছে — যা Fed-এর প্রথম কর্পোরেট বন্ড-বাইং ফ্যাসিলিটি — এবং ভোক্তা ঋণের জন্য TALF পুনরায় চালু করা হয়েছে। সেই দিন বিকেলে SPY তখনও বিয়ারিশ বাজারের নিম্নতম অবস্থানে বন্ধ হয়েছিল।
- মার্চ ২৪ — নিচের সেশনটি। রাতারাতি, কংগ্রেস প্রায় $২ ট্রিলিয়ন CARES Act-এর বিষয়ে একমত হয়েছে; এটি ২৭ মার্চ স্বাক্ষরিত হয়, যা নিচের অংশে বর্ণিত তিন দিনের সময়ের মধ্যে ঘটেছিল।
মার্চ ২৩-এর প্যাকেজটি এর আগের প্রচেষ্টাগুলো থেকে দুটি ডিজাইনের পার্থক্যে আলাদা ছিল। একটি নির্দিষ্ট আকারের কর্মসূচির একটি শেষ তারিখ থাকে যা একটি অস্থির বাজার বুঝতে পারে; কিন্তু "প্রয়োজনীয় পরিমাণে" এর কোনো শেষ সময় নেই। এবং কর্পোরেট ফ্যাসিলিটিগুলো সরাসরি ক্রেডিট মার্কেটে একজন সরকারি ক্রেতাকে স্থাপন করেছে যেখানে লেনদেনের ব্যবস্থা স্থবির হয়ে পড়েছিল। এই পার্থক্যগুলোই কি আসল ছিল তা একটি বিচার্য বিষয়; কিন্তু রেকর্ড অনুযায়ী ক্রমটি হলো — দুটি ধাপ বৃদ্ধি, ক্রমাগত পতন, একটি তৃতীয় ডিজাইন, এবং তারপর ঘুরে দাঁড়ানো।
দিনের সারসংক্ষেপ
প্রতিটি সংখ্যার পেছনের সঠিক 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')মার্চ ২৩-এর ক্লোজিং $222.51 — যা ছিল বেয়ার মার্কেটের শেষ ক্লোজিং — SPY এর জন্য একটি +5.4% গ্যাপ আপ তৈরি করে $234.42 এ ওপেন হয়। ওপেনিংয়ের প্রথম কয়েক মিনিটে (09:31 ET) এটি $233.8 সর্বনিম্ন স্তর স্পর্শ করে, কিন্তু এরপর আর সেই স্তরে ফিরে আসেনি। দিনের শেষে এটি $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 এর সর্বনিম্ন স্তরটি দেখা গিয়েছিল এবং এরপর আর তা স্পর্শ করা হয়নি — অর্থাৎ একমুখী প্রবণতার বিষয়টি সত্য। তবে দুপুর নাগাদ $242.24 এ পৌঁছানোর পর, পরবর্তী দুই ঘণ্টা বাজার কিছুটা নিচের দিকে নেমে আসে — ১৩:৩০ স্লটের ক্লোজিং ছিল $237.25 এবং ১৪:০০ স্লটে দিনের সর্বনিম্ন স্তর $235.05 দেখা যায় — এই সময়কালে বাজারটি আরও একটি ব্যর্থ বাউন্স হতে পারত। পরিবর্তে, এই পতন উদ্বোধনী সর্বনিম্ন স্তরের অনেক উপরেই স্থিতিশীল ছিল এবং শেষ আধা ঘণ্টায় সর্বোচ্চ ক্লোজিং সম্পন্ন হয়, যা ছিল $243.59। এই ক্লোজিংটি সম্পন্ন হয়েছে 34.7 মিলিয়ন শেয়ারের মাধ্যমে — যা 232.4 মিলিয়ন শেয়ারের এই দিনের সবচেয়ে বড় লেনদেন ছিল, এমনকি উদ্বোধনী 27.3 মিলিয়নের চেয়েও বেশি। দুপুরের এই পতনটি ক্রেতা খুঁজে পেয়েছে এবং দিনটি সর্বোচ্চ ভলিউমে উচ্চস্তরে ক্লোজ হয়েছে।
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:
প্রতিটি সংখ্যার পেছনের সঠিক 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 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.
এটি আসলে কতটা ঐতিহাসিক ছিল?
সেই সপ্তাহের সংবাদপত্রগুলোর Dow পরিসংখ্যান অনুযায়ী এটি ছিল "১৯৩৩ সালের পর সবচেয়ে বড় দিন"। আমাদের নিজস্ব ডেটা যা যাচাই করতে পারে, তার ভিত্তিতে প্রকৃত চিত্রটি নিচে দেওয়া হলো:
প্রতিটি সংখ্যার পেছনের সঠিক 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 প্রদর্শন করেছে। ২০২০ সালের মার্চ ২৪ তারিখের +9.5% রিটার্নটি #3 অবস্থানে রয়েছে: ঠিক 2টি সেশনে এর চেয়ে বেশি রিটার্ন দেখা গেছে (2008-10-13, 2008-10-28), যার উভয়টিই অক্টোবর ২০০৮-এর প্যানিকের সময়ের ঘটনা। তিন দিনের এই ধারাবাহিকতা আরও বিরল: ২৩ মার্চ ক্লোজ থেকে ২৬ মার্চ ক্লোজ পর্যন্ত +17.5% রিটার্নের এই ধারাটি নমুনার মধ্যে 0 বড় তিন-সেশনের গেইন বা লাভ দেখিয়েছে। এই ডেটাবেস যা কিছু যাচাই করতে পারে, তার মধ্যে এই ঊর্ধ্বগতির সমতুল্য আর কিছুই নেই।
ভলিউম বা লেনদেনের পরিমাণ একটি ভিন্ন চিত্র তুলে ধরে: 232 মিলিয়ন SPY শেয়ার ছিল গত এক বছরের গড়ের তুলনায় 2.86 গুণ বেশি — এবং পূর্ববর্তী ৩০টি সেশনের গড়ের তুলনায় মাত্র 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বাজারের এই পরিবর্তনটি দ্রুত কার্যকর হয়েছে: ২৪ তারিখে +9.5%, ২৫ তারিখে +1.3%, এবং ২৬ তারিখে +5.9% — টানা তিনটি সেশনে এই বৃদ্ধি কয়েক সপ্তাহের পতনকে কাটিয়ে দিয়েছে। এই নমুনাভুক্ত তথ্যে এর চেয়ে বড় কোনো ঊর্ধ্বগতি দেখা যায়নি। ২০২০ সালের মার্চের প্যাটার্নটি March 2009 এর সাথে মিলে যায়: উভয় ক্ষেত্রেই, চূড়ান্ত নীতিগত পদক্ষেপ নেওয়া হয়েছে নিম্নতম পর্যায়ের কাছাকাছি, প্রথম র্যালিটি ছিল অত্যন্ত তীব্র, এবং সেই সকালে সর্বোচ্চ সুযোগের দিনটি দেখতে অন্য যেকোনো বেয়ার-মার্কেট বা মন্দা বাজারের বাউন্সের মতোই মনে হয়েছিল।
র্যালিটি কি টিকে ছিল?
বাস্তব সময়ে, সবার অভিমত ছিল এটি একটি "bear-market bounce" বা মন্দা বাজারের সাময়িক উথান। সংশয়বাদীদের কাছে এর প্রমাণও ছিল: এর এগারো দিন আগেই বাজার প্রায় এই পরিমাণ র্যালি করেছিল — 2020-03-12 তারিখে $248.1 থেকে 2020-03-13 তারিখে $270.93 পর্যন্ত — এবং সেই পরবর্তী সেশনটি $239.41 এ বন্ধ হয়েছিল, যা ছিল পুরো ধসের মধ্যে সবচেয়ে খারাপ দিন। একটি সবুজ দিন কোনো কিছুরই প্রমাণ দেয় না। ২৪ মার্চের বিশেষত্ব হলো এর পরবর্তী ঘটনাপ্রবাহ:
প্রতিটি সংখ্যার পেছনের সঠিক 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) কখনও ঘটেনি। ২৩ মার্চের পরে, SPY এর এ যাবৎকালের সর্বনিম্ন ক্লোজিং ছিল $243.59 — যা ছিল 2020-03-24 তারিখে, অর্থাৎ স্টিমুলাস-র্যালির দিনটি। বাজার আর কখনও সেই তলদেশের 9.5% সীমার মধ্যে ক্লোজ হয়নি। কোভিড-পূর্বের উচ্চতম $338.31 পুনরুদ্ধার করা হয়েছিল 2020-08-18 তারিখে — যা ছিল সর্বনিম্ন অবস্থান থেকে 103 ট্রেডিং সেশন পরে। এটি ছিল সর্বকালীন উচ্চস্থান থেকে পুনরায় সর্বকালীন উচ্চস্থানে পৌঁছাতে একটি 181 দিনের রাউন্ড ট্রিপ। একইভাবে ২০০৮ সালের সাথে তুলনা করলে দেখা যায়: SPY এর 2007-10-09 শিখরটি 2013-03-14 তারিখ পর্যন্ত নতুন কোনো ক্লোজিং হাই দেখতে পায়নি, যা ছিল 1983 দিন পরে। দুটি সংকট, দুটি ভিন্ন গতি, এবং এর মাঝখানে পরিবর্তিত মেটাবলিজম সম্পন্ন একটি বাজার।
এই দিনটি যা শেখায়
তিনটি বিষয় উপলব্ধি করা প্রয়োজন। প্রথমত, গ্যাপ বা ব্যবধানটি মূল ভূমিকা পালন করেছে: দিনের লাভের একটি বড় অংশ বাজার খোলার আগেই তৈরি হয়েছিল — যারা নিয়মিত সময়ের এন্ট্রির জন্য অপেক্ষা করছিলেন, তারা সারাদিন ধরে মূল্য পরিশোধ করেছেন — overnight gap এর প্রভাব ছিল সর্বোচ্চ মাত্রায়। দ্বিতীয়ত, নিম্নতম স্তরটি নিশ্চিতকরণের আগেই উপস্থিত হয়েছিল: ২৩ মার্চের ক্লোজিং ছিল সর্বনিম্ন স্তর, যা কেবল এই ধরনের সেশনের পরে নিশ্চিত হওয়া যায় যখন বাজার আর সেই স্তরে ফিরে যায়নি। তৃতীয়ত, গতি উভয় দিকেই কাজ করে: একই মার্কেট স্ট্রাকচার যা একটি -34.2% ড্রডাউনকে 24 রো এর মধ্যে সংকুচিত করেছিল, সেই একই কাঠামো প্রাথমিক রিকভারি বা পুনরুদ্ধারকেও মাত্র তিনটি সেশনের মধ্যে সীমাবদ্ধ করেছে। গতি হলো বর্তমান যুগের মার্কেটের একটি বৈশিষ্ট্য, এটি ভালো বা খারাপ খবরের ওপর নির্ভর করে না।
সেই সপ্তাহের সংশয়বাদীরা বোকা ছিলেন না: মার্কেটের বিস্তার, হঠাৎ বৃদ্ধি এবং সেই রিটেস্ট যা কখনও ঘটেনি — ২৪ মার্চের সাথে ব্যর্থ র্যালির পার্থক্য করার প্রতিটি কারণ কেবল অতীত পর্যালোচনার মাধ্যমেই পরিমাপ করা সম্ভব। একটি বেয়ার-মার্কেট র্যালি এবং একটি নতুন বুল মার্কেটের মধ্যে পার্থক্য প্রথম দিনে বোঝা যায় না, তবে কয়েক মাসের মধ্যে তা স্পষ্ট হয়ে ওঠে।
COVID র্যালি FAQ
২০২০ সালের ২৪ মার্চ কী ঘটেছিল?
Fed-এর আনলিমিটেড-QE ঘোষণার পরের প্রথম পূর্ণাঙ্গ সেশন: SPY ওপেন হওয়ার সময় +5.4% গ্যাপ দিয়ে শুরু হয় এবং +9.5% এ বন্ধ হয় — এটি আমাদের মিনিট টেপে থাকা 5613টি সেশনের মধ্যে #3তম সর্বোচ্চ একদিনের লাভ, যা শুধুমাত্র ২০০৮ সালের অক্টোবরের দুটি দিনের পরে দ্বিতীয় স্থানে রয়েছে।
২০২০ সালের ২৩ মার্চ Fed কী ঘোষণা করেছিল?
Treasury এবং mortgage-backed securities-এর জন্য "প্রয়োজনীয় পরিমাণ" উন্মুক্ত ক্রয় — এর পাশাপাশি PMCCF এবং SMCCF, যা কর্পোরেট বন্ড কেনার জন্য তাদের প্রথম ফেসিলিটি ছিল, এবং ভোক্তা ঋণের জন্য একটি পুনরুজ্জীবিত TALF। বিবৃতিটি ET সময় সকাল ৮:০০ টায় বাজার খোলার আগেই প্রকাশ করা হয়েছিল; SPY সেই দিনটি তার bear-market লো-তে বন্ধ হয়েছিল।
২০২০ সালের ২৩ মার্চ কি COVID ক্রাশের সর্বনিম্ন স্তর ছিল?
হ্যাঁ, ক্লোজিং প্রাইস অনুযায়ী: Fed-এর ঘোষণার কয়েক ঘণ্টা পর ২৩ মার্চ SPY-এর সর্বনিম্ন ক্লোজিং ছিল $222.51। এরপর আর কখনো এই স্তরে বাজার ফিরে আসেনি — এর পরের সর্বনিম্ন ক্লোজিং এসেছিল 2020-03-24 তারিখে, যা সর্বনিম্ন স্তর থেকে 9.5% উপরে ছিল।
স্টক মার্কেট কখন প্রি-COVID উচ্চস্তর পুনরুদ্ধার করেছিল?
SPY প্রথমবার ১৯ ফেব্রুয়ারি, ২০২০-এর অল-টাইম-হাই ক্লোজিংয়ের উপরে বন্ধ হয় 2020-08-18 তারিখে, যা সর্বনিম্ন স্তর থেকে 103 ট্রেডিং সেশন পরে ঘটেছিল — এটি ছিল একটি 181 দিনের রাউন্ড ট্রিপ, যেখানে ২০০৮ সালের ক্রাশের সমতুল্য যাত্রার জন্য সময় লেগেছিল 1983 দিন।
সংবাদ পাওয়ার পর কেনা সত্ত্বেও কি ভালো লাভ করা সম্ভব ছিল?
নিয়মিত ট্রেডিং শুরু হওয়ার আগে ওপেন +5.4% গ্যাপ দিয়ে শুরু হয়েছিল এবং দিনটি ক্রমাগত বাড়তে থাকে — প্রতিটি পরবর্তী এন্ট্রি আগের ক্লোজিংয়ের চেয়ে বেশি দামে হয়েছিল, তবুও এটি ২০২০ সালের আগস্টের রিকভারির তুলনায় অনেক নিচে ছিল।
ডেটা নোট
- ক্লোজিং হলো রেগুলার-সেশন (৯:৩০ am-৪:০০ pm ET) মিনিট টেপের শেষ প্রিন্ট; এগুলো অফিসিয়াল অকশন ক্লোজিং থেকে কয়েক সেন্টে ভিন্ন হতে পারে।
- রিকভারি ডেট শুধুমাত্র প্রাইস-ভিত্তিক; টোটাল-রিটার্ন মেজার (ডিভিডেন্ড পুনঃবিনিয়োগসহ) স্বাভাবিকভাবেই আরও দ্রুত রিকভারি করে।
- ১০-বছরের ইল্ড ট্রেডিং ডেটগুলোতে Treasury-এর দৈনিক সিরিজের সাথে যুক্ত হয়; বেসিস পয়েন্ট হলো শতাংশের একশ ভাগের এক ভাগ।
- র্যাঙ্ক প্যানেলের স্যাম্পল 2003-09-10 থেকে শুরু — এই পৃষ্ঠায় "since 2003" বলতে সেই নির্দিষ্ট সময়কালকে বোঝায়, সমস্ত রেকর্ডকৃত মার্কেট ইতিহাসকে নয়।
উপরের প্রতিটি প্যানেল হলো ঐতিহাসিক টেপের ওপর একটি স্টোর্ড এবং ভার্সনড কুয়েরি — প্রতিটি পরিমাপ দেখতে SQL এক্সপ্যান্ড করুন। এটি পড়ার বদলে অনুভব করতে চান? এটি Strasmore Labs trading simulator-এর একটি প্লেয়েবল সিনারিও।