Strasmore Research
เจาะลึกข้อมูล Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-07-24

เหตุการณ์ Flash Crash ปี 2010 รายนาที

เจาะลึกเหตุการณ์ Flash Crash เมื่อวันที่ 6 พฤษภาคม 2010 เมื่อมูลค่าตลาดเกือบหนึ่งล้านล้านดอลลาร์หายไปและฟื้นตัวในเวลาเพียง 36 นาที พร้อมบันทึกการซื้อขายรายนาที

เมื่อวันที่ 6 พฤษภาคม 2010 ตลาดหุ้นสหรัฐฯ เกิดการดิ่งลงอย่างรุนแรงและฟื้นตัวกลับมาภายในเวลาไม่ถึงครึ่งชั่วโมง หรือที่เรียกว่า flash crash ซึ่งถือเป็นช่วงเวลาการซื้อขายที่แปลกประหลาดที่สุดในประวัติศาสตร์ตลาดสมัยใหม่ มูลค่าตลาดเกือบหนึ่งล้านล้านดอลลาร์หายไปและส่วนใหญ่กลับคืนมาในเวลาอันสั้น โดยมีหุ้นชื่อดังหลายตัวมีราคาลดลงไปอยู่ที่ $0.01 และ $100000 ต่อหุ้น รายละเอียดด้านล่างประกอบด้วยบันทึกการซื้อขายรายนาที เวลา และรายชื่อหุ้น — โดยทุกตัวเลขมีคำสั่งสืบค้นข้อมูลรองรับ คุณสามารถขยายแถบข้อมูลเพื่อดู SQL ได้

สรุปภาพรวมรายวัน

คำสั่งดึงข้อมูลSPY เมื่อวันที่ 6 พฤษภาคม 2010 — วันที่เกิด flash crash ตามบันทึก
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 ET ซึ่งลดลง -10.1% เมื่อเทียบกับราคาปิดก่อนหน้าที่ $116.83 อย่างไรก็ตาม เมื่อถึงเวลาปิดตลาด SPY สามารถฟื้นตัวกลับมาอยู่ที่ $112.88 หรือลดลง -3.4% สำหรับการซื้อขายในวันนี้ แต่ยังคงอยู่ในระดับที่สูงกว่าจุดต่ำสุดของช่วงที่ราคาดิ่งลงอย่างมาก ปริมาณการซื้อขายอยู่ที่ 639.9 ล้านหุ้น ซึ่งถือเป็นหนึ่งในวันที่มีปริมาณการซื้อขายสูงสุดของ SPY ในยุคนี้

รายละเอียดเหตุการณ์วิกฤตแบบนาทีต่อนาที

กราฟรายครึ่งชั่วโมงอาจไม่แสดงให้เห็นเหตุการณ์นี้ แต่หากดูด้วยความละเอียดรายนาทีจะเห็นได้อย่างชัดเจน ต่อไปนี้คือข้อมูลของ SPY ตั้งแต่เวลา 14:00 ถึง 15:30 น. ตามเวลา ET:

คำสั่งดึงข้อมูลSPY รายนาที ช่วงเวลา 14:00–15:30 น. ET ของวันที่ 6 พฤษภาคม 2010
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 น. ET เมื่อโปรแกรมขายอัตโนมัติขนาดใหญ่เริ่มดำเนินการคำสั่งขาย E-mini S&P 500 futures จำนวนประมาณ 75,000 สัญญา (ประมาณ 4.1 พันล้านดอลลาร์) จนถึงเวลาประมาณ 15:08 น. ซึ่งเป็นช่วงที่ราคาโดยรวมฟื้นตัวกลับมาได้เกือบทั้งหมด — รวมระยะเวลาทั้งสิ้นสามสิบหกนาที ข้อมูลราคาข้างต้นสอดคล้องกับช่วงเวลาดังกล่าว โดย SPY ปิดที่ราคา $113.15 ในนาทีที่ 14:32 อีกสิบสองนาทีต่อมา ในนาทีที่ 14:44 มีปริมาณการซื้อขายอยู่ที่ 9.21 ล้านหุ้น เมื่อเทียบกับ 1.44 ล้านหุ้นในช่วงเวลาปกติอย่างนาทีที่ 14:05 และในนาทีที่ 14:45 ราคาลงไปแตะระดับต่ำสุดของวันที่ $105 เมื่อสิ้นสุดนาทีที่ 15:08 ราคา SPY อยู่ที่ $113.63 ซึ่งสูงกว่าจุดที่เริ่มดิ่งลง ถือเป็นการเคลื่อนไหวแบบครบวงจรภายในเวลาประมาณครึ่งชั่วโมง

