GameStop kurs 483 USD do 112 USD
W dniu 28 stycznia 2021 r. kurs GME spadł ze 483 USD do 112 USD. Robinhood ograniczył handel, co wywołało liczne przerwy w notowaniach akcji spółki.
28 stycznia 2021 roku był kulminacyjnym momentem squeeze'u na akcjach GameStop — rano kurs GME wzrósł o $483 oraz $112.25 w ciągu dwóch godzin, tego samego dnia Robinhood oraz inni brokerzy ograniczyli możliwość kupowania tego waloru, a — według danych z minutowych słupków świecowych, wymienionych poniżej — był to dzień z największą liczbą przerw w handlu podczas samego squeeze'u. Mechanizmy squeeze'u zostały omówione w wyjaśnieniu mechanizmu short squeeze, gdzie wykorzystano tę samą spółkę jako studium przypadku; niniejsza strona dotyczy konkretnego dnia — wzrostów, które do tego doprowadziły, przebiegu notowań minuta po minucie, restrykcji brokerów, przepływu opcji oraz powrotu kursu w dół. Każda liczba pochodzi z zapytania SQL; aby zobaczyć kod, należy rozwinąć dowolny panel.
The run-up: December 2020 to January 27
The single wildest day in the saga makes no sense without the eight weeks in front of it. GME ended 2020-12-01 at $15.81, a heavily-shorted mall retailer trading a few million shares a day — 6.2 million on an ordinary early-December session. On the eve of this page's session it closed at $345 — 21.8 times the December 1 price.
Dokładny kod SQL dla każdej liczby
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_dateThe path is a staircase, not a ramp. Through mid-January the stock crept along in the teens; on 2021-01-13 it closed at $31.44 on 144.4 million shares — volume more than twenty times its December norm — and from there each leg was larger than the last, through the $64.85 close on 2021-01-22 to the near-doubling into January 27. Short sellers were positioned throughout: the settlement-date receipts further down this page show what that climb did to them.
Dzień w jednej linii — liczba słupków
Dokładny kod SQL dla każdej liczby
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')Zacznijmy od liczby słupków: 314 minutowych słupków sesji regularnej zamiast 390. Około siedemdziesiąt sześć brakujących minut to powtarzające się przerwy w handlu typu Limit Up/Limit Down, wywołane gwałtownymi skokami ceny; żadna inna sesja w okresie od 25 stycznia do 4 lutego nie odnotowała mniej niż 348 słupków sesji regularnej. Pomiędzy przerwami: otwarcie na poziomie $265 — czyli już -23.2% poniżej poprzedniego oficjalnego zamknięcia, podczas gdy nocny i przedsesyjny obrót stał się bardzo zmienny po ogłoszeniu ograniczeń brokerskich — następnie wzrost do historycznego maksimum na poziomie $483 w pierwszej godzinie handlu, spadek do $112.25 o godzinie 11:24 ET — czyli -67.5% poniżej poprzedniego zamknięcia — oraz zamknięcie na poziomie $197.44, co stanowi spadek o -42.8% w ciągu dnia. Wszystkie ceny dotyczą kursów transakcyjnych sprzed podziału akcji w stosunku cztery do jednego w 2022 roku.
Skala obrotów wymaga osobnego zdania: 57.4 milionów akcji wymieniono w trakcie całego dnia handlowego, co daje około $16.7 miliarda USD obrotu wartościowego — obrót o skali spółek typu megacap skoncentrowany w sprzedawcy gier wideo, który osiem tygodni wcześniej, podczas spokojnej sesji, wymienił 6.2 milionów akcji.
Czym w rzeczywistości jest mechanizm Limit Up/Limit Down
Wstrzymanie handlu nie wynika z decyzji giełdy; jest ono automatyczne. Mechanizm Limit Up/Limit Down (LULD) to bezpiecznik dla pojedynczych akcji, wprowadzony po flash crash z 2010 roku. Każda akcja posiada wyznaczone pasmo cenowe wokół ceny referencyjnej — będącej średnią kroczącą z własnych transakcji z ostatnich pięciu minut. Pasmo wynosi 5% w górę i w dół dla największych spółek, 10% dla większości pozostałych, a dla akcji o niskiej cenie pasma są szersze. W ciągu ostatnich 25 minut sesji pasma te zostają podwojone. Jeśli najlepsze zapytanie lub oferta znajdzie się na granicy pasma na 15 sekund, handel daną akcją zostaje wstrzymany na wszystkich giełdach na pięć minut, a następnie zostaje wznowiony poprzez aukcję na giełdzie notowań; jeśli aukcja nie może zostać rozliczona wewnątrz dozwolonego zakresu, przerwa zostaje przedłużona. W przypadku notowań o zmienności zbliżonej do GME tego ranka, cykl się powtarza: wznowienie handlu, przekroczenie szerokości pasma w kilka sekund, ponowne wstrzymanie. W ten sposób sesja traci siedemdziesiąt sześć minut bez ingerencji człowieka — mechanizm działa dokładnie zgodnie z przeznaczeniem, konsumując czas handlowy podczas pracy.
Poranek, segment po segmencie
Dokładny kod SQL dla każdej liczby
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_timeSegmenty z godziny 09:30 i 10:00 zawierają szczyt; niski poziom $112.25 w segmencie z godziny 11:00 stanowi dołek — cykl, który przed lunchem wymazał i częściowo odbudował dziesiątki miliardów wartości rynkowej. Należy zwrócić uwagę na brak wolumenu w oknach zawieszeń handlu: segmenty o niskiej liczbie akcji to te, w których handel był wielokrotnie przerywany. Zapisy $483 i $112.25 stanowiły tego ranka „cenę rynkową” w odstępie kilku minut — każdy, kto modeluje rynki jako proces ciągły, powinien pamiętać o tym zjawisku.
Brokerzy: Robinhood i ograniczenie do zamykania pozycji
Inny kluczowy fakt z dnia 28 stycznia nie jest widoczny w notowaniach. Przed otwarciem sesji Robinhood — dom maklerski, w którym realizowano znaczną część zakupów detalicznych w ramach squeeze — zmienił status GME oraz listy innych spółek na wyłącznie zamykanie pozycji: klienci mogli sprzedawać posiadane akcje, ale nie mogli ich kupować. Interactive Brokers wprowadził opcje na GME w tryb wyłącznie likwidacji w południe poprzedniego dnia, 27 stycznia, a kilku innych brokerów podniosło wymogi depozytowe (margin requirements) lub ograniczyło otwieranie nowych transakcji. Robinhood uzasadnił te ograniczenia wezwaniem do depozytu od izby rozliczeniowej, które wpłynęło przed świtem; kwota ta wynosiła około 3 miliardów USD — po wprowadzeniu restrykcji wartość ta spadła — a firma pozyskała tej nocy ponad miliard dolarów od swoich inwestorów. Luty 2021 roku i przesłuchanie przed Kongresem oraz raport pracowników SEC z października 2021 roku szczegółowo opisują ten ciąg zdarzeń.
Dane rynkowe rejestrują zbieżność czasową, a nie werdykt: ogłoszenie restrykcji przed otwarciem, luka spadkowa -23.2% o 9:30, kurs 483, wstrzymania handlu oraz minimum na poziomie 112.25. Lista spółek objętych ograniczeniami zmieniała się jednocześnie:
Dokładny kod SQL dla każdej liczby
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 ASCWszystkie spółki z zestawienia odnotowały silne spadki, od -56.3% dla najbardziej dotkniętej (AMC) do -29.1% dla najmniej dotkniętej (Nokia), przy czym GME odnotowało -42.8%. Pięć spółek o całkowicie różnych modelach biznesowych wygenerowało ten sam wykres tego samego dnia — wspólnym czynnikiem była sama lista.
Rynek opcji: mechanizm zabezpieczający pracujący na pełnych obrotach
W tygodniu tzw. squeeze, rynek opcji spółki GameStop należał do najbardziej aktywnych wśród wszystkich spółek notowanych na giełdzie. Standardowym zjawiskiem jest pętla gamma — dealer, który sprzedaje opcję call, zazwyczaj kupuje akcje w celu zabezpieczenia pozycji, a wraz ze wzrostem ceny w stronę ceny wykonania, wielkość tego zabezpieczenia musi wzrosnąć, co generuje mechaniczne zakupy podczas wzrostów. Dane transakcyjne nie pokazują bezpośrednio procesu zabezpieczania, ale obrazują skalę obrotów:
Dokładny kod SQL dla każdej liczby
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 sessionW dniu 2021-01-27, przed tą sesją, w samych kontraktach GME nastąpiła wymiana premii opcyjnej o wartości $7.99 miliarda USD, rozłożona na 351 tysięcy pojedynczych transakcji; 28. dzień dodał kolejne $3.97 miliarda USD. Istnieje też szczegół, który w relacjach jest zazwyczaj pomijany: na szczycie dominowały opcje put. Opcje call stanowiły jedynie 24% wolumenu kontraktów dnia 27. (1.05 milionów opcji put wobec 0.33 milionów opcji call) oraz 29.5% dnia 28. Obok grupy inwestorów liczących na wzrosty, w momencie formowania się szczytu, duża grupa uczestników rynku płaciła za zabezpieczenie przed spadkami.
Skutki: gwałtowny spadek
Data 28 stycznia nie oznaczała końca. Podczas kolejnej sesji, 29 stycznia, ograniczony popyt powrócił u brokerów z restrykcjami — limity pozycji na Robinhood osiągały w pewnym momencie wartości jednocyfrowe w liczbie akcji — a GME zamknęło się na poziomie $328.24, co stanowi wzrost o 66.2% w ciągu dnia. Było to ostatnie zamknięcie w pobliżu szczytów.
Dokładny kod SQL dla każdej liczby
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_dateSpadek był równie stromy jak wzrost: -30.8% na 2021-02-01, -60.1% na 2021-02-02, a do 2021-02-04 zamknięcie wyniosło $53.38 — przy akcjach, które pięć sesji wcześniej osiągnęły $483. Raport dotyczący krótkiej sprzedaży (short interest) publikowany co dwa tygodnie pokazuje, co osiągnął squeeze do tego czasu:
Dokładny kod SQL dla każdej liczby
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_dateZ 71.2 milionów akcji sprzedanych krótko przy rozliczeniu z 2020-12-31, raportowana krótka sprzedaż spadła do 21.4 milionów do 2021-01-29 — czyli do rozliczenia przypadającego jedną sesję po dacie publikacji tego artykułu — a liczba dni do pokrycia pozycji spadła z 14 w szczycie w listopadzie do 1. Według tego wskaźnika, gracze grający krótko, których pozycje kształtowały tę sytuację, w dużej mierze wycofali się do końca miesiąca; mechanizm tego wycofywania opisano w wyjaśnieniu zjawiska short squeeze, natomiast różnica między tym dwutygodniowym wskaźnikiem a dziennym wolumenem krótkiej sprzedaży została omówiona w porównaniu short interest i short volume.
Czego uczy ten dzień
Mimo charakterystycznej dla ery memów oprawy, 28 stycznia stanowi klasyczną lekcję płynności. Cena akcji jest ustalana przez najbardziej pilne zlecenie krańcowe. Gdy konieczność zamykania pozycji (kupno przez krótką sprzedaż), ograniczenia dostępu (limitowanie zakupów przez brokerów) oraz mechaniczne przerwy (wstrzymania LULD) występują jednocześnie, proces odkrywania ceny odbywa się poprzez skokowe zmiany, a nie płynne krzywe. Struktura tego dnia nie wymaga obecności antagonisty, aby wyjaśnić jej przebieg — żadne dane z wykresów minutowych nie pozwalają na jednoznaczne wskazanie winowajcy. Powyższe zestawienia przedstawiają faktycznie zarejestrowane wartości.
FAQ GameStop z 28 stycznia
Jaka była najwyższa cena akcji GameStop w historii?
$483 (w trakcie sesji, cena transakcyjna), odnotowana rano 28 stycznia 2021 roku. Po skorygowaniu o podział akcji w stosunku cztery do jednego w 2022 roku, wartość ta odpowiada kwocie $120.75 przy obecnej liczbie akcji.
Dlaczego Robinhood ograniczył możliwość kupowania akcji GameStop?
28 stycznia 2021 roku Robinhood zmienił status GME oraz innych walorów na wyłącznie zamykanie pozycji. Decyzję uzasadniono wezwaniem do depozytu przez izbę rozliczeniową, które rano wyniosło około 3 miliardów USD. Firma pozyskała ponad miliard dolarów od inwestorów w ciągu jednej nocy, a w kolejnej sesji przywróciła ograniczone możliwości kupowania. Fakty te dokumentuje zeznanie przed Kongresem oraz raport pracowników SEC z 2021 roku.
Czy Robinhood spowodował krach GameStop?
Dane giełdowe rejestrują sekwencję zdarzeń, a nie werdykt: ograniczenia ogłoszono przed otwarciem sesji, GME zaliczyło lukę spadkową na poziomie -23.2%, w ciągu dwóch godzin odnotowano rekordowe $483 oraz dołek na poziomie $112.25, a wszystkie walory objęte restrykcjami zamknęły się tego samego dnia z dwucyfrową stratą. O to, który czynnik miał kluczowe znaczenie, wciąż trwa spór; raport pracowników SEC nie rozstrzygnął tej kwestii.
Ile razy wstrzymywano obrót GME 28 stycznia 2021 roku?
Zapis minutowy wykazuje 314 sesji regulaminowych zamiast 390 — oznacza to utratę około siedemdziesięciu sześciu minut z powodu powtarzających się wstrzymń typu Limit Up/Limit Down. Sprawiło to, że 28 stycznia był dniem z największą liczbą wstrzymań handlu podczas całego squeeze: żadna inna sesja w okresie od 25 stycznia do 4 lutego nie miała mniej niż 348 sesji regulaminowych.
Co stało się z GME po 28 stycznia 2021 roku?
Nastąpił jeszcze jeden wzrost — zamknięcie na poziomie $328.24 w dniu 29 stycznia — a następnie spadek: do 2021-02-04 akcje zamknęły się na poziomie $53.38, natomiast raportowany short interest spadł już do 21.4 milionów akcji podczas rozliczenia z 29 stycznia.
Każdy powyższy panel to zapisane, wersjonowane zapytanie do historycznych danych giełdowych — rozwiń SQL, aby zobaczyć każde pomiary. Chcesz przeżyć ten dzień zamiast tylko go czytać? Jest to jeden z możliwych do rozegrania scenariuszy w symulatorze handlowym Strasmore Labs(https://labs.strasmore.com/g1).