9 مارس 2009: القاع على شريط التداول
كان 9 مارس 2009 قاع الأزمة المالية، لكن شريط التداول يظهر اثنين هادئاً بلا إشارة واضحة. تعرّف إلى شكل القيعان التاريخية لحظة بلحظة عبر بيانات دقيقة بدقيقة.
يُعد 9 مارس 2009 أحد أهم التواريخ في تاريخ الأسواق الحديثة: إذ سجّل الإغلاق الأدنى للأزمة المالية، بانخفاض -56.5% عن ذروة أكتوبر 2007، وكان أول أيام سوق صاعدة استمرت أكثر من عقد. تورد كتب التاريخ مستويات المؤشرات في ذلك الاثنين: 676.53 على مؤشر S&P 500، و6,547 على مؤشر Dow. أما البيانات أدناه فتستخدم SPY، وهو ETF يتتبع مؤشر S&P 500، وتخزّن قاعدة البيانات شريط تداولاته دقيقة بدقيقة منذ عام 2003. لكن هذه التسجيلات تحفظ حقيقة غير مريحة: لم يكن في الجلسة ما يعلن ذلك. لم نشهد ذروة استسلام، ولا شرارة انعكاس، بل كان ذلك مجرد اثنين هادئاً ومتراجعاً على نحو متواصل، اتضح لاحقاً أنه الأخير. كل رقم ناتج عن استعلام مخزّن؛ وسّع أي لوحة لعرض SQL.
الطريق إلى القاع
وصلت الأزمة على مراحل، وتهمّ التواريخ لفهم كل ما يلي. بيع Bear Stearns إلى JPMorgan في مارس 2008. تقدمت Lehman Brothers بطلب الإفلاس يوم الاثنين 15 سبتمبر 2008، في جلسة لها صفحة مستقلة هنا. أقرّ الكونغرس برنامج TARP، وهو صندوق إنقاذ البنوك البالغ 700 مليار دولار، في 3 أكتوبر. ووسّعت الحكومة إنقاذ AIG مرتين. وحصلت Citigroup على ضمان اتحادي ثانٍ في نوفمبر. تلاشى ارتفاع شتوي، وبحلول أواخر فبراير 2009 كانت المؤشرات قد كسرت قيعان نوفمبر وواصلت الهبوط. ويلخّص صف واحد ذلك المسار الممتد 17 شهراً:
| أعلى إغلاق | تاريخ القمة | أدنى إغلاق | تاريخ القاع | نسبة التراجع | تاريخ التعافي |
|---|---|---|---|---|---|
| 156.41 | 2007-10-09 | 68.07 | 2009-03-09 | -56.5 | 2013-03-14 |
استعلام 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%، وهو الأعمق منذ ثلاثينيات القرن الماضي. ويحمل الصف نفسه الرقم الذي يسأل عنه المستثمرون طويلو الأجل تالياً: رحلة العودة الكاملة. لم يغلق SPY فوق قمته المسجلة في 2007 مجدداً حتى 2013-03-14، أي بعد أربع سنوات من القاع وخمس سنوات ونصف من القمة. ويرد أدناه توثيق مستقل لكل من شطري هذه الحسابات.
اليوم، في صف واحد
| الإغلاق السابق | افتتاح RTH | نسبة الفجوة | أعلى سعر في RTH | أعلى سعر عند ET | أدنى سعر في RTH | أدنى سعر عند ET | إغلاق RTH | نسبة التغير اليومي | أسهم اليوم بالملايين | متوسط الأسهم لـ20 يومًا بالملايين | متوسط الأسهم لـ60 يومًا بالملايين | حجم التداول مقارنةً بـ20 يومًا | أشرطة دقائق RTH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 68.84 | 67.95 | -1.3 | 70 | 10:13 | 67.73 | 15:17 | 68.07 | -1.1 | 357.4 | 406.3 | 337.9 | -12 | 390 |
استعلام 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، منخفضاً بفجوة قدرها -1.3% عن إغلاق يوم الجمعة البالغ $68.84. ولامس $70 عند الساعة 10:13 بتوقيت ET، ثم تراجع إلى أدنى مستوى عند $67.73 في وقت متأخر من الجلسة، عند الساعة 15:17 بتوقيت ET، وأغلق عند $68.07، مسجلاً -1.1% خلال اليوم. بلغ نطاق الجلسة بأكملها نحو دولارين. وقد جاء أهم إغلاق في جيل كامل من دون دقيقة واحدة درامية.
يجيب حجم التداول عن سؤال لا يجيب عنه الرقم المجرد وحده: هل كان تداول 357.4 مليون سهم صاخباً أم هادئاً؟ في مارس 2009، كان هادئاً. بلغ متوسط تداول أسهم SPY خلال الجلسات العشرين السابقة 406.3 مليون سهم يومياً، وكان القاع عند -12% مقارنةً بذلك المتوسط، بينما بلغ متوسط الجلسات الستين السابقة 337.9 مليون سهم. تفترض رواية الاستسلام أن القيعان الفارقة بين الأجيال تأتي مع تداولات قياسية وحادة. لكن أشهر قاع في العصر الحديث شهد تداولاً أقل من يوم عادي في الشهر نفسه.
شكل الجلسة
| وقت ET | إغلاق الفترة | أدنى سعر للفترة | الأسهم بالملايين |
|---|---|---|---|
| 09:30 | 68.95 | 67.95 | 40.5 |
| 10:00 | 69.49 | 68.9 | 31.8 |
| 10:30 | 68.9 | 68.82 | 25.6 |
| 11:00 | 68.99 | 68.6 | 21.6 |
| 11:30 | 68.95 | 68.71 | 18.7 |
| 12:00 | 69.13 | 68.83 | 14.5 |
| 12:30 | 68.79 | 68.65 | 15.7 |
| 13:00 | 68.34 | 68.13 | 21.1 |
| 13:30 | 68.48 | 68.25 | 15.7 |
| 14:00 | 68.57 | 68.33 | 25.9 |
| 14:30 | 68.43 | 67.95 | 24.5 |
| 15:00 | 68.05 | 67.73 | 28.3 |
| 15:30 | 68.07 | 67.78 | 44.3 |
استعلام 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 مارس هبوطاً في اتجاه واحد. بعد الفجوة الهابطة، ارتفع SPY خلال منتصف الصباح. وأغلق نطاق 10:00 ET عند $69.49، أي أقل بقليل من أعلى مستوى يومي عند $70 الذي سُجّل في 10:13. ثم أمضى فترة بعد الظهر متراجعاً عن معظم مكاسبه، وهبط تدريجياً إلى أدنى مستوى عند $67.73 في 15:17، قبل أن يرتد قليلاً قبيل الإغلاق. ارتفاع، ثم تلاشي للمكاسب، ثم ارتداد صغير: شكل اعتيادي تماماً. لم يكن هناك هبوط متسارع، ولا بصمة حجم تداول تعكس الذعر، ولا ارتداد على شكل V. قارن ذلك بالإلحاح الذي ميّز إغلاق يوم ليمان عند أدنى مستوى، أو بالفراغ السعري في الانهيار الخاطف: فهذا نوع ثالث مختلف تماماً، هو شريط سعري مستنفد. كانت الانهيارات التي بلغت نسبتها عدة نقاط مئوية في ذلك الشتاء قد وقعت كلها خلال الأسابيع السابقة. أما القاع نفسه، فكان اليوم الذي نفد فيه ببساطة البائعون الراغبون في البيع.
ما الذي قلب مسار السوق؟
لا تفسّر أي من بيانات يوم الاثنين ما حدث يوم الثلاثاء. فقد جاء التحول مع دورة الأخبار، لا مع حركة التداول. وقبل افتتاح السوق يوم الثلاثاء، تسرّبت إلى الصحافة مذكرة داخلية من الرئيس التنفيذي لـ Citigroup، فيكرام بانديت. وأفادت المذكرة بأن البنك حقق أرباحاً في يناير وفبراير 2009، في أفضل فترة من شهرين له منذ عام 2007. وكان Citigroup، بؤرة الأزمة، يتداول عند سعر 1.05 دولاراً عند إغلاق يوم الاثنين، ولم يكن قد أصدر خبراً إيجابياً من مصدر أولي منذ أشهر. وهذا ما تسجله حركة التداول في الجلسات الخمس التي أعقبت القاع:
| الجلسة | إغلاق SPY | نسبة تغير SPY | أسهم SPY بالملايين | إغلاق Citi | نسبة السندات لأجل 10 سنوات |
|---|---|---|---|---|---|
| 2009-03-09 | 68.07 | -1.1 | 357.4 | 1.05 | 2.89 |
| 2009-03-10 | 72.21 | 6.1 | 401.3 | 1.44 | 2.99 |
| 2009-03-11 | 72.6 | 0.5 | 350.1 | 1.54 | 2.95 |
| 2009-03-12 | 75.51 | 4 | 407.4 | 1.66 | 2.89 |
| 2009-03-13 | 76.09 | 0.8 | 332.7 | 1.78 | 2.89 |
استعلام 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 دولاراً. وارتفع عائد سندات الخزانة لأجل عشر سنوات من 2.89% إلى 2.99% خلال يوم الثلاثاء نفسه. وانتقلت الأموال بعيداً عن الأصل الأكثر أماناً بالتزامن مع صعود الأسهم، وانعكست بذلك صفقة اللجوء إلى الأمان.
أما التحفظ الضروري، فهو أن عدة موجات صعود بنسبة مئوية كبيرة كانت قد حدثت وفشلت في ذلك الشتاء، ولم يثبت أي شيء في 10 مارس أن هذه الموجة مختلفة. وتُعد مذكرة بانديت العلامة التي يربط بها المؤرخون نقطة التحول. أما ما تستطيع حركة التداول إظهاره، وتظهره فعلاً أعلاه، فهو تزامن التوقيت.
هل صمد القاع؟
لا يكون القاع قاعاً فعلياً إلا إذا لم يعد السوق إلى مستواه. يتتبع هذا الجدول حركة SPY أسبوعاً بعد أسبوع حتى نهاية يونيو 2009، مع أدنى صفقة في كل أسبوع والإغلاق النهائي، فيما يوضح العمود الأخير الحد الأدنى المتحرك:
| أسبوع يبدأ في | أدنى سعر أسبوعي | إغلاق الأسبوع | أدنى سعر بعد mar9 |
|---|---|---|---|
| 2009-03-09 | 69.37 | 76.09 | 69.37 |
| 2009-03-16 | 75.45 | 76.71 | 69.37 |
| 2009-03-23 | 78.31 | 81.62 | 69.37 |
| 2009-03-30 | 77.96 | 84.25 | 69.37 |
| 2009-04-06 | 81.51 | 85.82 | 69.37 |
| 2009-04-13 | 83.61 | 87.11 | 69.37 |
| 2009-04-20 | 82.75 | 86.65 | 69.37 |
| 2009-04-27 | 84.76 | 87.87 | 69.37 |
| 2009-05-04 | 88.38 | 93.04 | 69.37 |
| 2009-05-11 | 88.15 | 88.7 | 69.37 |
| 2009-05-18 | 88.26 | 89.06 | 69.37 |
| 2009-05-25 | 88.32 | 92.65 | 69.37 |
| 2009-06-01 | 87.53 | 94.53 | 69.37 |
| 2009-06-08 | 93.04 | 95.12 | 69.37 |
| 2009-06-15 | 90.83 | 91.97 | 69.37 |
| 2009-06-22 | 88.85 | 91.78 | 69.37 |
استعلام 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:
| ticker | إغلاق mar9 2009 | إغلاق mar9 2010 | النسبة المئوية لسنة واحدة | مالي |
|---|---|---|---|---|
| BAC | 3.75 | 16.82 | 349 | 1 |
| C | 1.05 | 3.83 | 265 | 1 |
| WFC | 10 | 28.97 | 190 | 1 |
| AAPL | 83.15 | 223.17 | 168 | 0 |
| JPM | 15.9 | 42.39 | 167 | 1 |
| XLF | 6.35 | 15.3 | 141 | 1 |
| GS | 73.86 | 168.97 | 129 | 1 |
| SPY | 68.07 | 114.45 | 68 | 0 |
| XOM | 64.56 | 66.79 | 3 | 0 |
استعلام 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، العملاق الدفاعي الذي صمد بأفضل صورة أثناء الهبوط، ارتفاعاً لا يتجاوز 3%. وقد عكس الارتداد ترتيب المتصدرين خلال الهبوط بصورة شبه تامة.
كيف يقارن بالقيعان الأخرى
يبدأ الشريط اللحظي هنا في سبتمبر 2003، لذلك يقع قاع فقاعة الإنترنت في أكتوبر 2002 خارج نطاق البيانات المتاحة. وبالمقارنة مع أعمق ثلاثة قيعان إغلاق منذ ذلك الحين، تبدو حركة مارس 2009 على النحو الآتي:
| جلسة القاع | إغلاق القاع | النسبة المئوية بعد 3 أشهر | النسبة المئوية بعد سنة |
|---|---|---|---|
| 2009-03-09 | 68.07 | 38.5 | 68.1 |
| 2011-10-03 | 109.92 | 16.1 | 31.4 |
| 2018-12-24 | 234.37 | 19.1 | 37.1 |
| 2020-03-23 | 222.51 | 39.6 | 75.1 |
استعلام 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% خلال عام. وكان ذلك أقوى أداء خلال اثني عشر شهراً شهده معظم المستثمرين الأحياء، وقد بدأ في يوم بدا عادياً للغاية وسط الأزمة. ولا يضاهيه في هذه الفئة سوى قاع كوفيد-19 في مارس 2020، الذي سجل ارتفاعاً قدره +75.1% خلال عامه الأول. وتفاصيل ارتفاع التحفيز في 2020 موضحة في صفحة مستقلة. أما قاعا التصحيح في 2011 و2018، اللذان مثّلا حالتي هلع حقيقيتين في حينهما، فقد حققا عائدين قدرهما 31.4% و37.1% خلال عامهما الأول. والنمط المشترك بين القيعان الأربعة هو أن عمق الهبوط يحدد شدة الارتفاع الأول، وأن هذا الارتفاع كان دائماً الأقوى ضمن مسار التعافي.
لماذا لا تظهر القيعان إلا بأثر رجعي
الآلية الفعلية بسيطة: يُحدَّد القاع بما لا يحدث بعده، أي عدم تسجيل قاع أدنى. وهذا أمر لا يمكن معرفته لحظياً بحكم التعريف. كل «إشارة قاع» كمية طُرحت على الإطلاق أطلقت إشارات متكررة أثناء الهبوط حتى أواخر 2008. أما جلسة 9 مارس نفسها، فلم تسجّل نتيجة لافتة وفق أي منها. كان شكلها عادياً، وحجم التداول فيها أقل من المتوسط، ولم يصل محفز الأخبار إلا في صباح اليوم التالي. وكل من يدّعي أن مؤشّره حدّد هذا اليوم يصف انحياز البقاء. أما القيعان الكثيرة السابقة التي حدّدها المؤشر نفسه، فهي الدليل على ذلك.
ما يعلّمه ذلك اليوم فعلاً هو بناء المراكز على أساس نطاقات من النتائج، لا نقاط محددة. فالمستثمرون الذين حققوا أداءً جيداً منذ مارس 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، وهو أعمق تراجع للأسهم الأمريكية منذ ثلاثينيات القرن الماضي.
ماذا حدث في 10 مارس 2009؟
كانت تلك أول جلسة بعد القاع. ارتفع SPY بنسبة 6.1% بعد تسرّب مذكرة داخلية لـ Citigroup خلال الليل، أفادت بأن البنك حقق أرباحاً في يناير وفبراير. وأغلق سهم Citigroup عند $1.44، مقارنةً بـ $1.05 عند القاع.
ما سرعة تعافي السوق من قاع 2009؟
كان العام الأول تاريخياً؛ إذ ارتفع SPY بنسبة 68.1% من إغلاق القاع. أما استعادة كامل التراجع الناجم عن الأزمة، فقد استغرقت وقتاً أطول بكثير. وجاء أول إغلاق يتجاوز قمة أكتوبر 2007 في 2013-03-14.
هل أشار أي شيء إلى القاع مسبقاً؟
لم يميّز أي شيء في التداولات يوم 9 مارس عن الأسابيع المحيطة به. كانت الجلسة هادئة، وجاء حجم التداول دون متوسطه الخاص لعشرين يوماً. أصبح القاع قاعاً بأثر رجعي لأنه لم يُكسر لاحقاً؛ فقد ظل أدنى تداول خلال الأسابيع الستة عشر التالية أعلى حتى من إغلاق 9 مارس.
كل لوحة أعلاه عبارة عن استعلام مخزّن ومُصدَر بإصدار محدد، ويغطي بيانات التداول التاريخية. وسّع SQL للاطلاع على كل قياس. هل تريد أن تعايش ذلك اليوم بدلاً من قراءته؟ إنه أحد السيناريوهات القابلة للعب في محاكي التداول من Strasmore Labs.