มีการระงับการซื้อขาย (halt) เพียงหนึ่งครั้งตลอดทั้งวัน โดยใช้เวลาเพียงห้าวินาที ตามรายงานอย่างเป็นทางการ ระบุว่าเมื่อเวลา 14:45:28 น. ET — ซึ่งอยู่ในนาทีเดียวกับจุดต่ำสุดข้างต้น — ระบบ Stop Logic ของ CME ได้สั่งหยุดการซื้อขาย E-mini futures ชั่วคราว และราคาเสนอซื้อ (bids) กลับมาอีกครั้งเมื่อระบบยกเลิกการระงับ ระบบ Circuit Breaker ของตลาดโดยรวมในปี 2010 นั้นอ้างอิงจาก Dow ที่ระดับ 10, 20 และ 30 เปอร์เซ็นต์ และกฎเกณฑ์ที่ใช้ในขณะนั้นระบุว่า จะไม่มีการระงับการซื้อขายหากราคาลดลงเพียงสิบเปอร์เซ็นต์ในช่วงท้ายของการซื้อขาย ดังนั้นจึงไม่มีการทำงานของระบบดังกล่าว ส่วนระบบ Circuit Breaker สำหรับหุ้นรายตัวนั้นยังไม่มีในขณะนั้น ซึ่งถือเป็นหนึ่งในสิ่งที่เพิ่งถูกสร้างขึ้นใหม่ในวันดังกล่าว

สาเหตุที่ทำให้เกิดการเทขาย

หน่วยงานกำกับดูแลทราบถึงสาเหตุของการเทขายมาโดยตลอด รายงานจาก SEC–CFTC ระบุถึงกลุ่มกองทุนรวมแห่งหนึ่ง ซึ่งสื่อรายงานว่าเป็น Waddell & Reed โดยมีการใช้อัลกอริทึมแบบอัตโนมัติในการขายสัญญา E-mini ตามปริมาณการซื้อขาย โดยไม่คำนึงถึงระดับราคาหรือเวลา เมื่อปริมาณการซื้อขายเพิ่มขึ้นอย่างรวดเร็ว อัลกอริทึมจึงเร่งขายเร็วขึ้น ในสภาวะตลาดที่ตัวกลางกลุ่ม high-frequency เลิกรับภาระการถือครองสินค้าคงคลัง และเริ่มส่งต่อสินค้าไปมา ซึ่งเป็นลักษณะปริมาณการซื้อขายแบบ "hot potato" ตามที่รายงานระบุไว้ ห้าปีต่อมา มีชื่อที่สองถูกเชื่อมโยงกับเหตุการณ์นี้ โดยทางการสหรัฐฯ ได้จับกุม Navinder Singh Sarao เทรดเดอร์ชาวลอนดอน เมื่อเดือนเมษายน 2015 ในข้อหา spoofing ในสมุดคำสั่งซื้อขาย E-mini ด้วยการวางคำสั่งซื้อขายจำนวนมากโดยไม่มีเจตนาที่จะดำเนินการจริง เมื่อวันที่ 6 พฤษภาคม และวันอื่นๆ อีกหลายร้อยวัน เขาให้การรับสารภาพในปี 2016 และถูกตัดสินโทษในเดือนมกราคม 2020 แม้จะยังมีการถกเถียงกันว่าคำสั่งซื้อขายของเขามีผลกระทบมากน้อยเพียงใดในช่วงบ่ายวันนั้น แต่บทเรียนเชิงโครงสร้างด้านล่างนี้ไม่ได้ขึ้นอยู่กับประเด็นดังกล่าว

จุดที่มีแรงขายรุนแรงที่สุด

