ราคา GameStop 28 มกราคม 2021 ผันผวน
เหตุการณ์ GME ในวันที่ 28 มกราคม 2021 ราคาพุ่งจาก 483 ดอลลาร์ สู่ 112 ดอลลาร์ในช่วงเที่ยง พร้อมการระงับการซื้อขายโดย Robinhood และการหยุดพักการซื้อขายหลายครั้ง
28 มกราคม 2021 คือจุดสูงสุดของปรากฏการณ์ GameStop squeeze โดยในช่วงเช้า GME มีราคาพุ่งขึ้นไปถึง $483 และ $112.25 ภายในเวลาเพียงสองชั่วโมง ต่อมาในวันเดียวกัน Robinhood และโบรกเกอร์อื่นๆ ได้สั่งระงับการซื้อหุ้นดังกล่าว และหากพิจารณาจากข้อมูลแท่งเทียนรายนาทีที่แสดงอยู่ด้านล่าง วันนี้ถือเป็นวันที่มีการหยุดพักการซื้อขาย (halt) บ่อยที่สุดในช่วงที่เกิด squeeze นี้ กลไกของ short squeeze สามารถศึกษาเพิ่มเติมได้ใน คำอธิบายเรื่อง short squeeze โดยใช้หุ้นตัวนี้เป็นกรณีศึกษา หน้าเพจนี้จะนำเสนอข้อมูลของวันดังกล่าว ทั้งช่วงการปรับตัวขึ้นที่นำไปสู่เหตุการณ์นี้ ข้อมูลราคาแบบนาทีต่อนาที การระงับการซื้อขายโดยโบรกเกอร์ กระแสการซื้อขาย options และการปรับตัวลดลงอย่างรวดเร็ว ตัวเลขทั้งหมดมาจากการดึงข้อมูลโดยตรง คุณสามารถขยายส่วนต่างๆ เพื่อดูคำสั่ง SQL ได้
ช่วงการปรับตัวขึ้น: ธันวาคม 2020 ถึง 27 มกราคม
เหตุการณ์ที่ผันผวนที่สุดเพียงวันเดียวในเรื่องราวนี้ ไม่สามารถทำความเข้าใจได้หากไม่พิจารณาสภาพตลาดในช่วงแปดสัปดาห์ก่อนหน้า GME ปิดช่วง 2020-12-01 ที่ $15.81 โดยเป็นหุ้นค้าปลีกในห้างสรรพสินค้าที่มีสถานะ Short จำนวนมาก และมีปริมาณการซื้อขายเพียงไม่กี่ล้านหุ้นต่อวัน หรือประมาณ 6.2 ล้านหุ้นในวันปกติช่วงต้นเดือนธันวาคม ก่อนหน้าวันที่มีการซื้อขายในหน้านี้ หุ้นปิดที่ $345 ซึ่งคิดเป็น 21.8 เท่า ของราคา ณ วันที่ 1 ธันวาคม
SQL เบื้องหลังตัวเลขแต่ละตัว
SELECT
toString(et_date) AS session,
close_usd,
round(close_usd / first_value(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 1) AS mult_from_dec1,
shares_m
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 = 'GME'
AND window_start >= toDateTime('2020-12-01 00:00:00') AND window_start < toDateTime('2021-01-27 23:59:00')
GROUP BY et_date
)
WHERE et_date >= toDate('2020-12-01') AND et_date <= toDate('2021-01-27')
ORDER BY et_dateทิศทางราคาเป็นลักษณะขั้นบันได ไม่ใช่ทางลาดชัน ในช่วงกลางเดือนมกราคม ราคาหุ้นค่อยๆ เคลื่อนตัวอยู่ในระดับสิบกว่าดอลลาร์ ต่อมาในวันที่ 2021-01-13 ราคาปิดที่ $31.44 ด้วยปริมาณการซื้อขาย 144.4 ล้านหุ้น ซึ่งสูงกว่าระดับปกติในเดือนธันวาคมมากกว่ายี่สิบเท่า และหลังจากนั้นแต่ละช่วงการปรับตัวขึ้นจะมีขนาดใหญ่กว่าช่วงก่อนหน้า โดยเริ่มตั้งแต่ราคาปิด $64.85 ในวันที่ 2021-01-22 ไปจนถึงราคาที่เพิ่มขึ้นเกือบสองเท่าตัวในวันที่ 27 มกราคม กลุ่ม Short sellers มีสถานะค้างอยู่ตลอดช่วงเวลาดังกล่าว ซึ่งหลักฐานการชำระราคา (settlement-date receipts) ในส่วนถัดไปของหน้านี้ จะแสดงให้เห็นว่าการปรับตัวขึ้นดังกล่าวส่งผลกระทบต่อพวกเขาอย่างไร
สรุปเหตุการณ์ในหนึ่งแถว — นับจำนวนแท่งกราฟ
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 = 'GME'
AND window_start >= toDateTime('2021-01-27 00:00:00') AND window_start < toDateTime('2021-01-28 04:00:00')
) AS prior_rth_close,
(
SELECT min(bars)
FROM (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'GME'
AND window_start >= toDateTime('2021-01-25 04:00:00') AND window_start < toDateTime('2021-02-05 04:00:00')
GROUP BY et_date
HAVING et_date != toDate('2021-01-28')
)
) AS thinnest_other
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,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS day_notional_bn,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS rth_minute_bars,
round(maxIf(toFloat64(high), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 4, 2) AS rth_high_splitadj,
thinnest_other AS thinnest_other_session_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'GME'
AND window_start >= toDateTime('2021-01-28 04:00:00') AND window_start < toDateTime('2021-01-28 23:59:00')เริ่มจากการนับจำนวนแท่งกราฟ: 314 แท่งกราฟรายนาทีในช่วงเวลาทำการปกติ แทนที่จะเป็น 390 แท่ง เนื่องจากราคาผันผวนอย่างรุนแรงจนเกิดการหยุดซื้อขายชั่วคราว (Limit Up/Limit Down) ซ้ำแล้วซ้ำเล่า ทำให้หายไปประมาณ 76 นาที ในช่วงการเก็งกำไรที่รุนแรงระหว่างวันที่ 25 มกราคม ถึง 4 กุมภาพันธ์ ไม่มีช่วงเวลาใดที่มีจำนวนแท่งกราฟในช่วงเวลาทำการปกติน้อยกว่า 348 แท่ง ระหว่างช่วงที่หยุดซื้อขาย: ราคาเปิดอยู่ที่ $265 ซึ่งต่ำกว่าราคาปิดอย่างเป็นทางการก่อนหน้าถึง -23.2% เนื่องจากปริมาณการซื้อขายในช่วงข้ามคืนและช่วงก่อนตลาดเปิดมีความผันผวนอย่างรุนแรงหลังมีการประกาศข้อจำกัดจากโบรกเกอร์ จากนั้นราคาพุ่งขึ้นไปแตะระดับสูงสุดเป็นประวัติการณ์ที่ $483 ในชั่วโมงแรกของการเปิดตลาด ก่อนจะดิ่งลงมาที่ $112.25 เมื่อเวลา 11:24 ET ซึ่งต่ำกว่าราคาปิดก่อนหน้า -67.5% และปิดที่ $197.44 ลดลง -42.8% ของวัน ราคาทั้งหมดเป็นราคาที่ซื้อขายจริงก่อนการแตกหุ้นแบบสี่ต่อหนึ่งในปี 2022
ปริมาณการซื้อขายที่เกิดขึ้น: มีการเปลี่ยนมือของหุ้นจำนวน 57.4 ล้านหุ้น ตลอดช่วงเวลาการซื้อขายที่ขยายออกไป คิดเป็นมูลค่ารวมประมาณ $16.7 พันล้านดอลลาร์ ซึ่งเป็นการหมุนเวียนของเงินทุนขนาดมหาศาลที่กระจุกตัวอยู่ในหุ้นค้าปลีกวิดีโอเกม ซึ่งเคยมีการซื้อขายเพียง 6.2 ล้านหุ้นในช่วงที่ตลาดเงียบเหงาเมื่อแปดสัปดาห์ก่อนหน้า
ความหมายที่แท้จริงของการระงับการซื้อขายแบบ Limit Up/Limit Down
การระงับการซื้อขายไม่ได้ขึ้นอยู่กับการตัดสินใจของตลาดหลักทรัพย์ แต่เป็นระบบอัตโนมัติ Limit Up/Limit Down (LULD) คือกลไกหยุดการซื้อขายชั่วคราว (circuit breaker) ของหุ้นรายตัวที่นำมาใช้หลังเกิด เหตุการณ์ flash crash ในปี 2010 หุ้นทุกตัวจะมีกรอบราคาครอบรอบราคาอ้างอิง ซึ่งคำนวณจากค่าเฉลี่ยการซื้อขายย้อนหลังห้านาที โดยมีกรอบราคาบวกหรือลบ 5% สำหรับหุ้นที่มีมูลค่าตลาดสูง และ 10% สำหรับหุ้นส่วนใหญ่ ส่วนหุ้นที่มีราคาต่ำจะมีกรอบที่กว้างกว่า โดยกรอบราคาจะถูกขยายเป็นสองเท่าในช่วง 25 นาทีสุดท้ายของการซื้อขาย หากราคาเสนอซื้อหรือเสนอขายที่ดีที่สุดอยู่ที่ขอบของกรอบราคาเป็นเวลา 15 วินาที การซื้อขายหุ้นตัวนั้นจะหยุดลงในทุกตลาดเป็นเวลาห้านาที และจะกลับมาซื้อขายใหม่ด้วยวิธีประมูล (auction) ที่ตลาดหลักทรัพย์ที่หุ้นนั้นจดทะเบียนอยู่ หากการประมูลไม่สามารถตกลงราคาภายในกรอบที่กำหนดได้ การหยุดซื้อขายจะถูกขยายเวลาออกไป ในกรณีที่มีความผันผวนสูงอย่างหุ้น GME ในเช้าวันนั้น วงจรนี้จะเกิดขึ้นซ้ำๆ คือ เปิดการซื้อขายใหม่ แล้วราคาพุ่งทะลุขอบกรอบราคาภายในไม่กี่วินาที จากนั้นก็ถูกระงับการซื้อขายอีกครั้ง นี่คือสาเหตุที่ทำให้เวลาในการซื้อขายหายไปถึงเจ็ดสิบหกนาทีโดยไม่มีใครกดปุ่มสั่งการ เนื่องจากกลไกนี้ทำงานตามที่ออกแบบไว้ ซึ่งจะใช้เวลาในการซื้อขายไปในขณะที่ระบบกำลังทำงาน
ช่วงเช้า รายละเอียดในแต่ละช่วงเวลา
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 = 'GME'
AND window_start >= toDateTime('2021-01-28 04:00:00') AND window_start < toDateTime('2021-01-28 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ช่วงเวลา 09:30 และ 10:00 คือจุดสูงสุด โดยมีจุดต่ำสุดที่ $112.25 ในช่วง 11:00 เป็นจุดต่ำสุดของรอบ — การเคลื่อนไหวแบบไปกลับนี้ทำให้มูลค่าตลาดหายไปหลายหมื่นล้านดอลลาร์ ก่อนจะฟื้นตัวกลับมาได้บางส่วนก่อนช่วงพักเที่ยง โปรดสังเกตปริมาณการซื้อขายที่หายไปในช่วงที่มีการระงับการซื้อขาย (halt windows): ช่วงเวลาที่มีจำนวนหุ้นน้อยคือช่วงที่มีการหยุดซื้อขายเป็นระยะ ทั้งนี้ ราคาที่ปรากฏใน $483 และ $112.25 คือ "ราคาตลาด" ของเช้าวันนั้น ซึ่งเกิดขึ้นห่างกันเพียงไม่กี่นาที — สำหรับผู้ที่ใช้แบบจำลองตลาดแบบต่อเนื่อง (continuous) ควรนำข้อมูลนี้ไปพิจารณาประกอบอย่างยิ่ง
โบรกเกอร์: Robinhood และการจำกัดให้ปิดสถานะเท่านั้น
ข้อเท็จจริงสำคัญอีกประการของวันที่ 28 มกราคม ไม่ได้ปรากฏอยู่ในข้อมูลราคาซื้อขาย ก่อนตลาดเปิด Robinhood ซึ่งเป็นโบรกเกอร์ที่มีแรงซื้อจากรายย่อยจำนวนมากในช่วงเกิด squeeze ได้เปลี่ยนสถานะของ GME และหุ้นตัวอื่น ๆ เป็น position-closing only กล่าวคือ ลูกค้าสามารถขายหุ้นที่มีอยู่ได้แต่ไม่สามารถซื้อเพิ่มได้ ก่อนหน้านี้ Interactive Brokers ได้ปรับสถานะออปชันของ GME เป็น liquidation-only เมื่อช่วงกลางวันของวันที่ 27 มกราคม และโบรกเกอร์รายอื่นอีกหลายแห่งได้เพิ่ม margin requirements หรือจำกัดการเปิดสถานะใหม่ Robinhood ระบุว่าการจำกัดดังกล่าวเป็นผลมาจากการเรียกวางเงินฝากล่วงหน้าจากหน่วยงานชำระราคา (clearinghouse) ในช่วงก่อนรุ่งสาง โดยมียอดรวมอยู่ที่ประมาณ 3 พันล้านดอลลาร์ ซึ่งลดลงหลังจากมีการประกาศจำกัดสถานะ และบริษัทได้ระดมทุนจากนักลงทุนได้มากกว่าหนึ่งพันล้านดอลลาร์ในคืนนั้น ทั้งการไต่สวนของสภาคองเกรสในเดือนกุมภาพันธ์ 2021 และรายงานจากเจ้าหน้าที่ของ SEC ในเดือนตุลาคม 2021 ต่างได้ระบุรายละเอียดของลำดับเหตุการณ์ดังกล่าวไว้
ข้อมูลราคาที่บันทึกไว้แสดงให้เห็นถึงความประจวบเหมาะของเวลา ไม่ใช่ข้อสรุป: มีการประกาศจำกัดสถานะก่อนตลาดเปิด ตามด้วยช่องว่างราคาขาลง -23.2% เมื่อเวลา 9:30 น., ราคาพิมพ์ที่ $483, การหยุดพักการซื้อขาย (halts) และจุดต่ำสุดที่ $112.25 และรายการหุ้นที่ถูกจำกัดสถานะมีการเคลื่อนไหวไปในทิศทางเดียวกัน:
SQL เบื้องหลังตัวเลขแต่ละตัว
SELECT
ticker,
round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) = '2021-01-27' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS close_jan27,
round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) = '2021-01-28' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS close_jan28,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) = '2021-01-28' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) = '2021-01-27' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS change_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('GME', 'AMC', 'BB', 'NOK', 'KOSS')
AND window_start >= toDateTime('2021-01-27 00:00:00') AND window_start < toDateTime('2021-01-29 04:00:00')
GROUP BY ticker
ORDER BY change_pct ASCหุ้นทุกตัวในรายการปิดลบอย่างรุนแรง โดยมีช่วงราคาตั้งแต่ -56.3% สำหรับหุ้นที่ได้รับผลกระทบหนักที่สุด (AMC) ไปจนถึง -29.1% สำหรับหุ้นที่ได้รับผลกระทบน้อยที่สุด (Nokia) โดย GME มีราคาอยู่ที่ -42.8% หุ้นห้าตัวที่มีธุรกิจไม่เกี่ยวข้องกันเลยแสดงรูปแบบราคาที่เหมือนกันในวันเดียวกัน ซึ่งปัจจัยร่วมเพียงอย่างเดียวคือรายการหุ้นที่ถูกจำกัดสถานะดังกล่าว
ตลาดออปชัน: กลไกการป้องกันความเสี่ยงที่ทำงานอย่างเต็มกำลัง
ในช่วงสัปดาห์ที่เกิดสภาวะ squeeze ตลาดออปชันของ GameStop มีความเคลื่อนไหวหนาแน่นที่สุดเมื่อเทียบกับบริษัทจดทะเบียนอื่นๆ ปัจจัยสำคัญที่เกิดขึ้นคือ gamma loop โดยปกติแล้วผู้ขาย call option จะต้องซื้อหุ้นเพื่อป้องกันความเสี่ยง และเมื่อราคาพุ่งสูงขึ้นเข้าใกล้ราคา strike จำนวนหุ้นที่ต้องใช้ในการป้องกันความเสี่ยงจะเพิ่มขึ้น ส่งผลให้เกิดแรงซื้อเชิงกลไกตามราคาที่สูงขึ้น แม้ข้อมูลการซื้อขายจะไม่สามารถแสดงการป้องกันความเสี่ยงโดยตรงได้ แต่สามารถแสดงให้เห็นถึงปริมาณการซื้อขายที่เกิดขึ้น:
SQL เบื้องหลังตัวเลขแต่ละตัว
SELECT
toString(toDate(toTimeZone(sip_timestamp, 'America/New_York'))) AS session,
round(sumIf(size, substring(ticker, 12, 1) = 'C') / 1e6, 2) AS call_contracts_m,
round(sumIf(size, substring(ticker, 12, 1) = 'P') / 1e6, 2) AS put_contracts_m,
round(100.0 * sumIf(size, substring(ticker, 12, 1) = 'C') / sum(size), 1) AS call_share_pct,
round(sum(toFloat64(price) * size * 100) / 1e9, 2) AS premium_bn,
round(count() / 1e3, 0) AS prints_k
FROM global_markets.options_trades
WHERE ticker >= 'O:GME21' AND ticker < 'O:GME22'
AND sip_timestamp >= toDateTime('2021-01-25 00:00:00') AND sip_timestamp < toDateTime('2021-01-29 00:00:00')
GROUP BY session
ORDER BY sessionในวันที่ 2021-01-27 ซึ่งเป็นวันก่อนหน้าเซสชันนี้ มีการเปลี่ยนมือของค่าพรีเมียมออปชันมูลค่า $7.99 billion เฉพาะในสัญญาของ GME เท่านั้น จากรายการซื้อขายรายย่อยจำนวน 351 thousand รายการ และในวันที่ 28 มีมูลค่าเพิ่มขึ้นอีก $3.97 billion นอกจากนี้ยังมีรายละเอียดหนึ่งที่มักถูกละเลยในการเล่าเรื่อง คือตลาดมี ปริมาณ put หนาแน่นในช่วงขาขึ้น โดยในวันที่ 27 มีปริมาณสัญญา call เพียง 24% ของปริมาณสัญญาทั้งหมด (put 1.05 million เทียบกับ call 0.33 million) และอยู่ที่ 29.5% ในวันที่ 28 ในขณะที่กลุ่มนักลงทุนกำลังไล่ราคาขาขึ้น ก็มีกลุ่มนักลงทุนอีกกลุ่มที่ยอมจ่ายเงินเพื่อป้องกันความเสี่ยงขาลงในช่วงที่ราคาทำจุดสูงสุดเช่นกัน
ผลกระทบที่ตามมา: การปรับตัวลดลงอย่างรุนแรง
วันที่ 28 มกราคม ไม่ใช่จุดสิ้นสุด ในเซสชันถัดมาคือวันที่ 29 มกราคม การซื้อกลับเริ่มกลับมามีจำกัดในกลุ่มโบรกเกอร์ที่มีข้อจำกัด โดยมีการจำกัดจำนวนหุ้นที่ถือครองใน Robinhood จนเหลือเพียงหลักหน่วยในบางช่วง ส่งผลให้ GME ปิดที่ $328.24 เพิ่มขึ้น 66.2% ในวันนั้น และเป็นการปิดตลาดครั้งสุดท้ายที่อยู่ในระดับใกล้เคียงกับจุดสูงสุด
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 = 'GME'
AND window_start >= toDateTime('2021-01-27 00:00:00') AND window_start < toDateTime('2021-02-09 23:59:00')
GROUP BY et_date
)
)
WHERE et_date >= toDate('2021-01-29') AND et_date <= toDate('2021-02-09')
ORDER BY et_dateทิศทางการปรับตัวลดลงมีความชันเทียบเท่ากับขาขึ้น โดยลดลง -30.8% ใน 2021-02-01, -60.1% ใน 2021-02-02 และเมื่อถึง 2021-02-04 ราคาปิดอยู่ที่ $53.38 จากเดิมที่เคยพุ่งไปถึง $483 เมื่อห้าเซสชันก่อนหน้า ข้อมูลรายงานสถานะ Short Interest รายปักษ์แสดงให้เห็นถึงผลลัพธ์ที่เกิดจากปรากฏการณ์ squeeze ในขณะนั้น:
SQL เบื้องหลังตัวเลขแต่ละตัว
SELECT toString(settlement_date) AS settled,
round(short_interest / 1e6, 1) AS shares_short_m,
round(days_to_cover, 1) AS days_to_cover
FROM global_markets.stocks_short_interest
WHERE ticker = 'GME'
AND settlement_date >= '2020-11-01'
AND settlement_date <= '2021-02-28'
ORDER BY settlement_dateจากสถานะ Short จำนวน 71.2 ล้านหุ้น ณ วันชำระราคา 2020-12-31 ตัวเลข Short Interest ที่รายงานลดลงเหลือเพียง 21.4 ล้านหุ้น ภายในวันที่ 2021-01-29 ซึ่งเป็นวันชำระราคาหนึ่งเซสชันหลังจากวันที่ในหน้านี้ และ days to cover ลดลงจาก 14 ในช่วงสูงสุดของเดือนพฤศจิกายน เหลือเพียง 1 เมื่อพิจารณาจากตัวชี้วัดนี้ แสดงให้เห็นว่ากลุ่ม Short ที่เป็นต้นเหตุของสถานการณ์นี้ส่วนใหญ่ได้ปิดสถานะไปแล้วเมื่อสิ้นเดือน รายละเอียดของกระบวนการคลายสถานะนี้สามารถอ่านได้ใน คำอธิบายเรื่อง short squeeze และความแตกต่างระหว่างตัวเลขรายปักษ์นี้กับปริมาณการขายชอร์ตรายวันสามารถอ่านได้ใน short interest vs short volume
บทเรียนจากวันนี้
แม้จะมีภาพลักษณ์แบบยุค meme แต่เมื่อวันที่ 28 มกราคม คือบทเรียนคลาสสิกเรื่องสภาพคล่อง ราคาหุ้นถูกกำหนดโดยคำสั่งซื้อขายส่วนเพิ่มที่มีความเร่งด่วนที่สุด เมื่อความเร่งด่วนในการปิดสถานะ (การซื้อคืนของฝั่ง short) ข้อจำกัดในการเข้าถึง (โบรกเกอร์จำกัดการซื้อ) และการหยุดพักการซื้อขายตามกลไก (LULD halts) เกิดขึ้นพร้อมกัน ราคาจะเคลื่อนที่แบบกระโดดเป็นจังหวะแทนที่จะเป็นเส้นโค้งที่ต่อเนื่อง ไม่มีปัจจัยใดในวันนี้ที่จำเป็นต้องมีตัวร้ายมาอธิบายรูปแบบราคา และข้อมูลในกราฟรายนาทีก็ไม่สามารถยืนยันหรือปฏิเสธการมีอยู่ของตัวร้ายได้ ข้อมูลที่แสดงด้านบนคือสิ่งที่เกิดขึ้นจริงในตลาด
คำถามที่พบบ่อยเกี่ยวกับ GameStop ณ วันที่ 28 มกราคม
ราคาที่สูงที่สุดตลอดกาลของ GameStop คือเท่าใด?
$483 (ราคาในช่วงระหว่างวัน) ซึ่งบันทึกไว้เมื่อเช้าวันที่ 28 มกราคม 2021 หากปรับสัดส่วนตามการแตกหุ้นแบบ four-for-one ในปี 2022 จะเทียบเท่ากับ $120.75 ตามจำนวนหุ้นในปัจจุบัน
ทำไม Robinhood ถึงจำกัดการซื้อหุ้น GameStop?
Robinhood ปรับเปลี่ยนสถานะของ GME และหุ้นตัวอื่นให้สามารถปิดสถานะได้เท่านั้น (position-closing only) เมื่อวันที่ 28 มกราคม 2021 โดยระบุสาเหตุจากการเรียกวางเงินประกันของ clearinghouse ซึ่งมีมูลค่าประมาณ 3 พันล้านดอลลาร์ในเช้าวันนั้น บริษัทระดอลลาร์จากนักลงทุนในช่วงข้ามคืน และกลับมาเปิดให้ซื้อได้แบบจำกัดในเซสชันถัดไป ข้อมูลนี้มีระบุไว้ในคำให้การต่อรัฐสภาและรายงานของเจ้าหน้าที่ SEC ประจำปี 2021
Robinhood เป็นต้นเหตุที่ทำให้หุ้น GameStop ดิ่งลงหรือไม่?
ข้อมูลการซื้อขายบันทึกลำดับเหตุการณ์ไว้แต่ไม่ได้ระบุคำตัดสิน: มีการประกาศข้อจำกัดก่อนตลาดเปิด ทำให้ GME ราคาเปิดกระโดดลง -23.2% และทำราคาสูงสุดที่ $483 พร้อมกับทำราคาต่ำสุดที่ $112.25 ภายในเวลาสองชั่วโมง โดยหุ้นทุกตัวที่ถูกจำกัดการซื้อต่างปิดลบเป็นเลขสองหลักในวันเดียวกัน ข้อถกเถียงยังคงมีอยู่ว่าปัจจัยใดสำคัญที่สุด ซึ่งรายงานของเจ้าหน้าที่ SEC ไม่ได้สรุปประเด็นนี้
ในวันที่ 28 มกราคม 2021 หุ้น GME ถูกระงับการซื้อขาย (halt) กี่ครั้ง?
ข้อมูลรายนาทีแสดงให้เห็นว่ามีแท่งเทียนในเซสชันปกติเพียง 314 แท่ง จากทั้งหมด 390 แท่ง หรือสูญเสียเวลาไปประมาณเจ็ดสิบหกนาทีจากการถูกระงับการซื้อขายด้วยกลไก Limit Up/Limit Down ซ้ำหลายครั้ง ส่งผลให้วันที่ 28 มกราคม เป็นวันที่มีการระงับการซื้อขายมากที่สุดในช่วงเกิดเหตุ squeeze ทั้งหมด โดยไม่มีเซสชันอื่นใดตั้งแต่วันที่ 25 มกราคม ถึง 4 กุมภาพันธ์ ที่มีจำนวนแท่งเทียนในเซสชันปกติน้อยกว่า 348 แท่ง
เกิดอะไรขึ้นกับ GME หลังจากวันที่ 28 มกราคม 2021?
ราคาพุ่งขึ้นอีกหนึ่งครั้งโดยปิดที่ $328.24 เมื่อวันที่ 29 มกราคม จากนั้นจึงเริ่มดิ่งลง: ภายใน 2021-02-04 ราคาหุ้นปิดที่ $53.38 และรายงานสถานะการขายชอร์ต (short interest) ได้ลดลงเหลือเพียง 21.4 ล้านหุ้น ณ การชำระราคาเมื่อวันที่ 29 มกราคม
ข้อมูลในทุกส่วนข้างต้นมาจากการดึงข้อมูลย้อนหลังผ่านคำสั่ง SQL ที่มีการจัดเก็บเป็นเวอร์ชัน หากต้องการดูรายละเอียดการวัดผลแต่ละค่าสามารถขยายคำสั่ง SQL ได้ หากต้องการสัมผัสประสบการณ์ในวันดังกล่าวแทนการอ่านข้อมูล สามารถทดลองได้ใน โปรแกรมจำลองการเทรดของ Strasmore Labs