קריסת הבורסה של 2010: ניתוח דקה אחר דקה
בשישה במאי אלפיים ועשר נעלם טריליון דולר משווי השוק וחזר בתוך שלושים ושישה דקות. סקירה מפורטת של רצף המסחר והאירועים החריגים שהתרחשו במהלך ה-Flash Crash.
ב-6 במאי 2010, שוק המניות האמריקאי קרס ולאחר מכן התאושש בתוך מעט יותר מחצי שעה. אירוע ה-"Flash Crash" נותר פרק המסחר המוזר ביותר בהיסטוריה המודרנית של השווקים. קרוב לטריליון דולר משווי השוק נעלמו ורובם חזרו; בדרך, מניות מוכרות נסגרו בעסקאות במחירים של 0.01 ו-100000 דולר למניה. להלן: רצף המסחר לפי דקות, זמני השעון, המניות המדוברות, ושאילתה שמורה מאחורי כל מספר. הרחיבו כל פאנל לצפייה ב-SQL.
היום, בשורה אחת
| סגירה קודמת | פתיחת RTH | אחוז גאפ | שפל RTH | שפל ET | סגירת RTH | שינוי יומי (%) | שפל מול קודם (%) | נפח יומי (M) | נרות דקה RTH |
|---|---|---|---|---|---|---|---|---|---|
| 116.83 | 116.26 | -0.5 | 105 | 14:45 | 112.88 | -3.4 | -10.1 | 639.9 | 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('2010-05-05 00:00:00') AND window_start < toDateTime('2010-05-06 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(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('2010-05-06 04:00:00') AND window_start < toDateTime('2010-05-06 23:59:00')היום התאפיין בעצבנות כבר מתחילתו, עם רצף כותרות על החוב היווני לאורך כל הבוקר, ו-SPY נסחר במגמת ירידה מפתיחת המסחר ב-$116.26. לאחר מכן, התמיכה בשוק קרסה: השפל היומי של $105 נרשם בשעה 14:45 לפי שעון החוף המזרחי, ירידה של -10.1% ביחס למחיר הסגירה הקודם שעמד על $116.83. עד סוף יום המסחר, SPY הצליח להתאושש לרמה של $112.88, ירידה של -3.4% בסיכום יומי, אך עדיין הרחק מעל תחתית "כיס האוויר" שנוצר. מחזור המסחר: 639.9 מיליון מניות, אחד ממחזורי המסחר הכבדים ביותר של SPY בתקופה זו.
הקריסה, דקה אחר דקה
גרפים של חצי שעה מסתירים את האירוע הזה; ברזולוציה של דקה אחת הוא בולט ללא ספק. להלן SPY בין השעה 14:00 ל-15:30 שעון מזרח ארה"ב:
| דקת ET | סגירה ($) | שפל ($) | נפח (M) |
|---|---|---|---|
| 14:00 | 114.83 | 114.7 | 0.67 |
| 14:01 | 114.8 | 114.76 | 0.93 |
| 14:02 | 114.75 | 114.71 | 0.93 |
| 14:03 | 114.68 | 114.63 | 1.19 |
| 14:04 | 114.58 | 114.53 | 1.5 |
| 14:05 | 114.58 | 114.56 | 1.44 |
| 14:06 | 114.4 | 114.4 | 1.73 |
| 14:07 | 114.52 | 114.37 | 1.48 |
| 14:08 | 114.33 | 114.31 | 1.41 |
| 14:09 | 114.25 | 114.21 | 2.27 |
| 14:10 | 114.12 | 114.1 | 1.91 |
| 14:11 | 113.91 | 113.85 | 3.93 |
| 14:12 | 114.16 | 113.87 | 2.9 |
| 14:13 | 114.25 | 114.1 | 2.44 |
| 14:14 | 114.21 | 114.14 | 1.49 |
| 14:15 | 114.19 | 114.16 | 1.31 |
| 14:16 | 114.07 | 114.05 | 1.49 |
| 14:17 | 113.82 | 113.82 | 2.07 |
| 14:18 | 113.86 | 113.6 | 3.3 |
| 14:19 | 113.67 | 113.66 | 1.61 |
ה-SQL המדויק מאחורי כל מספר
SELECT
formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') AS et_minute,
round(toFloat64(close), 2) AS close_usd,
round(toFloat64(low), 2) AS low_usd,
round(toFloat64(volume) / 1e6, 2) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2010-05-06 18:00:00') AND window_start < toDateTime('2010-05-06 19:30:00')
ORDER BY window_startהתחקיר המשותף של ה-SEC וה-CFTC מתזמן את האירוע החל משעה 14:32 שעון מזרח ארה"ב בקירוב, כאשר תוכנית מכירה אוטומטית גדולה החלה לבצע פקודה של כ-75,000 חוזים עתידיים על ה-E-mini S&P 500 (כ-4.1 מיליארד דולר), ועד לשעה 15:08 בקירוב, כאשר המחירים הכלליים מחקו את רוב הירידה; שלושים ושישה דקות מתחילתו ועד סופו. ה-tape לעיל תואם את הקשת הזו. ה-SPY סיים את דקת ה-14:32 במחיר של 113.15 דולר. שנים-עשר דקות לאחר מכן, דקת ה-14:44 רשמה מסחר של 9.21 מיליון מניות, לעומת 1.44 מיליון בדקה רגועה כמו 14:05, ודקת ה-14:45 הדפיסה את שפל היום ברמה של 105 דולר. עם סיום דקת ה-15:08, עמד ה-SPY על 113.63 דולר, מעל הנקודה שבה החלה הנפילה. סיבוב מלא בתוך כחצי שעה.
עצירת מסחר אחת הופעלה לאורך כל היום, והיא נמשכה חמש שניות. בשעה 14:45:28 שעון מזרח ארה"ב, בתוך אותה דקה של השפל לעיל, מנגנון ה-Stop Logic של ה-CME השהה את המסחר בחוזים עתידיים על ה-E-mini, על פי הדו"ח הרשמי, והצעות המחיר חזרו כאשר הוא הוסר. מנגנוני הפסקת המסחר הרוחביים של שנת 2010 היו מותאמים למדד ה-Dow ברמות של עשרה, עשרים ושלושים אחוזים, והכללים שהיו בתוקף אז לא קבעו כל עצירה לירידה של עשרה אחוזים בשלב כה מאוחר של יום המסחר; שום מנגנון לא הופעל. מנגנוני הפסקת מסחר למניות בודדות טרם היו קיימים; הם נמנים עם ההמצאות של יום זה.
מה עורר את גל המכירות
זהות המוכר מעולם לא הייתה בגדר תעלומה עבור הרגולטורים. הדו"ח המשותף של ה-SEC וה-CFTC תיאר קבוצת קרנות נאמנות, שזוהתה בדיווחים בתקשורת כ-Waddell & Reed, אשר השתמשה באלגוריתם אוטומטי למכירת חוזי E-mini בקצב שנגזר מנפח המסחר, ללא התחשבות במחיר או בזמן. ככל שנפח המסחר זינק, האלגוריתם מכר מהר יותר, אל תוך שוק שבו מתווכים בתדירות גבוהה (HFT) חדלו לספוג מלאי והחלו להעביר אותו מיד ליד – תופעה המכונה בדו"ח "תפוח אדמה לוהט". חמש שנים לאחר מכן נקשר שם נוסף לאותו יום: הרשויות בארה"ב עצרו את הסוחר הלונדוני נבינדר סינג סראו באפריל 2015, באשמת ביצוע "ספוופינג" (spoofing) בספר הפקודות של ה-E-mini, כלומר הצבת פקודות שלא הייתה לו כל כוונה לבצע, ב-6 במאי ובימים רבים אחרים. הוא הודה באשמה בשנת 2016 ונגזר דינו בינואר 2020. מידת ההשפעה של הפקודות שלו באותו אחר-צהריים נותרה שנויה במחלוקת; הלקח המבני להלן אינו תלוי בכך.
היכן שהמכירות היו החדות ביותר
| דקת ET | פתיחת דקה | שפל דקה | ירידה בדקה ($) | נפח (M) |
|---|---|---|---|---|
| 14:49 | 112.52 | 106.8 | 5.72 | 4.98 |
| 14:48 | 111.31 | 106.01 | 5.3 | 4.75 |
| 15:09 | 113.63 | 108.37 | 5.26 | 3.51 |
| 14:50 | 112.02 | 108.22 | 3.8 | 2.22 |
| 14:45 | 108.69 | 105 | 3.69 | 7.24 |
ה-SQL המדויק מאחורי כל מספר
SELECT
formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') AS et_minute,
round(toFloat64(open), 2) AS minute_open,
round(toFloat64(low), 2) AS minute_low,
round(toFloat64(open) - toFloat64(low), 2) AS drop_within_minute_usd,
round(toFloat64(volume) / 1e6, 2) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2010-05-06 18:00:00') AND window_start < toDateTime('2010-05-06 19:30:00')
ORDER BY drop_within_minute_usd DESC
LIMIT 5בדקה הגרועה ביותר נרשמה ירידה של $5.72 מהפתיחה ועד לשפל, בשעה 14:49 לפי שעון החוף המזרחי, עם מחזור של 4.98 מיליון מניות בתוך שישים שניות. מה שהטייפ מראה הוא פשוט וברור: מחירים זקוקים לקונים זמינים, ולמשך מספר דקות לא היו כאלה. זהו הטיעון החזק ביותר שנרשם אי פעם להבנת מה עושה פקודת מרקט, שכן כל פקודת stop-loss שהופעלה באותו חלון זמן הפכה לפקודת מרקט שחיפשה ביקושים שלא היו קיימים. ה-NBBO הוא פעימת הלב של השוק, ובאותו אחר צהריים הוא הראה קו ישר.
סנט אחד ו-100,000 דולר: העסקאות האבסורדיות
כאשר נעלמו פקודות הקנייה האמיתיות, פקודות שנכנסו למערכת "ירדו" במורד הציטוטים שנותרו, כולל "ציטוטי דמה" (stub quotes) של עושי שוק שהוצבו הרחק מכל מחיר סביר. סרט המסחר הגולמי עדיין מכיל את אותן עסקאות שבוצעו:
| ticker | הדפסה נמוכה ביותר | הדפסה גבוהה ביותר | הדפסות פני | הדפסות 100K | הדפסות |
|---|---|---|---|---|---|
| AAPL | 199.25 | 100000 | 0 | 2 | 97158 |
| ACN | 0.01 | 41.53 | 43 | 0 | 10912 |
| BID | 27.85 | 100000 | 0 | 2 | 8015 |
| PG | 39.37 | 62.59 | 0 | 0 | 56242 |
ה-SQL המדויק מאחורי כל מספר
SELECT
ticker,
round(min(toFloat64(price)), 2) AS lowest_print,
round(max(toFloat64(price)), 2) AS highest_print,
countIf(toFloat64(price) <= 0.05) AS penny_prints,
countIf(toFloat64(price) >= 99999) AS hundred_k_prints,
count() AS prints
FROM global_markets.stocks_trades
WHERE ticker IN ('ACN', 'AAPL', 'BID', 'PG')
AND sip_timestamp >= toDateTime('2010-05-06 18:30:00') AND sip_timestamp < toDateTime('2010-05-06 19:30:00')
GROUP BY ticker
ORDER BY ticker ASCמניית Accenture (ACN), חברת ייעוץ שנסחרה באותו אחר-צהריים סביב מחיר של 41.49 דולר, רשמה 43 עסקאות במחיר של חמישה סנט או פחות, כשהמחיר הנמוך ביותר הגיע ל-$0.01. בכיוון ההפוך, מניית Apple רשמה 2 עסקאות במחיר של $100000 למניה, ומניית Sotheby's ביצעה את אותו הדבר 2 פעמים.
הבורסות ביטלו מאוחר יותר כל עסקה שבוצעה במרחק של יותר משישים אחוזים ממחיר הייחוס שלה לפני הקריסה, וקו זה מסביר את חוסר הסימטריה ברישומים. עסקאות הסנט של ACN בוטלו, ולכן מחיר השפל של דקת המסחר שנותר בתיעוד, $17.74, נמצא -57.2% מתחת למחיר הייחוס, ממש בתוך גבול הביטול. מניית Procter & Gamble מעולם לא נסחרה בציטוט דמה: העסקה הגרועה ביותר שלה באותו חלון זמן, $39.37, הייתה -36.7% מתחת למחיר הייחוס שלה, ולכן כל פקודת Stop-loss שנמכרה שם נותרה על כנה. עסקאות הסנט של ACN חצו את הגבול הזה ונמחקו; הביצוע הגרוע ביותר של P&G נותר בתוך הגבול ונותר בתוקף. הגבול השרירותי הזה לימד סוחרים על סוגי פקודות יותר מכל חוברת שהודפסה אי פעם.
עד כמה התרחב הנזק
באותו חלון זמן, על בסיס עסקאות מאומתות בלבד, במדידות של דקה, שנמדדו ביחס למחיר של כל מניה בשעה 14:30:
| ticker | טרום קריסה 14:30 | שפל קריסה | שפל מול 14:30 (%) | שפל ET | סגירה מול 14:30 (%) |
|---|---|---|---|---|---|
| ACN | 41.49 | 17.74 | -57.2 | 14:47 | -0.9 |
| PG | 62.17 | 39.37 | -36.7 | 14:47 | -2.3 |
| MMM | 84.45 | 67.98 | -19.5 | 14:46 | -0.3 |
| SPY | 113.35 | 105 | -7.4 | 14:45 | -0.4 |
| DIA | 106.05 | 99.16 | -6.5 | 14:47 | -0.7 |
| IWM | 66.84 | 63.36 | -5.2 | 14:45 | 0.7 |
ה-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 870), 2) AS pre_crash_1430,
round(minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 871 AND 915), 2) AS crash_low,
round((minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 871 AND 915) / argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 870) - 1) * 100, 1) AS low_vs_1430_pct,
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 871 AND 915), 'America/New_York'), '%H:%i') AS low_et,
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) / argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 870) - 1) * 100, 1) AS close_vs_1430_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('ACN', 'PG', 'MMM', 'IWM', 'DIA', 'SPY')
AND window_start >= toDateTime('2010-05-06 04:00:00') AND window_start < toDateTime('2010-05-06 23:59:00')
GROUP BY ticker
ORDER BY low_vs_1430_pct ASCהפיזור הוא לב העניין. השפל שאליו הגיעה ACN עמד על -57.2% מתחת למחיר הייחוס שלה, וזה של P&G על -36.7%, בעוד שקרנות סל רחבות הגיעו לקרקעית בירידות של אחוזים בודדים; DIA, קרן הסל העוקבת אחר מדד הדאו, ירדה ב--6.5% ו-IWM ב--5.2%. אותן דקות ב-DIA דווחו ברחבי העולם כנפילה הגדולה ביותר בנקודות בתוך יום מסחר בהיסטוריה של הדאו עד לאותו תאריך. העמודה האחרונה מציגה את נתוני ההתאוששות: כל אחת משש המניות ננעלה בטווח של כשלושה אחוזים מרמת המחיר שלה בשעה 14:30, כאילו השעה המרכזית הייתה בגדר שמועה בלבד.
כיצד משתווה ה-6 במאי לימי קריסה אחרים
יש לבחון את ה-"flash crash" אל מול ימי קריסה מפורסמים אחרים בעידן הנתונים ברמת הדקה (סרט המדדים הנוכחי מתחיל בשנת 2003; "יום שני השחור" של 1987 קדם לו):
| סשן | שפל מול קודם (%) | סגירה מול קודם (%) | תיקון מהשפל (%) |
|---|---|---|---|
| 2008-09-29 | -8.6 | -7 | 1.7 |
| 2010-05-06 | -10.1 | -3.4 | 7.5 |
| 2015-08-24 | -7.7 | -4.1 | 3.9 |
| 2018-02-05 | -4.4 | -4.1 | 0.3 |
| 2020-03-16 | -12.4 | -11.6 | 0.9 |
ה-SQL המדויק מאחורי כל מספר
WITH daily AS (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
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,
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 rth_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND ((window_start >= toDateTime('2008-09-26 04:00:00') AND window_start < toDateTime('2008-09-30 00:00:00'))
OR (window_start >= toDateTime('2010-05-05 04:00:00') AND window_start < toDateTime('2010-05-07 00:00:00'))
OR (window_start >= toDateTime('2015-08-21 04:00:00') AND window_start < toDateTime('2015-08-25 00:00:00'))
OR (window_start >= toDateTime('2018-02-02 04:00:00') AND window_start < toDateTime('2018-02-06 00:00:00'))
OR (window_start >= toDateTime('2020-03-13 04:00:00') AND window_start < toDateTime('2020-03-17 00:00:00')))
GROUP BY et_date
)
SELECT
toString(et_date) AS session,
round((rth_low / prev_close - 1) * 100, 1) AS low_vs_prior_pct,
round((rth_close / prev_close - 1) * 100, 1) AS close_vs_prior_pct,
round((rth_close / rth_low - 1) * 100, 1) AS bounce_off_low_pct
FROM (
SELECT et_date, rth_low, rth_close,
lagInFrame(rth_close) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
FROM daily
)
WHERE et_date IN (toDate('2008-09-29'), toDate('2010-05-06'), toDate('2015-08-24'), toDate('2018-02-05'), toDate('2020-03-16'))
ORDER BY et_dateה-6 במאי 2010 אינו מהווה את הבור העמוק ביותר בטבלה: ב-16 במרץ 2020 נסחר המדד ב--12.4% מתחת לסגירתו הקודמת, לעומת -10.1% ב-"flash crash". אולם, אף יום אחר אינו מתקרב לעוצמת התיקון. ה-SPY נסגר ב-7.5% מעל לשפל של ה-6 במאי, לעומת 3.9% בהתאוששות השנייה בטיבה בקבוצה (ה-24 באוגוסט 2015, שהיה בעצמו "flash crash" קטן), ורק 1.7% ו-0.9% בימי הקריסה של עידן ליהמן והקורונה. תמחור מחדש נשאר נמוך עד הנעילה; בור נזילות נסגר בחזרה באותו אחר-צהריים.
האם תבנית ה-V החזיקה מעמד?
שתי שאלות מכריעות מה מגדיר "התרסקות": באיזו מהירות חזר המחיר לרמתו הקודמת, והאם שפל הפאניקה נסחר שוב. לשתי השאלות יש תשובות מתועדות:
| שפל פלאש קראש | סגירת 5 במאי | סגירה ראשונה מעל 5 במאי | סשנים עד שחזור | סגירה ראשונה מתחת לשפל | סגירה באותו סשן | סשנים עד שבירה |
|---|---|---|---|---|---|---|
| 105 | 116.83 | 2010-05-12 | 4 | 2010-06-29 | 104.22 | 37 |
ה-SQL המדויק מאחורי כל מספר
WITH
(
SELECT minIf(toFloat64(low), (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('2010-05-06 04:00:00') AND window_start < toDateTime('2010-05-07 00:00:00')
) AS flash_low
SELECT
round(any(flash_low), 2) AS flash_crash_low,
round(any(may5_close), 2) AS may5_close,
toString(any(first_above_date)) AS first_close_above_may5,
countIf(et_date > toDate('2010-05-06') AND et_date <= first_above_date) AS sessions_until_reclaim,
toString(any(first_below_date)) AS first_close_below_low,
round(anyIf(close_usd, et_date = first_below_date), 2) AS close_that_session,
countIf(et_date > toDate('2010-05-06') AND et_date <= first_below_date) AS sessions_until_break
FROM (
SELECT et_date, close_usd, flash_low, may5_close,
min(if(et_date > toDate('2010-05-06') AND close_usd < flash_low, et_date, toDate('2100-01-01'))) OVER () AS first_below_date,
min(if(et_date > toDate('2010-05-06') AND close_usd > may5_close, et_date, toDate('2100-01-01'))) OVER () AS first_above_date
FROM (
SELECT et_date, close_usd, flash_low,
max(if(et_date = toDate('2010-05-05'), close_usd, 0)) OVER () AS may5_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,
flash_low
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2010-05-05 04:00:00') AND window_start < toDateTime('2011-01-01 00:00:00')
GROUP BY et_date
)
)
)ההתאוששות הגיעה במהירות: SPY נסגר בחזרה מעל מחיר הסגירה שלו ב-5 במאי, שעמד על 116.83, כעבור 4 ימי מסחר בלבד, ב-2010-05-12. תבנית ה-V החזיקה מעמד, לזמן מה. אולם שפל ה-flash-crash לא נותר חריגה בלבד: 37 ימי מסחר לאחר ההתרסקות, ב-2010-06-29, SPY נסגר ב-104.22, מתחת לשפל הפאניקה של 105, במהלך גל המכירות של החוב הריבוני האירופי ששלט בשווקים באותו קיץ. ההבדל הוא לב העניין: ה-flash-crash הגיע למחיר ההוא בתוך דקות, ללא חדשות, וזינק חזרה; הקיץ הגיע לשם לאורך שבועות ונשאר שם. מחיר הוא מה שניתן לבצע בו עסקה ברגע זה; ערך הוא מה ששורד את המשך היום.
מה השתנה לאחר מכן
הקריסה המהירה (flash crash) הולידה את משטר מפסקי הזרם המודרני: רצועות תנודה (Limit Up/Limit Down) למניות בודדות והפסקות מסחר רוחביות מתוקנות; מנגנונים אלו נראו במשברים מאוחרים יותר (הפסקות המסחר של מרץ 2020 הן צאצאיות ישירות שלהם). ציטוטי סרק (stub quotes) נאסרו; הכללים לביטול עסקאות שגויות באופן מובהק עוגנו רשמית; פקודות גדולות בחוזים עתידיים כפופות כעת לבחינה של ביצוע מודע למחיר. מבנה השוק שבו אתם סוחרים כיום גובש במידה רבה בעקבות אותן שלושים ושש דקות.
שאלות ותשובות על ה-Flash Crash
מה גרם ל-Flash Crash של שנת 2010?
הדו"ח הרשמי של ה-SEC וה-CFTC תיאר תוכנית מכירה אוטומטית של חוזי E-mini בהיקף של כ-4.1 מיליארד דולר, שבוצעה אל תוך נזילות דלילה, כאשר גורמי תיווך בתדירות גבוהה הגדילו תחילה את הנפח ולאחר מכן נסוגו. דיווחי העיתונות זיהו את המוכרת כחברת קרנות הנאמנות Waddell & Reed; הסוחר Navinder Sarao הועמד לדין מאוחר יותר בגין ביצוע Spoofing באותו שוק באותו יום. גרסת ה-Tape: הנזילות התאיידה, והמחירים צנחו לכל רמת ביקוש (bid) שהייתה זמינה, לעיתים ברמה של סנט אחד.
מתי החל והסתיים ה-Flash Crash?
ציר הזמן של הרגולטורים מתחיל בערך בשעה 14:32 לפי שעון ET, אז החלה המכירה האוטומטית, ומסתיים בערך בשעה 15:08, כאשר המחירים הכלליים מחקו את רוב הירידה, פרק זמן של שלושים ושישה דקות. השפל של SPY נרשם ב-14:45 שעון ET, ב--10.1% מתחת לסגירה הקודמת, והחזרה לרמות שלפני הצניחה ארכה כעשרים ושלוש דקות מהשפל.
אילו מניות הושפעו ב-Flash Crash של 2010?
כמעט הכל ירד, אך הנפגעות המפורסמות היו מניות שהביקושים להן נעלמו לחלוטין: Accenture נסחרה בשפל של 0.01 דולר, Apple ו-Sotheby's נסחרות ב-100000 דולר, ו-Procter & Gamble ירדה עד ל-39.37 דולר, -36.7% מתחת לרמתה בשעות הצהריים. עסקאות שבוצעו במחיר הגבוה משישים אחוזים מהמחירים שלפני הקריסה בוטלו; העסקאות של P&G נותרו על כנן.
האם המסחר נעצר במהלך ה-Flash Crash?
שום מנגנון השהיית מסחר (circuit breaker) כלל-שוקי לא הופעל ב-6 במאי 2010; הכללים שהיו בתוקף אז לא הגדירו עצירה לירידה בסדר גודל כזה בשלב כה מאוחר של יום המסחר. ההפסקה היחידה באותו יום נמשכה חמש שניות: מנגנון ה-Stop Logic של ה-CME עצר לזמן קצר את חוזי ה-E-mini בשעה 14:45:28 שעון ET, באותה דקה שבה נרשם השפל במדד. מנגנוני השהיה למניות בודדות ורצועות Limit Up/Limit Down נוצרו לאחר מכן.
האם Flash Crash יכול לקרות שוב?
גרסאות קטנות יותר התרחשו, ניירות ערך בודדים נתקלים בשגרה בהפסקות מסחר מסוג LULD, ואירועי Flash קטנים חוזרים על עצמם. הגרסה הכלל-שוקית בסדר הגודל של 2010 נבלמה עד כה על ידי מנגנוני העצירה שהיא עצמה עוררה. התשובה הכנה היא שהמרכיב המבני – נזילות שיכולה להיעלם בתוך מילי-שניות – הוא קבוע.
הערות על הנתונים
הערות מלאות על הנתונים
- הנר של השעה 15:09 בלוח הנתונים לפי דקות כולל שפל חריג ב-108.37 דקות ספורות לאחר ההתאוששות, ואותו נר מופיע גם בטבלת הדקות התלולות ביותר. הדבר תואם לעסקאות (prints) שדווחו באיחור, אשר הנתונים המצטברים משייכים לדקה שבה הגיעו למערכת. הקלט של ה-6 במאי מכיל עסקאות רבות כאלו.
- עסקאות שבוטלו והנתונים המצטברים: הקלט הגולמי של ACN מציג עסקאות ב-0.01, בעוד שהשפל בנר הדקה הוא 17.74. הנתונים המצטברים לפי דקות משקפים את הרישום לאחר הביטול, בעוד קלט העסקאות הגולמי מציג את העסקאות המקוריות.
- נקודת הייחוס "14:30" בלוח הפיזור היא מחיר הסגירה של נר הדקה האחרון של כל נייר ערך במסחר הרגיל, בשעה 14:30 שעון מזרח ארה"ב או לפני כן; חלון הקריסה הוא 14:31–15:15.
- QQQ אינו מופיע בלוחות המצליבים בין שמות שונים: בשנת 2010 הוא נסחר תחת הטיקר QQQQ.
כל לוח נתונים לעיל מבוסס על שאילתה שמורה ומתועדת מול קלט המסחר ההיסטורי; ניתן להרחיב את ה-SQL כדי לראות כל מדידה. רוצים לחוות את היום הזה במקום לקרוא עליו? זהו אחד התרחישים הזמינים בסימולטור המסחר של Strasmore Labs.