คำสั่งดึงข้อมูลช่วงนาทีที่ราคาดิ่งลงรุนแรงที่สุด — การลดลงจากราคาเปิดสู่จุดต่ำสุดที่มากที่สุด ช่วงเวลา 14:00–15:30 น. ET
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 ET ในช่วงเวลาหกสิบวินาที โดยมีปริมาณการซื้อขาย 4.98 million shares ข้อมูลจาก tape แสดงให้เห็นถึงความจริงที่ชัดเจนว่า: ราคาต้องการแรงซื้อที่สม่ำเสมอ แต่ในช่วงไม่กี่นาทีนั้นไม่มีแรงซื้อเลย นี่คือข้อพิสูจน์ที่ชัดเจนที่สุดในการทำความเข้าใจ กลไกของ market order — คำสั่ง stop-loss ทุกคำสั่งที่ถูกเปิดใช้งานในช่วงเวลานั้น กลายเป็น market order ที่พยายามหาแรงซื้อ (bids) ที่ไม่มีอยู่จริง NBBO เปรียบเสมือนจังหวะการเต้นของหัวใจของตลาด และในช่วงบ่ายวันนั้นจังหวะดังกล่าวได้หยุดลง

หนึ่งเซนต์กับ 100,000 ดอลลาร์: ราคาที่ผิดเพี้ยนอย่างไม่สมเหตุสมผล

เมื่อแรงซื้อจริงหายไป คำสั่งซื้อที่เข้ามาจึงไหลลงไปสู่ราคาเสนอขายที่เหลืออยู่ ซึ่งรวมถึง "stub quotes" ที่ผู้ดูแลสภาพคล่องวางไว้ ซึ่งเป็นราคาที่ห่างไกลจากราคาที่เป็นไปได้ ข้อมูลการซื้อขายดิบยังคงแสดงราคาเหล่านั้นไว้:

คำสั่งดึงข้อมูลรายการซื้อขายที่ผิดปกติบน raw trade tape ช่วงเวลา 14:30–15:30 น. ET
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 ครั้ง

ในภายหลัง ตลาดหลักทรัพย์ได้ยกเลิกทุกรายการซื้อขายที่มีราคาต่างจากราคาอ้างอิงก่อนเกิดเหตุการณ์วิกฤตมากกว่า 60 เปอร์เซ็นต์ ซึ่งเกณฑ์นี้เป็นตัวอธิบายความไม่สมมาตรของข้อมูลที่บันทึกไว้ รายการราคาหนึ่งเซนต์ของ ACN ถูกยกเลิกไป ดังนั้นราคาต่ำสุดของแท่งกราฟรายนาทีที่ ยังคงอยู่ คือ $17.74 จึงมีค่าต่ำกว่าราคาอ้างอิงอยู่ -57.2% ซึ่งอยู่ในขอบเขตที่ถูกยกเลิกพอดี ส่วน Procter & Gamble ไม่เคยมีการซื้อขายที่ราคา stub โดยรายการที่แย่ที่สุดในช่วงเวลาดังกล่าวคือ $39.37 ซึ่งต่ำกว่าราคาอ้างอิงอยู่ -36.7% ดังนั้นคำสั่ง stop-loss ทุกรายการที่ขาย ณ ราคานั้นจึงยังคงได้รับการจับคู่สำเร็จ รายการราคาหนึ่งเซนต์ของ ACN มีราคาหลุดจากเกณฑ์ดังกล่าวจึงถูกลบออกไป ในขณะที่รายการที่แย่ที่สุดของ P&G ยังคงอยู่ในเกณฑ์และได้รับการยืนยัน ขอบเขตที่กำหนดขึ้นอย่างไม่เป็นระบบนี้ได้ให้บทเรียนแก่เทรดเดอร์เกี่ยวกับประเภทของคำสั่งซื้อขายได้มากกว่าคู่มือเล่มใดที่เคยพิมพ์มา

ขอบเขตความเสียหายที่เกิดขึ้น

ข้อมูลเฉพาะช่วงเวลาเดียวกัน โดยวัดจากราคา ณ เวลา 14:30 น. ของแต่ละหลักทรัพย์:

คำสั่งดึงข้อมูลความเสียหายในช่วงเกิด crash แยกตามรายชื่อ — เทียบกับจุดอ้างอิงเวลา 14:30 น. ET
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% ส่วนกลุ่ม ETF โดยรวมมีราคาลดลงในระดับหลักเดียว โดย DIA ซึ่งเป็น ETF ที่อ้างอิงดัชนี Dow อยู่ที่ -6.5% และ IWM อยู่ที่ -5.2% ข้อมูลรายนาทีของ DIA ในช่วงเวลาดังกล่าวถูกรายงานไปทั่วโลกว่าเป็นเหตุการณ์ที่ดัชนี Dow มีจุดลดลงระหว่างวันมากที่สุดในประวัติศาสตร์นับจนถึงวันนั้น คอลัมน์สุดท้ายคือผลการฟื้นตัว โดยทั้งหกหลักทรัพย์ปิดตลาดในระดับที่ห่างจากราคา ณ เวลา 14:30 น. เพียงประมาณสามเปอร์เซ็นต์ ราวกับว่าเหตุการณ์ในช่วงชั่วโมงกลางนั้นเป็นเพียงข่าวลือ

