จุดต่ำสุดของตลาดหุ้น 9 มีนาคม 2009
วิเคราะห์เหตุการณ์วันที่ 9 มีนาคม 2009 ซึ่งเป็นจุดต่ำสุดของวิกฤตการณ์ทางการเงิน โดยข้อมูลจาก SPY แสดงให้เห็นว่าตลาดปรับตัวลดลงอย่างเงียบๆ ก่อนเริ่มต้นตลาดกระทิง
9 มีนาคม 2009 เป็นหนึ่งในวันที่สำคัญที่สุดในประวัติศาสตร์ตลาดสมัยใหม่ โดยเป็นจุดต่ำสุดในช่วงวิกฤตการณ์ทางการเงิน ซึ่งมีระดับต่ำกว่าจุดสูงสุดในเดือนตุลาคม 2007 อยู่ที่ -56.5% และเป็นวันแรกของการเริ่มต้นตลาดกระทิงที่ยาวนานกว่าหนึ่งทศวรรษ ประวัติศาสตร์ระบุระดับดัชนีของวันจันทร์นั้นไว้ดังนี้: S&P 500 อยู่ที่ 676.53 และ Dow อยู่ที่ 6,547 ข้อมูลด้านล่างใช้ SPY ซึ่งเป็น S&P 500 ETF โดยฐานข้อมูลนี้ได้จัดเก็บข้อมูลการซื้อขายแบบนาทีต่อนาทีไว้ตั้งแต่ปี 2003 และนี่คือความจริงที่น่าตกใจซึ่งข้อมูลระบุไว้ว่า: ไม่มีสัญญาณใดๆ ประกาศล่วงหน้าถึงเหตุการณ์ในวันนั้น ไม่มีการเทขายอย่างรุนแรงหรือการกลับตัวที่ชัดเจน แต่เป็นวันจันทร์ที่ตลาดปรับตัวลดลงอย่างเงียบๆ และต่อเนื่อง ซึ่งบังเอิญเป็นวันสุดท้ายของช่วงขาลง ทุกตัวเลขมาจากการสืบค้นข้อมูลที่จัดเก็บไว้ คุณสามารถขยายส่วนต่างๆ เพื่อดูคำสั่ง SQL ได้
เส้นทางสู่จุดต่ำสุด
วิกฤตการณ์เกิดขึ้นเป็นลำดับขั้นตอน ซึ่งวันที่ที่ระบุมีความสำคัญต่อการทำความเข้าใจข้อมูลด้านล่าง Bear Stearns ถูกขายให้กับ JPMorgan ในเดือนมีนาคม 2008 Lehman Brothers ยื่นล้มละลายเมื่อวันจันทร์ที่ 15 กันยายน 2008 — ข้อมูลสรุปของเหตุการณ์นี้ รัฐสภาผ่านกฎหมาย TARP ซึ่งเป็นกองทุนช่วยเหลือธนาคารมูลค่า 7 แสนล้านดอลลาร์ เมื่อวันที่ 3 ตุลาคม การช่วยเหลือ AIG โดยรัฐบาลมีการขยายวงเงินเพิ่มขึ้นสองครั้ง Citigroup ได้รับการสนับสนุนจากรัฐบาลเป็นครั้งที่สองในเดือนพฤศจิกายน การฟื้นตัวในช่วงฤดูหนาวเริ่มอ่อนกำลังลง และเมื่อถึงช่วงปลายเดือนกุมภาพันธ์ 2009 ดัชนีเฉลี่ยได้ลดลงต่ำกว่าระดับต่ำสุดของเดือนพฤศจิกายนและยังคงปรับตัวลดลงอย่างต่อเนื่อง ข้อมูลหนึ่งแถวสรุปช่วงเวลา 17 เดือนดังกล่าวไว้ดังนี้:
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH daily AS (
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('2007-01-02 00:00:00') AND window_start < toDateTime('2013-07-01 00:00:00')
GROUP BY et_date
),
(SELECT max(close_usd) FROM daily WHERE et_date < toDate('2008-01-01')) AS peak_close_usd
SELECT
round(peak_close_usd, 2) AS peak_close,
toString(argMaxIf(et_date, (close_usd, et_date), et_date < toDate('2008-01-01'))) AS peak_date,
round(minIf(close_usd, et_date BETWEEN toDate('2008-07-01') AND toDate('2009-06-30')), 2) AS trough_close,
toString(argMinIf(et_date, (close_usd, et_date), et_date BETWEEN toDate('2008-07-01') AND toDate('2009-06-30'))) AS trough_date,
round((minIf(close_usd, et_date BETWEEN toDate('2008-07-01') AND toDate('2009-06-30')) / peak_close_usd - 1) * 100, 1) AS decline_pct,
toString(minIf(et_date, et_date > toDate('2009-03-09') AND close_usd >= peak_close_usd)) AS recovered_date
FROM dailyจากระดับสูงสุด ณ ราคาปิดที่ $156.41 เมื่อ 2007-10-09 SPY ลดลงเหลือ $68.07 ใน 2009-03-09 — คิดเป็นการลดลง -56.5% ซึ่งเป็นการลดลงที่รุนแรงที่สุดนับตั้งแต่ทศวรรษ 1930 ข้อมูลแถวเดียวกันนี้ยังมีตัวเลขที่นักลงทุนระยะยาวให้ความสนใจ นั่นคือการฟื้นตัวกลับมาที่จุดเดิม SPY ไม่สามารถปิดเหนือระดับสูงสุดของปี 2007 ได้อีกครั้งจนกระทั่ง 2013-03-14 — หรือสี่ปีหลังจากจุดต่ำสุด และห้าปีครึ่งหลังจากจุดสูงสุด ข้อมูลทั้งสองช่วงเวลาถูกแสดงรายละเอียดไว้ด้านล่างนี้
สรุปภาพรวมรายวัน
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('2009-03-06 00:00:00') AND window_start < toDateTime('2009-03-09 04:00:00')
) AS prior_rth_close,
(
SELECT round(avg(day_shares) / 1e6, 1)
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, toFloat64(sum(volume)) AS day_shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2008-12-01 00:00:00') AND window_start < toDateTime('2009-03-09 04:00:00')
GROUP BY d
ORDER BY d DESC
LIMIT 20
)
) AS avg20_shares,
(
SELECT round(avg(day_shares) / 1e6, 1)
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, toFloat64(sum(volume)) AS day_shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2008-12-01 00:00:00') AND window_start < toDateTime('2009-03-09 04:00:00')
GROUP BY d
ORDER BY d DESC
LIMIT 60
)
) AS avg60_shares
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(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,
formatDateTime(toTimeZone(argMaxIf(window_start, (toFloat64(high), -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 high_et,
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(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(toFloat64(sum(volume)) / 1e6, 1) AS day_shares_m,
avg20_shares AS avg20_shares_m,
avg60_shares AS avg60_shares_m,
round((toFloat64(sum(volume)) / 1e6 / avg20_shares - 1) * 100, 0) AS vol_vs_20d_pct,
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('2009-03-09 04:00:00') AND window_start < toDateTime('2009-03-09 23:59:00')SPY เปิดที่ $67.95 ซึ่งลดลงจากราคาปิดเมื่อวันศุกร์ที่ $68.84 คิดเป็นช่องว่างราคา (gap down) -1.3% โดยแตะระดับ $70 เมื่อเวลา 10:13 ET และปรับตัวลดลงไปแตะจุดต่ำสุดที่ $67.73 ในช่วงท้ายของวัน (15:17 ET) ก่อนจะปิดที่ $68.07 หรือเปลี่ยนแปลง -1.1% ในวันนั้น ช่วงการแกว่งตัว (range) ตลอดทั้งเซสชันอยู่ที่ประมาณสองดอลลาร์ ราคาปิดที่มีนัยสำคัญที่สุดในรอบชั่วอายุคนนี้เกิดขึ้นโดยไม่มีช่วงเวลาที่ผันผวนรุนแรงแม้แต่นาทีเดียว
ปริมาณการซื้อขายช่วยตอบคำถามที่ตัวเลขดิบเพียงอย่างเดียวไม่สามารถตอบได้ว่า ปริมาณหุ้น 357.4 ล้านหุ้นนั้นถือว่ามากหรือน้อย สำหรับเดือนมีนาคม 2009 ถือว่าน้อย โดยค่าเฉลี่ยของ SPY ในช่วงยี่สิบเซสชันล่าสุดอยู่ที่ 406.3 ล้านหุ้นต่อวัน และจุดต่ำสุดที่เกิดขึ้นอยู่ที่ -12% เมื่อเทียบกับค่าเฉลี่ยดังกล่าว ส่วนค่าเฉลี่ยในช่วงหกสิบเซสชันล่าสุดอยู่ที่ 337.9 ล้านหุ้น ตามตำนานเรื่องการเทขายอย่างรุนแรง (capitulation) ระบุว่าจุดต่ำสุดในรอบชั่วอายุคนมักเกิดขึ้นพร้อมกับปริมาณการซื้อขายที่พุ่งสูงเป็นประวัติการณ์ แต่จุดต่ำสุดที่มีชื่อเสียงที่สุดในยุคสมัยใหม่กลับมีปริมาณการซื้อขาย น้อยกว่า วันปกติทั่วไปในเดือนเดียวกันนั้นเสียอีก
รูปแบบของเซสชัน
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('2009-03-09 04:00:00') AND window_start < toDateTime('2009-03-09 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ทิศทางราคาในช่วงครึ่งชั่วโมงนี้แสดงรายละเอียดที่การสรุปข่าวส่วนใหญ่มักมองข้าม นั่นคือวันที่ 9 มีนาคม ไม่ได้เป็นการดิ่งลงทางเดียว หลังจากเกิดช่องว่างราคาขาลง (gap down) SPY ได้ดีดตัวขึ้นในช่วงสาย โดยปิดตลาดที่ระดับ $69.49 ตามช่วงเวลา 10:00 ET ซึ่งต่ำกว่าระดับสูงสุดของวันที่ $70 เมื่อเวลา 10:13 เพียงเล็กน้อย จากนั้นในช่วงบ่ายราคาได้ปรับตัวลดลงมาอยู่ที่ระดับต่ำสุดที่ $67.73 เมื่อเวลา 15:17 และมีการดีดตัวขึ้นเล็กน้อยก่อนปิดตลาด รูปแบบคือการดีดตัว ตามด้วยการอ่อนแรง และการดีดตัวเล็กน้อย ซึ่งเป็นรูปแบบที่ปกติมาก ไม่มีการดิ่งลงอย่างรุนแรง (waterfall) ไม่พบสัญญาณปริมาณการซื้อขายที่ตื่นตระหนก และไม่มีลักษณะการกลับตัวแบบ V-bottom เมื่อเปรียบเทียบกับความเร่งรีบในช่วงปิดตลาดของ วันจันทร์ของ Lehman หรือสภาวะสุญญากาศของ เหตุการณ์ flash crash กรณีนี้ถือเป็นรูปแบบที่แตกต่างออกไปอย่างสิ้นเชิง นั่นคือสภาวะตลาดที่ขาดแรงซื้อ (exhausted tape) โดยเหตุการณ์ดิ่งลงหลายเปอร์เซ็นต์ในช่วงฤดูหนาวนั้นได้เกิดขึ้นไปหมดแล้วในช่วงสัปดาห์ก่อนหน้า จุดต่ำสุดของวันเกิดจากการที่แรงขายหมดลงเพียงเท่านั้น
ปัจจัยที่ทำให้ตลาดเปลี่ยนทิศทาง
ข้อมูลเมื่อวันจันทร์ไม่ได้อธิบายถึงสิ่งที่เกิดขึ้นในวันอังคาร การเปลี่ยนทิศทางเกิดขึ้นพร้อมกับกระแสข่าว ไม่ใช่จากปริมาณการซื้อขาย ก่อนตลาดเปิดในวันอังคาร มีบันทึกภายในจาก Vikram Pandit ประธานเจ้าหน้าที่บริหารของ Citigroup หลุดไปยังสื่อมวลชน โดยระบุว่าธนาคารมีกำไรในเดือนมกราคมและกุมภาพันธ์ 2009 ซึ่งเป็นช่วงเวลาสองเดือนที่ดีที่สุดนับตั้งแต่ปี 2007 Citigroup ซึ่งเป็นศูนย์กลางของวิกฤตและซื้อขายที่ราคา $1.05 เมื่อปิดตลาดวันจันทร์ ไม่ได้มีข่าวดีจากแหล่งข้อมูลปฐมภูมิมานานหลายเดือน ต่อไปนี้คือข้อมูลการซื้อขายในช่วงห้าเซสชันหลังจากจุดต่ำสุด:
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH daily AS (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
argMaxIf(toFloat64(close), window_start, ticker = 'SPY' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS spy_close_raw,
round(argMaxIf(toFloat64(close), window_start, ticker = 'C' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS citi_close,
round(toFloat64(sumIf(volume, ticker = 'SPY')) / 1e6, 1) AS spy_shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'C')
AND window_start >= toDateTime('2009-03-06 04:00:00') AND window_start < toDateTime('2009-03-14 00:00:00')
GROUP BY et_date
)
SELECT
toString(d.et_date) AS session,
round(d.spy_close_raw, 2) AS spy_close,
round((d.spy_close_raw / d.prev_close - 1) * 100, 1) AS spy_change_pct,
d.spy_shares_m,
d.citi_close,
t.ten_year_pct
FROM (
SELECT *, lagInFrame(spy_close_raw) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
FROM daily
) AS d
LEFT JOIN (
SELECT date, round(toFloat64(yield_10_year), 2) AS ten_year_pct
FROM global_markets.treasury_yields
WHERE date BETWEEN '2009-03-09' AND '2009-03-13'
) AS t ON d.et_date = t.date
WHERE d.et_date >= toDate('2009-03-09')
ORDER BY d.et_dateวันที่ 10 มีนาคม เปิดตลาดสูงขึ้นและรักษาฐานราคาไว้ได้ โดย SPY ปิดที่ $72.21 เพิ่มขึ้น 6.1% ด้วยปริมาณการซื้อขาย 401.3 ล้านหุ้น ซึ่งมีปริมาณการซื้อขายมากกว่าวันที่มีจุดต่ำสุดเสียอีก Citigroup ปิดที่ $1.44 เมื่อถึงวันศุกร์ SPY อยู่ที่ $76.09 และ Citigroup อยู่ที่ $1.78 อัตราผลตอบแทนพันธบัตรอายุ 10 ปี เพิ่มขึ้นจาก 2.89% เป็น 2.99% ในวันอังคารเดียวกัน ซึ่งแสดงถึงเม็ดเงินที่ไหลออกจากสินทรัพย์ที่มีความปลอดภัยสูงสุดควบคู่ไปกับการฟื้นตัวของตลาดหุ้น หรือเป็นการเคลื่อนย้ายเงินทุนในทิศทางตรงกันข้ามกับกลยุทธ์ flight-to-quality
ข้อควรระวังที่สำคัญคือ: ในช่วงฤดูหนาวนั้นเคยมีการพุ่งขึ้นของราคาหลายครั้งในระดับหลายเปอร์เซ็นต์แต่ไม่สำเร็จ และไม่มีสิ่งใดในวันที่ 10 มีนาคม ที่ยืนยันได้ว่าครั้งนี้จะแตกต่างออกไป บันทึกของ Pandit คือจุดเปลี่ยนที่นักประวัติศาสตร์ใช้ระบุเหตุการณ์ ส่วนสิ่งที่ข้อมูลการซื้อขายแสดงให้เห็น — และแสดงให้เห็นในข้างต้น — คือความประจวบเหมาะของช่วงเวลาที่เกิดขึ้นพร้อมกัน
จุดต่ำสุดนี้ยังคงอยู่หรือไม่?
จุดต่ำสุดจะถือเป็นจุดต่ำสุดก็ต่อเมื่อตลาดไม่กลับลงไปทดสอบอีกครั้ง แผงข้อมูลนี้ติดตามราคาของ SPY รายสัปดาห์จนถึงสิ้นเดือนมิถุนายน 2009 โดยแสดงราคาต่ำสุดและราคาปิดของแต่ละสัปดาห์ พร้อมด้วยค่าต่ำสุดสะสมในคอลัมน์สุดท้าย:
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH daily AS (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS day_low,
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 day_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2009-03-10 04:00:00') AND window_start < toDateTime('2009-06-27 00:00:00')
GROUP BY et_date
)
SELECT
week_of,
week_low,
week_close,
round(min(week_low) OVER (), 2) AS lowest_low_after_mar9
FROM (
SELECT
toString(toMonday(et_date)) AS week_of,
round(min(day_low), 2) AS week_low,
round(argMax(day_close, et_date), 2) AS week_close
FROM daily
GROUP BY week_of
)
ORDER BY week_ofราคาต่ำสุดของ SPY ในช่วงสิบหกสัปดาห์หลังจากวันที่ 9 มีนาคม คือ $69.37 ซึ่งเกิดขึ้นในสัปดาห์แรกหลังจากจุดต่ำสุด (2009-03-09) หลังจากนั้น SPY ไม่เคยซื้อขายต่ำกว่าราคาปิดของวันที่ 9 มีนาคม ที่ระดับ $68.07 อีกเลย และไม่ได้ลงไปแตะระดับต่ำสุดระหว่างวันที่ $67.73 ด้วยซ้ำ ไม่มีการทดสอบซ้ำ ไม่มีการให้โอกาสครั้งที่สอง และไม่มีการย่อตัวลงมาที่ระดับเดิม โดยในสัปดาห์ของ 2009-05-04 SPY ปิดที่ระดับ $93.04 ซึ่งสูงกว่าจุดต่ำสุดถึงสามส่วนภายในเก้าสัปดาห์ การรอการยืนยันนั้นมีต้นทุน และแผงข้อมูลนี้แสดงค่าดังกล่าวไว้อย่างชัดเจน
กลุ่มผู้นำการฟื้นตัวจากจุดต่ำสุด
กลุ่มธนาคารที่เป็นต้นเหตุของความเสียหาย เป็นกลุ่มเดียวกับที่เป็นหัวใจสำคัญของการฟื้นตัว ในช่วงหนึ่งปีนับจากจุดต่ำสุดเมื่อใกล้ถึงวันที่ 9 มีนาคม 2010:
SQL เบื้องหลังตัวเลขแต่ละตัว
SELECT
ticker,
round(b_close, 2) AS close_mar9_2009,
round(y_close, 2) AS close_mar9_2010,
round((y_close / b_close - 1) * 100, 0) AS pct_1yr,
fin AS financial
FROM (
SELECT
ticker,
argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2009-03-09') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS b_close,
argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2010-03-09') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS y_close,
max(ticker IN ('C', 'BAC', 'WFC', 'JPM', 'GS', 'XLF')) AS fin
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('C', 'BAC', 'WFC', 'JPM', 'GS', 'XLF', 'SPY', 'AAPL', 'XOM')
AND ((window_start >= toDateTime('2009-03-09 04:00:00') AND window_start < toDateTime('2009-03-10 04:00:00'))
OR (window_start >= toDateTime('2010-03-09 04:00:00') AND window_start < toDateTime('2010-03-10 04:00:00')))
GROUP BY ticker
)
ORDER BY pct_1yr DESCกลุ่มที่มีผลตอบแทนสูงสุด: BAC เพิ่มขึ้น 349%, C เพิ่มขึ้น 265% (จากราคาหุ้นละ $1.05), WFC เพิ่มขึ้น 190% ซึ่งเป็นกลุ่มสถาบันการเงินขนาดใหญ่ที่ได้รับความเสียหายมากที่สุด โดยราคาพุ่งขึ้นถึงสามเท่าและสี่เท่าจากระดับราคาที่เคยคาดการณ์ว่าเลวร้ายที่สุด ทั้งนี้ในดัชนีไม่ได้มีเพียงกลุ่มธนาคารเท่านั้น โดย AAPL ให้ผลตอบแทน 168% ในช่วงเวลาเดียวกัน แต่ข้อสรุปของดัชนีระบุว่าหุ้นที่มีผลงานดีที่สุดคือหุ้นในกลุ่มการเงิน ในขณะที่ตลาดโดยรวม (SPY) ปรับตัวขึ้น 68% และ XOM ซึ่งเป็นหุ้นกลุ่มปลอดภัย (defensive) ที่เคยประคองดัชนีได้ดีที่สุดในช่วงขาลง กลับปรับตัวขึ้นเพียง 3% การฟื้นตัวในครั้งนี้ส่งผลให้ลำดับหุ้นที่ทำผลงานได้ดีที่สุดพลิกกลับจากช่วงขาลงอย่างชัดเจน
การเปรียบเทียบกับจุดต่ำสุดอื่นๆ
ข้อมูลย้อนหลังเริ่มต้นตั้งแต่เดือนกันยายน 2003 ดังนั้นจุดต่ำสุดจากวิกฤต dot-com ในเดือนตุลาคม 2002 จึงอยู่นอกช่วงข้อมูลที่มีอยู่ เมื่อเปรียบเทียบกับจุดต่ำสุดของราคาปิดที่ลึกที่สุดสามครั้งนับตั้งแต่นั้นมา ข้อมูลของเดือนมีนาคม 2009 เป็นดังนี้:
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH daily AS (
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('2009-03-09 04:00:00') AND window_start < toDateTime('2010-03-17 00:00:00'))
OR (window_start >= toDateTime('2011-10-03 04:00:00') AND window_start < toDateTime('2012-10-10 00:00:00'))
OR (window_start >= toDateTime('2018-12-24 04:00:00') AND window_start < toDateTime('2019-12-31 00:00:00'))
OR (window_start >= toDateTime('2020-03-23 04:00:00') AND window_start < toDateTime('2021-03-30 00:00:00')))
GROUP BY et_date
)
SELECT
bottom_session,
round(argMin(close_usd, et_date), 2) AS bottom_close,
round((argMinIf(close_usd, et_date, et_date >= toDate(bottom_session) + 91) / argMin(close_usd, et_date) - 1) * 100, 1) AS plus_3mo_pct,
round((argMinIf(close_usd, et_date, et_date >= toDate(bottom_session) + 365) / argMin(close_usd, et_date) - 1) * 100, 1) AS plus_1yr_pct
FROM (
SELECT
multiIf(et_date >= toDate('2020-03-23'), '2020-03-23',
et_date >= toDate('2018-12-24'), '2018-12-24',
et_date >= toDate('2011-10-03'), '2011-10-03',
'2009-03-09') AS bottom_session,
et_date,
close_usd
FROM daily
)
GROUP BY bottom_session
ORDER BY bottom_sessionจากจุดต่ำสุดในปี 2009 ดัชนี SPY ปรับตัวขึ้น 38.5% ภายในสามเดือน และ 68.1% ภายในหนึ่งปี ซึ่งถือเป็นช่วงเวลาสิบสองเดือนที่แข็งแกร่งที่สุดเท่าที่นักลงทุนส่วนใหญ่เคยพบเห็น โดยเริ่มต้นจากวันที่ดูปกติที่สุดในช่วงวิกฤต มีเพียง จุดต่ำสุดจาก COVID ในเดือนมีนาคม 2020 เท่านั้นที่อยู่ในระดับเดียวกัน โดยปรับตัวขึ้น +75.1% ในปีแรก ซึ่งรายละเอียดของ การฟื้นตัวจากการกระตุ้นเศรษฐกิจในปี 2020 มีเนื้อหาแยกต่างหากอีกหน้าหนึ่ง ส่วนจุดต่ำสุดในช่วงการปรับฐานปี 2011 และ 2018 ซึ่งเป็นสภาวะตื่นตระหนกอย่างแท้กันในขณะนั้น ปรับตัวขึ้น 31.4% และ 37.1% ในปีแรก รูปแบบที่พบจากทั้งสี่เหตุการณ์คือ ยิ่งจุดต่ำสุดลึกเท่าใด การฟื้นตัวในช่วงแรกจะยิ่งชันขึ้นเท่านั้น และการฟื้นตัวในช่วงแรกนั้นมักจะเป็นช่วงที่ชันที่สุดของการฟื้นตัวทั้งหมด
ทำไมจุดต่ำสุดจึงมองเห็นได้จากเหตุการณ์ในอดีตเท่านั้น
กลไกตามความเป็นจริง: จุดต่ำสุดถูกกำหนดโดยสิ่งที่ ไม่เกิดขึ้น หลังจากนั้น นั่นคือต้องไม่มีการทำจุดต่ำสุดใหม่ (lower low) ซึ่งโดยธรรมชาติแล้วเราไม่สามารถทราบได้ในเวลาจริง สัญญาณ "จุดต่ำสุด" เชิงปริมาณทุกรูปแบบที่เคยมีการนำเสนอมานั้น เกิดขึ้นซ้ำแล้วซ้ำเล่าในช่วงที่ตลาดขาลงจนถึงปลายปี 2008 แม้แต่ในเซสชันวันที่ 9 มีนาคม เองก็มีลักษณะไม่โดดเด่นในทุกดัชนีชี้วัด ทั้งรูปแบบราคาที่ปกติ ปริมาณการซื้อขายที่ต่ำกว่าค่าเฉลี่ย และปัจจัยกระตุ้นจากข่าวที่เพิ่งเกิดขึ้นในเช้าวันถัดไป ใครก็ตามที่อ้างว่าตัวบ่งชี้ของตนสามารถทำนายวันนี้ได้ กำลังอธิบายถึงปรากฏการณ์การคัดเลือกข้อมูลที่รอดชีวิต (survivorship) และ "จุดต่ำสุด" จำนวนมากก่อนหน้านี้ที่ตัวบ่งชี้ดังกล่าวทำนายไว้ ก็คือหลักฐานยืนยันถึงความผิดพลาดนั้น
บทเรียนที่ได้รับจากเหตุการณ์นี้: จงเตรียมพร้อมสำหรับช่วงของผลลัพธ์ที่อาจเกิดขึ้น แทนที่จะมุ่งเน้นเพียงจุดราคาใดจุดหนึ่ง นักลงทุนที่ทำกำไรได้ดีตั้งแต่เดือนมีนาคม 2009 ส่วนใหญ่คือกลุ่มที่ซื้อสะสมตามแผนตลอดช่วงฤดูหนาวที่ย่ำแย่ ซึ่งเป็นแนวทางที่ มาตรฐานการวัดผลตอบแทน ยอมรับโดยปริมาณ ไม่ใช่กลุ่มที่สามารถหาจุดต่ำสุดที่แม่-แม่นยำได้ บทบาทของราคาในวินัยการลงทุนนี้คือการปรับค่ามาตรฐาน ไม่ใช่การพยากรณ์ การเข้าใจว่าลักษณะราคาที่ปกติเป็นอย่างไร จะช่วยป้องกันไม่ให้วันจันทร์ที่เงียบเหงาถูกเข้าใจผิดว่าเป็นอีกหนึ่งวันของการดิ่งลง ทั้งที่ในความเป็นจริง ขาลงนั้นได้สิ้นสุดลงแล้ว
คำถามที่พบบ่อยเกี่ยวกับจุดต่ำสุดในเดือนมีนาคม 2009
จุดต่ำสุดที่แท้จริงของวิกฤตการณ์ช่วงปี 2008-2009 คือเมื่อใด?
ราคาปิดต่ำสุดเกิดขึ้นเมื่อวันจันทร์ที่ 9 มีนาคม 2009 โดย SPY อยู่ที่ $68.07 และดัชนี S&P 500 อยู่ที่ระดับ 676.53 ตามที่มีการอ้างถึงกันอย่างแพร่หลาย ส่วนตัวเลข "666" ระหว่างวันที่เป็นที่รู้จักกันดีของดัชนีนั้นเกิดขึ้นก่อนหน้านั้นหนึ่งเซสชัน คือเมื่อวันศุกร์ที่ 6 มีนาคม
ตลาดหุ้นปรับตัวลดลงเท่าใดในช่วงปี 2007 ถึง 2009?
SPY ปรับตัวลดลง -56.5% เมื่อพิจารณาจากราคาปิด โดยลดลงจาก $156.41 ใน 2007-10-09 มาอยู่ที่ $68.07 ใน 2009-03-09 ซึ่งถือเป็นการปรับตัวลดลงของหุ้นสหรัฐฯ ที่รุนแรงที่สุดนับตั้งแต่ทศวรรษ 1930
เกิดอะไรขึ้นในวันที่ 10 มีนาคม 2009?
เป็นเซสชันแรกหลังจากจุดต่ำสุด โดย SPY ปรับตัวขึ้น 6.1% หลังจากมีการรั่วไหลของบันทึกภายในของ Citigroup ในช่วงข้ามคืน ซึ่งระบุว่าธนาคารมีกำไรในเดือนมกราคมและกุมภาพันธ์ ตัว Citigroup เองปิดที่ $1.44 เพิ่มขึ้นจากระดับต่ำสุดที่ $1.05
ตลาดฟื้นตัวจากจุดต่ำสุดในปี 2009 เร็วเพียงใด?
ปีแรกถือเป็นปีที่สร้างประวัติศาสตร์ โดย SPY ปรับตัวขึ้น 68.1% จากราคาปิด ณ จุดต่ำสุด การฟื้นตัวจากระดับการปรับตัวลดลงตลอดช่วงวิกฤตนั้นใช้เวลานานกว่ามาก โดยราคาปิดครั้งแรกที่กลับขึ้นไปเหนือระดับสูงสุดในเดือนตุลาคม 2007 คือวันที่ 2013-03-14
มีสัญญาณใดบ่งบอกถึงจุดต่ำสุดล่วงหน้าหรือไม่?
ไม่มีข้อมูลใดในกระดานซื้อขายที่ทำให้วันที่ 9 มีนาคม แตกต่างจากสัปดาห์รอบข้าง โดยเซสชันดังกล่าวมีปริมาณการซื้อขายที่เงียบเหงาและปริมาณการซื้อขายต่ำกว่าค่าเฉลี่ย 20 วัน จุดต่ำสุดนี้กลายเป็นจุดต่ำสุดในภายหลังเนื่องจากไม่มีราคาใดต่ำกว่านั้น โดยราคาซื้อขายที่ต่ำที่สุดในอีกสิบหกสัปดาห์ถัดมายังคงสูงกว่าราคาปิดของวันที่ 9 มีนาคม
ทุกแผงข้อมูลด้านบนคือผลลัพธ์จากการดึงข้อมูลประวัติศาสตร์ผ่านคำสั่ง SQL ที่มีการจัดเก็บเป็นเวอร์ชัน คุณสามารถขยายคำสั่ง SQL เพื่อดูรายละเอียดการวัดผลแต่ละรายการ หากต้องการสัมผัสประสบการณ์ในวันดังกล่าวแทนการอ่านข้อมูล สามารถทดลองได้ใน โปรแกรมจำลองการซื้อขายของ Strasmore Labs