GameStop 1月28日盤中走勢
2021年1月28日:GME 在一個上午觸及483美元與112美元,Robinhood 轉為僅限平倉,76分鐘因交易暫停而蒸發。逐筆成交紀錄。
2021年1月28日是GameStop軋空行情的高潮——當天早上GME在兩小時內觸及$483與$112.25,Robinhood及其他券商當日限制該股買入,而且根據下方記錄的分鐘K線計算,這一天也是整段軋空過程中暫停交易次數最多的一天。軋空的運作機制已在短擠壓說明中詳細解釋,並以同一檔股票作為案例研究;本頁聚焦於當天本身——事前的漲勢鋪墊、逐分鐘的成交紀錄、券商限制、選擇權資金流,以及股價的完整來回走勢。每一項數字皆來自已儲存的查詢;展開任一區塊即可查看SQL。
漲勢:2020年12月至1月27日
這場大戲中最瘋狂的一天,若沒有前面八週的鋪墊,根本說不通。GME在2020-12-01收在$15.81,是一家被大量放空的購物中心零售商,每天交易量僅數百萬股——12月初普通交易日約6.2萬股。在本頁所載交易日的前一天,該股收在$345——是12月1日股價的21.8倍。
每個數據背後的精確 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這條路徑是階梯狀,而非斜坡。直到1月中旬,股價仍在十幾美元徘徊;2021-01-13當天,該股收在$31.44,成交量144.4萬股——是12月日均量的二十多倍——此後每一波漲幅都比前一波更大,從2021-01-22收在$64.85,到1月27日近乎翻倍。放空者全程都維持著部位:本頁下方交割日收據顯示了這波漲勢對他們的影響。
一日行情,濃縮於一條K線——細數K棒
每個數據背後的精確 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')先看K棒數量:314 根常規交易時段分鐘K棒,而非390根。大約少了七十六分鐘,是因為價格瞬間飆升,導致漲跌停的波動性暫停機制反覆觸發;在1月25日至2月4日這波軋空走勢中,沒有任何其他交易日的常規交易時段K棒少於 348 根。在暫停交易之間:開盤價為 $265——已較前一日正式收盤價下跌 -23.2%,因券商宣布限制措施後,隔夜與盤前交易已轉為劇烈——隨後在開盤首小時飆升至歷史高點 $483,接著在美東時間 11:24 暴跌至 $112.25——較前一日收盤價下跌 -67.5%——最終收於 $197.44,當日下跌 -42.8%。所有價格均為交易當時的實際價格,尚未計入2022年的一拆四股票分割。
其規模值得單獨說明:57.4 萬股在整個延長交易時段內易手,成交金額約為 $16.7 億——這種巨頭等級的週轉率,竟集中在這家電玩零售商身上,而八週前一個平靜的交易日,其成交量也不過 6.2 萬股。
漲跌停機制觸發暫停交易的真正意義
這些暫停並非交易所自行裁量,而是自動觸發。漲跌停機制(Limit Up/Limit Down,LULD)是2010年閃電崩盤後採行的個股熔斷機制。每檔股票都圍繞一個參考價格設有價格區間——該參考價格是其自身交易的五分鐘滾動平均值——大型股為上下5%,多數其他股票為10%,低價股的區間更寬,且在交易時段最後25分鐘區間會擴大一倍。若最佳買價或賣價停留在區間邊緣達15秒,該股票在所有交易所的交易將暫停五分鐘,並在掛牌交易所透過競價重新開盤;當競價無法在允許範圍內成交時,暫停時間便會延長。在像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_time09:30 與 10:00 兩個時段包含價格高峰;11:00 時段的 $112.25 低點則是谷底——這一趟來回,在午盤前抹去又部分重建了數百億市值。請留意暫停交易窗口內消失的成交量:那些股數稀疏的時段,正是交易反覆觸發熔斷的時刻。$483 與 $112.25 的成交價,在當日早盤相隔數分鐘內,都曾是「市場價格」——任何將市場視為連續過程來建模的人,都該把這份逐筆記錄釘在辦公桌上方。
券商:Robinhood 與限縮為僅能平倉
1月28日的另一個關鍵事實,並未出現在價格紀錄上。開盤前,Robinhood——這波軋空行情中許多散戶買盤所在的券商——將GME及其他一眾股票改為僅能平倉:客戶可以賣出手中持股,但不得買進。Interactive Brokers已在前一天1月27日中午,將GME的選擇權設為僅能清算,另有數家券商調高了保證金要求,或限制建立新倉位。Robinhood將其限制歸因於凌晨時分行業清算機構發出的追繳保證金通知,金額約為30億美元——在限制實施後有所調降——該公司當晚向投資人籌措了超過十億美元資金。2021年2月的國會聽證會,以及美國證管會2021年10月發布的幕僚報告,都詳細說明了這段過程。
價格紀錄所呈現的是時間上的巧合,而非定論:開盤前宣布限制措施,-23.2% 在9點30分跳空下跌,觸及$483的價位,觸發熔斷,來到$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%。五檔業務互不相干的股票,在同一天印出了一模一樣的走勢圖——共同因素就是那份名單本身。
選擇權交易紀錄:避險機器全速運轉
到了軋空週,GameStop 的選擇權市場已是所有上市公司中最繁忙的之一。標準的說法包含伽瑪循環——賣出買權的造市商通常會買進股票避險,而當價格朝履約價上漲時,該避險部位必須擴大,在漲勢中增添機械性買盤。交易紀錄無法直接顯示避險行為,但能顯示其吞吐量:
每個數據背後的精確 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 億的選擇權權利金僅在 GME 合約中易手,分散在 351 千筆個別交易紀錄中;28 日又增加了 $3.97 億。而複述時通常會跳過的一個細節是:在高點時,交易紀錄以賣權為主。買權僅佔 27 日合約量的 24%(1.05 百萬口賣權對比 0.33 百萬口買權),28 日則佔 29.5%。在追逐上漲動能的群眾旁邊,另一群人在頭部成形時,正為下跌付出代價。
後續:股價的來回下跌
1月28日並非終點。隔一個交易日,1月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下跌的速度與上漲一樣陡峭:2021-02-01下跌-30.8%,2021-02-02下跌-60.1%,到了2021-02-04,收盤價來到$53.38——而這檔股票五個交易日前才創下$483的價格。雙週申報的沽空持倉數據,記錄了當時挾淡倉已達成的效果:
每個數據背後的精確 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從2020-12-31結算日的71.2百萬股沽空持倉,申報沽空持倉在2021-01-29前急劇縮減至21.4百萬——2021-01-29是本文日期後一個交易日的結算日——而平倉天數則從11月高峰的14降至1。按此衡量,構成最初格局的淡倉,在月底時已大致離場;這輪平倉的詳細過程,請見挾淡倉解說,而這項雙週數據與每日沽空成交量的差異,則在沽空持倉 vs 沽空成交量中說明。
這一天教會我們的事
儘管披著迷因時代的外衣,1 月 28 日本質上是一堂經典的流動性課程。一支股票的價格,是由最急迫的邊際訂單所決定;而當平倉的急迫性(空頭回補)、進場限制(券商限制買入)與機制性暫停(LULD 熔斷)同時出現在同一張報價紙帶上時,價格發現便以斷斷續續的跳躍方式進行,而非平滑曲線。這一天的走勢,無需任何反派角色就能解釋其樣貌——而分鐘 K 線圖也無法排除或證實任何陰謀論。上方所列的,就是實際印在紙帶上的成交紀錄。
GameStop 1月28日常見問答
GameStop 史上最高價是多少?
$483(盤中、實際成交價),出現在2021年1月28日上午。經2022年一股拆四股調整後,對應目前股數的價格為$120.75。
Robinhood 為何限制買入 GameStop?
Robinhood 在2021年1月28日將 GME 及其他數檔個股改為僅能平倉,並將此決定歸因於當日上午收到的清算所保證金追繳通知,金額約為30億美元。該公司連夜向投資人籌措超過十億美元資金,並於次一交易日恢復有限度的買入。國會聽證會證詞與美國證管會(SEC)2021年的幕僚報告均記載了此一說法。
GameStop 的崩跌是 Robinhood 造成的嗎?
交易記錄呈現了事件順序,而非定論:限制措施在開盤前宣布,GME 開盤即-23.2%跳空下跌,在兩小時內創下$483的紀錄高點與$112.25的低點,且所有被限制的個股當日全數以雙位數跌幅作收。哪個因素最為關鍵至今仍有爭論;SEC 的幕僚報告並未對此做出定論。
GME 在 2021年1月28日被暫停交易多少次?
分鐘交易記錄顯示當日正常交易時段僅有314根K棒,而非390根——約有七十六分鐘因屢次觸發「漲跌停限制」暫停交易而流失。這使得1月28日成為整個軋空行情中暫停交易最頻繁的一天:從1月25日至2月4日,沒有任何其他交易日的正常交易時段K棒數少於348根。
2021年1月28日之後,GME 發生了什麼事?
最後一次飆升——1月29日收於$328.24——隨後便開始下滑:至2021-02-04,該股收於$53.38,而已申報的未平倉空頭部位在1月29日結算時已驟降至21.4百萬股。
以上每個區塊都是對歷史交易記錄所執行的、帶有版本控制的儲存查詢——展開 SQL 即可查看各項衡量指標。想親身體驗而非閱讀這一天嗎?這是 Strasmore Labs 交易模擬器中可遊玩的場景之一。