การเปรียบเทียบเหตุการณ์วันที่ 6 พฤษภาคม กับวันเกิดเหตุตลาดร่วงรุนแรงอื่นๆ

เปรียบเทียบเหตุการณ์ flash crash กับเหตุการณ์ตลาดร่วงรุนแรงภายในวันเดียวที่สำคัญอื่นๆ ในยุคที่มีการบันทึกข้อมูลแบบรายนาที (ข้อมูลหุ้นชุดนี้เริ่มบันทึกตั้งแต่ปี 2003 ส่วนเหตุการณ์ Black Monday ปี 1987 เกิดขึ้นก่อนหน้านั้น):

คำสั่งดึงข้อมูล5 ช่วงเวลา crash ที่สำคัญ — ระดับจุดต่ำสุดและการฟื้นตัว (SPY)
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 ปิดตลาดสูงกว่าจุดต่ำสุดของวันที่ 6 พฤษภาคม อยู่ที่ 7.5% เทียบกับ 3.9% ซึ่งเป็นการฟื้นตัวที่ดีที่สุดลำดับถัดไปในชุดข้อมูลนี้ (24 สิงหาคม 2015 ซึ่งเป็นเหตุการณ์ mini flash crash) และอยู่ที่เพียง 1.7% และ 0.9% ในช่วงวันเกิดเหตุวิกฤต ยุค Lehman และช่วงวิกฤต COVID การปรับราคาใหม่ (repricing) จะยังคงอยู่ในระดับต่ำจนถึงช่วงปิดตลาด แต่การขาดสภาพคล่อง (liquidity hole) จะทำให้ราคาดีดกลับอย่างรวดเร็วในบ่ายวันเดียวกัน

รูปแบบ V-shape ยังคงอยู่หรือไม่?

คำถามสองข้อเป็นตัวตัดสินว่าเหตุการณ์นั้นคือการดิ่งลงอย่างรุนแรง (crash) หรือไม่: ราคาเดิมกลับมาเร็วแค่ไหน และราคาต่ำสุดในช่วงตื่นตระหนกมีการซื้อขายที่ระดับนั้นอีกหรือไม่ ซึ่งทั้งสองคำถามมีคำตอบที่ชัดเจนแล้ว:

คำสั่งดึงข้อมูลผลกระทบต่อเนื่อง — ช่วงที่ราคากลับไปยืนเหนือราคาปิดของวันที่ 5 พฤษภาคม และช่วงที่ราคาหลุดจุดต่ำสุดจากความตื่นตระหนกอย่างแท้จริง
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-shape ยังคงอยู่ในช่วงเวลาหนึ่ง แต่จุดต่ำสุดจากการดิ่งลงอย่างรวดเร็ว (flash-crash) ไม่ได้เป็นเพียงความผิดปกติชั่วคราว: เมื่อผ่านไป 37 เซสชันหลังการดิ่งลง ในวันที่ 2010-06-29 SPY ปิดตลาด ที่ $104.22 ซึ่งต่ำกว่าระดับต่ำสุดในช่วงตื่นตระหนกที่ $105 ในช่วงที่มีการเทขายพันธบัตรรัฐบาลยุโรปซึ่งเป็นเหตุการณ์หลักในฤดูร้อนนั้น ประเด็นสำคัญคือความแตกต่างระหว่างสองเหตุการณ์นี้: การดิ่งลงอย่างรวดเร็วทำให้ราคาลงไปถึงระดับนั้นภายในไม่กี่นาทีโดยไม่มีข่าวสารและมีการดีดตัวกลับ แต่เหตุการณ์ในฤดูร้อนใช้เวลาหลายสัปดาห์ในการลงไปถึงระดับนั้นและราคายังคงค้างอยู่ที่ระดับต่ำ ราคาคือสิ่งที่คุณสามารถทำธุรกรรมได้ในวินาทีนี้ ส่วนมูลค่าคือสิ่งที่ยังคงอยู่รอดเมื่อสิ้นสุดช่วงบ่าย

การเปลี่ยนแปลงที่เกิดขึ้นหลังจากนั้น

