game stop jan 28 2021 483 to 112 noon
Jan 28 2021: GME print $483 and $112 for one morning, Robinhood go position-close-only, and 76 minutes vanish inside trading halts. Di tape, receipted.
January 28, 2021 na di highest point of di GameStop squeeze, di morning wey GME print $483 and $112.25 inside two hours, di day wey Robinhood and oda brokerages stop people from buying di stock, and, according to di minute bars wey dem record, wey dey below, na di day wey di squeeze get di most halts. Di mechanics of di squeeze dey inside di short squeeze explainer, with dis same stock as di case study; dis page na di day itself, di run-up wey set am up, di tape minute by minute, di broker restrictions, di options flow, and di round trip back down. Every number na stored query; open any panel for di SQL.
Di run-up: December 2020 go reach January 27
Di single wildest day for di saga no make sense without di eight weeks wey dey before am. GME end 2020-12-01 at $15.81, one mall retailer wey dem don short well-well, wey dey trade few million shares every day, 6.2 million for one ordinary early-December session. For di eve of dis page's session, e close at $345, 21.8 times di December 1 price.
The exact SQL behind every number
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_dateDi path na staircase, no be ramp. Through mid-January, di stock dey creep along for di teens; on 2021-01-13 e close at $31.44 on 144.4 million shares, volume wey pass twenty times di December norm, and from dere each leg bin bigger pass di last one, through di $64.85 close on 2021-01-22 go reach di near-doubling wey enter January 27. Short sellers bin dey positioned throughout: di settlement-date receipts wey dey further down dis page go show wetin dat climb do to dem.
Di day, for one row, count di bars
The exact SQL behind every number
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')Start with di bar count: 314 regular-session minute bars instead of 390. Di roughly seventy-six missing minutes na Limit Up/Limit Down volatility halts wey dey trip over and over as di price teleport; no oda session of di squeeze stretch, January 25 through February 4, keep less dan 348 regular-session bars. Between di halts: an open at $265, wey already -23.2% below di before official close, di overnight and premarket tape don turn violent as brokerage restrictions dem announce, den a spike to di all-time high of $483 for di opening hour, a collapse to $112.25 at 11:24 ET, -67.5% below di before close, and a close at $197.44, -42.8% down for di day. All prices as dem trade, before di 2022 four-for-one split.
Di scale deserve im own sentence: 57.4 million shares change hands across di extended day, roughly $16.7 billion for dollar volume, megacap-sized turnover wey concentrate for a video-game retailer wey don trade 6.2 million shares for a quiet session eight weeks before.
Wetin Limit Up/Limit Down halt really be
Di halts no be exchange wey dem just decide; dem dey happen automatic. A Limit Up/Limit Down (LULD) halt na di single-stock circuit breaker wey dem adopt after di 2010 flash crash. Every stock get price band wey dey around a reference price, wey be rolling five-minute average of im own trades, of 5% for both side for di biggest names, 10% for most oda ones, and wider for low-priced stocks, with bands wey dem double for di last 25 minutes of di session. If di best bid or offer dey for di band edge for 15 seconds, trading for dat stock go pause for every exchange for five minutes, and e go reopen by auction for di listing exchange; when di auction no fit settle inside di allowed range, di pause go extend. For tape wey dey move like GME dat morning, di cycle go repeat: reopen, cross di width of a band for seconds, pause again. Dat na how a session fit lose seventy-six minutes with nobody pressing button, di mechanism dey work exactly as dem design am, dey consume trading time as e dey work.
Di morning, bucket by bucket
The exact SQL behind every number
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_timeDi 09:30 and 10:00 buckets get di peak; di 11:00 bucket im $112.25 low na di trough, one round trip wey wipe out and partly build back tens of billions of market value before lunch. Make you note di missing volume inside di halt windows: di buckets wey get sparse shares na di ones wey trading keep stopping. Di $483 and $112.25 prints both na "di market price" dat morning, minutes apart, anybody wey dey model markets as continuous suppose keep dis tape pinned above dem desk.
Di brokers: Robinhood and position-close-only
Di oda defining tori of January 28 no dey for di price tape at all. Before market open, Robinhood, di brokerage wey most of di squeeze retail buying dey happen, put GME and some oda names for position-closing only: customers fit sell shares wey dem hold but dem no fit buy. Interactive Brokers don put GME options into liquidation-only for afternoon of di previous day, January 27, and plenty oda brokers raise margin requirements or restrict opening trades. Robinhood tok say di restriction na because of pre-dawn deposit call from di industry clearinghouse wey dem put at roughly $3 billion, wey reduce afta di restrictions go in, and di firm raise over a billion dollars from dia investors dat night. Di February 2021 congressional hearing and di SEC October 2021 staff report both explain dat sequence well-well.
Wetin di tape record na co-timing, not a verdict: restrictions announce before market open, a -23.2% gap down at 9:30, di $483 print, di halts, di $112.25 low. And di restriction list move as one bloc:
The exact SQL behind every number
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 ASCEvery name for di panel close hard down, spanning -56.3% for di hardest-hit (AMC) to -29.1% for di mildest (Nokia), with GME itself at -42.8%. Five stocks with five unrelated businesses print di same shape for di same day, di common factor na di list itself.
Di options tape: di hedging machine dey run full throttle
For squeeze week, GameStop's options market bin be among di busiest for any listed company. Di normal story include a gamma loop, wey a dealer wey sell a call option dey buy shares to hedge, and as di price dey rise go near di strike, dat hedge must grow, wey dey add mechanical buying as e dey go up. Trade prints no fit show di hedging directly, but dem show di throughput:
The exact SQL behind every number
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 sessionFor 2021-01-27, di night before dis session, $7.99 billion of option premium change hand for GME contracts alone, across 351 thousand individual prints; di 28th add $3.97 billion more. And one detail wey di retelling dey usually skip: di tape bin put-heavy for di top. Calls na only 24% of contract volume for di 27th (1.05 million puts against 0.33 million calls) and 29.5% for di 28th. Alongside di crowd wey dey chase di upside, one crowd dey pay for downside as di top dey form.
Di afta-math: di round trip go down
January 28 no be di end. Di next session, January 29, limited buying start again for di restricted brokers, position caps for Robinhood for one point dey measure for single-digit share counts, and GME close at $328.24, up 66.2% for dat day. Na di last close wey near di highs.
The exact SQL behind every number
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_dateDi way down be as steep as di way up: -30.8% for 2021-02-01, -60.1% for 2021-02-02, and by 2021-02-04 di close na $53.38, for one stock wey don print $483 five sessions before. Di fortnightly short-interest file show wetin di squeeze don do by dat time:
The exact SQL behind every number
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_dateFrom 71.2 million shares short for di 2020-12-31 settlement, reported short interest collapse go 21.4 million by 2021-01-29, di settlement one session afta dis page date, and days to cover fall from 14 for di November peak go 1. Di shorts wey dia positions define di setup, by dis measure, don nearly finish by month-end; di anatomy of dat unwind dey inside di short squeeze explainer, and di difference between dis fortnightly figure and daily short-sale volume dey inside short interest vs short volume.
Wetin dis day dey teach
For all di meme-era dressing, January 28 na classical liquidity lesson. One stock price dey set by di most urgent marginal order wey dey, and when di urgency to close position (shorts dey buy), access restrictions (brokers dey limit buys), and mechanical pauses (LULD halts) all land for di same tape, price discovery dey happen for staccato jumps, no be smooth curve. Nothing for di day require any villain to explain wetin happen, and nothing for di minute bars fit rule one in or out. Di receipts wey dey above na wetin actually print.
GameStop January 28 FAQ
Wetin be GameStop highest price ever?
$483 (intraday, as-traded), wey print for morning of January 28, 2021. If you adjust am for di 2022 four-for-one split, dat one dey equal $120.75 for today share count.
Why Robinhood stop people from buying GameStop?
Robinhood move GME and oda names to position-closing only for January 28, 2021, and dem tok say na clearinghouse deposit call wey dem put at about $3 billion dat morning cause am. Dem raise over one billion dollars from investors overnight and bring back limited buying for di next session. Congressional testimony and di SEC 2021 staff report document di matter.
Robinhood cause di GameStop crash?
Di tape show di sequence, not di verdict: restrictions announce before market open, GME gap -23.2% down, print im $483 record and im $112.25 low within two hours, and every restricted name close down double digits di same day. Which ingredient matter pass still dey for argument; di SEC staff report no settle am.
How many times dem halt GME for January 28, 2021?
Di minute tape show 314 regular-session bars instead of 390, about seventy-six minutes lost to plenty Limit Up/Limit Down halts. Dat one make January 28 be di heaviest halt day for di whole squeeze: no oda session from January 25 through February 4 keep less than 348 regular-session bars.
Wetin happen to GME after January 28, 2021?
One more surge, close of $328.24 for January 29, and den di slide: by 2021-02-04 di stock close at $53.38, and reported short interest don already collapse to 21.4 million shares for di January 29 settlement.
Every panel above na stored, versioned query over di historical tape, expand di SQL to see each measurement. You wan feel dis day instead of read am? E dey among di playable scenarios for Strasmore Labs trading simulator.