เหตุการณ์ flash crash นำไปสู่การกำหนดระบอบ circuit-breaker ในปัจจุบัน ซึ่งประกอบด้วยกรอบราคา Limit Up/Limit Down สำหรับหุ้นรายตัว และการปรับปรุงเกณฑ์การระงับการซื้อขายทั่วทั้งตลาด ซึ่งกลไกเหล่านี้ปรากฏให้เห็นในวิกฤตการณ์ต่อมา (การระงับการซื้อขายในเดือนมีนาคม 2020 คือผลลัพธ์โดยตรงจากเหตุการณ์ดังกล่าว) มีการสั่งห้ามใช้ stub quotes และมีการกำหนดกฎเกณฑ์สำหรับธุรกรรมที่ผิดพลาดอย่างชัดเจน (clearly-erroneous-trade) นอกจากนี้ คำสั่งซื้อขาย futures ขนาดใหญ่ยังต้องผ่านการตรวจสอบการดำเนินการที่คำนึงถึงระดับราคา โครงสร้างตลาดที่คุณซื้อขายอยู่ในปัจจุบันส่วนใหญ่ถูกร่างขึ้นในช่วงเวลาสามสิบหกนาทีหลังจากเหตุการณ์นั้น

คำถามที่พบบ่อยเกี่ยวกับ Flash crash

อะไรคือสาเหตุของ flash crash ในปี 2010?

รายงานอย่างเป็นทางการจาก SEC/CFTC ระบุว่าเกิดจากโปรแกรมขาย E-mini แบบอัตโนมัติมูลค่าประมาณ 4.1 พันล้านดอลลาร์ ซึ่งดำเนินการในช่วงที่มีสภาพคล่องต่ำ โดยมีตัวกลางที่ใช้การซื้อขายความถี่สูง (high-frequency intermediaries) เป็นตัวขยายปริมาณการซื้อขายก่อนจะถอนตัวออกไป ข่าวระบุว่าผู้ขายคือบริษัทกองทุนรวม Waddell & Reed ส่วน Navinder Sarao นักเทรดรายหนึ่งถูกดำเนินคดีในภายหลังข้อหาทำ spoofing ในตลาดเดียวกันในวันนั้น สำหรับมุมมองจากข้อมูลการซื้อขายระบุว่า สภาพคล่องหายไปอย่างรวดเร็ว และราคาดิ่งลงไปหาจุดที่มีแรงซื้อ (bid) ถัดไป ซึ่งบางครั้งเหลือเพียงแค่หนึ่งเซนต์

Flash crash เริ่มต้นและสิ้นสุดเมื่อใด?

ลำดับเวลาจากหน่วยงานกำกับดูแลเริ่มตั้งแต่เวลาประมาณ 14:32 น. ตามเวลา ET เมื่อการขายแบบอัตโนมัติเริ่มต้นขึ้น จนถึงเวลาประมาณ 15:08 น. เมื่อราคาทั่วตลาดฟื้นตัวกลับมาได้เกือบเท่าระดับก่อนการดิ่งลง ซึ่งใช้เวลาทั้งหมด 36 นาที โดยจุดต่ำสุดของ SPY อยู่ที่ 14:45 ET หรือต่ำกว่าราคาปิดก่อนหน้า -10.1% และใช้เวลาประมาณ 23 นาทีจากจุดต่ำสุดเพื่อกลับเข้าสู่ระดับก่อนเกิดเหตุการณ์

หุ้นตัวใดบ้างที่ได้รับผลกระทบใน flash crash ปี 2010?

ราคาหุ้นเกือบทุกตัวลดลง แต่หุ้นที่ได้รับความเสียหายอย่างรุนแรงคือหุ้นที่แรงซื้อหายไปโดยสิ้นเชิง โดย Accenture มีราคาต่ำสุดที่ $0.01, Apple และ Sotheby's มีราคาที่ $100000 และ Procter & Gamble มีการซื้อขายลดลงไปที่ $39.37 หรือต่ำกว่าระดับในช่วงบ่ายอยู่ -36.7% ทั้งนี้ รายการซื้อขายที่มีส่วนต่างมากกว่า 60 เปอร์เซ็นต์จากราคาก่อนเกิด flash crash ถูกยกเลิกไป แต่รายการซื้อขายของ P&G ยังคงมีผลอยู่

การซื้อขายหยุดชะงักระหว่างเกิด flash crash หรือไม่?

ไม่มีการใช้กลไกหยุดการซื้อขายทั้งตลาด (market-wide circuit breaker) เมื่อวันที่ 6 พฤษภาคม 2010 เนื่องจากกฎเกณฑ์ที่มีผลบังคับใช้ในขณะนั้นระบุว่า จะไม่มีการหยุดการซื้อขายหากราคาลดลงในระดับดังกล่าวในช่วงท้ายของเซสชัน การหยุดชะงักเพียงอย่างเดียวในวันนั้นใช้เวลาเพียงห้าวินาที โดยระบบ Stop Logic ของ CME ได้หยุดการซื้อขาย E-mini futures ชั่วคราวที่เวลา 14:45:28 น. ตามเวลา ET ซึ่งเป็นนาทีเดียวกับที่ดัชนีทำจุดต่ำสุด หลังจากเหตุการณ์นี้จึงมีการสร้างกลไก circuit breakers สำหรับหุ้นรายตัว และกรอบราคา Limit Up/Limit Down ขึ้นมา

Flash crash สามารถเกิดขึ้นอีกได้หรือไม่?

เหตุการณ์ขนาดเล็กเคยเกิดขึ้นมาแล้ว โดยหุ้นรายตัวมักจะถูกหยุดการซื้อขายด้วยกลไก LULD เป็นประจำ และเหตุการณ์ flash crash ขนาดเล็กก็เกิดขึ้นซ้ำๆ ส่วนเหตุการณ์ขนาดใหญ่ระดับตลาดทั้งระบบแบบปี 2010 นั้น จนถึงปัจจุบันถูกควบคุมไว้ได้ด้วยกลไกการหยุดการซื้อขายที่ถูกสร้างขึ้นจากเหตุการณ์ดังกล่าว คำตอบที่แท้จริงคือ ปัจจัยเชิงโครงสร้างอย่างสภาพคล่องที่สามารถหายไปได้ภายในเสี้ยววินาทีนั้นเป็นสิ่งที่เกิดขึ้นอย่างถาวร

หมายเหตุข้อมูล

หมายเหตุข้อมูลฉบับเต็ม
  • ข้อมูลรายนาทีในแท่งเวลา 15:09 มีค่าต่ำสุดที่ผิดปกติคือ 108.37 หลังจากเกิดการฟื้นตัว และแท่งเวลาเดียวกันนี้ปรากฏอยู่ในตารางที่มีการเปลี่ยนแปลงรายนาทีรุนแรงที่สุด ซึ่งสอดคล้องกับการรายงานราคาล่าช้า โดยข้อมูลสรุปจะบันทึกราคาในนาทีที่ข้อมูลมาถึง ในวันที่ 6 พฤษภาคม มีกรณีเช่นนี้เกิดขึ้นจำนวนมาก
  • การยกเลิกรายการซื้อขายและข้อมูลสรุป: ข้อมูลดิบของ ACN แสดงราคาที่ $0.01 ในขณะที่ราคาต่ำสุดในแท่งนาทีคือ $17.74 โดยข้อมูลสรุปรายนาทีจะสะท้อนบันทึกหลังการยกเลิกรายการ ส่วนข้อมูลดิบจะแสดงราคาที่บันทึกไว้ตอนแรก
  • "จุดอ้างอิงเวลา 14:30 น." ในแผงแสดงค่าความเบี่ยงเบน (dispersion panel) คือราคาปิดรายนาทีสุดท้ายในช่วงเวลาทำการปกติของแต่ละหลักทรัพย์ ณ เวลาหรือก่อนเวลา 14:30 น. ตามเวลา ET โดยช่วงเวลาที่เกิดการดิ่งลงของราคาคือ 14:31–15:15 น.
  • ไม่พบ QQQ ในแผงแสดงข้อมูลเปรียบเทียบระหว่างหลักทรัพย์ เนื่องจากในปี 2010 มีการซื้อขายภายใต้ชื่อย่อ QQQQ

แผงข้อมูลทั้งหมดข้างต้นมาจากการดึงข้อมูลผ่าน SQL query ที่มีการบันทึกเวอร์ชันไว้จากข้อมูลการซื้อขายย้อนหลัง — คุณสามารถขยายคำสั่ง SQL เพื่อดูรายละเอียดการวัดผลแต่ละรายการ หากต้องการทดลองเทรดในสถานการณ์ของวันนี้แทนการอ่านข้อมูล สามารถลองเล่นได้ใน โปรแกรมจำลองการเทรดของ Strasmore Labs