Динамика акций GameStop 28 января 2021 года
В этот день цена GME упала с 483 до 112 долларов. Разбираем причины ограничений брокера Robinhood и причины частых приостановок торгов.
28 января 2021 года наступил пик сквиза GameStop. За два часа утром цена GME достигла значений $483 и $112.25. В этот же день Robinhood и другие брокеры ограничили покупку акций данного актива. Согласно данным минутных графиков, этот день стал самым загруженным по количеству приостановок торгов за весь период сквиза. Механика сквиза описана в статье объяснение короткого сквиза, где в качестве примера рассматривается эта акция. Данная страница посвящена именно этому дню: предшествующему росту, поминутной динамике котировок, ограничениям брокеров, потоку опционов и последующему падению. Все показатели получены с помощью запросов к базе данных; вы можете развернуть любую панель, чтобы увидеть SQL-код.
Рост: с декабря 2020 по 27 января
Самый экстремальный день в этой истории невозможно понять без восьми недель, предшествовавших ему. Акции GME завершили 2020-12-01 на уровне $15.81. Это ритейлер торговых центров с большой долей коротких позиций, объем торгов которым составлял несколько миллионов акций в день — 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 января. Короткие продавцы присутствовали на рынке на протяжении всего периода: данные по расчетам по позициям далее в этой статье показывают, к чему привел этот рост.
Один день в одной строке — подсчет баров
Точный 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), вызванные резкими скачками цены. Ни в одной другой сессии в период с 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) — это механизм автоматической приостановки торгов по отдельным акциям, принятый после flash crash 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_timeПиковые значения приходятся на периоды 09:30 и 10:00; минимум в $112.25 в 11:00 является нижней точкой — этот цикл полностью нивелировал и частично восстановил десятки миллиардов рыночной стоимости до обеда. Обратите внимание на отсутствие объема внутри окон приостановки торгов: периоды с малым количеством акций соответствуют моментам, когда торги неоднократно останавливались. Данные $483 и $112.25 представляли собой «рыночную цену» в то утро с разницей в несколько минут — всем, кто использует модели непрерывного рынка, следует учитывать этот фактор.
Брокеры: Robinhood и режим закрытия позиций
Другой важный факт от 28 января не отражен в котировках. Перед открытием торгов Robinhood — брокер, через которого проходило большинство розничных покупок в рамках сквиза, — перевел GME и ряд других акций в режим только закрытия позиций: клиенты могли продавать имеющиеся акции, но не могли покупать новые. Накануне, 27 января, в полдень Interactive Brokers перевел опционы на GME в режим только ликвидации, а несколько других брокеров повысили маржинальные требования или ограничили открытие сделок. Robinhood объяснила свои ограничения требованием депозита со стороны клирингового центра, поступившим перед рассветом; сумма составляла примерно $3 миллиарда (после введения ограничений она была снижена), и в ту ночь компания привлекла у инвесторов более миллиарда долларов. В ходе слушаний в Конгрессе в феврале 2021 года и в отчете SEC в октябре 2021 года эта последовательность событий подробно разобрана.
Данные торгов фиксируют лишь совпадение по времени, а не вердикт: объявление ограничений перед открытием, гэп вниз на -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, накануне этой сессии, только по контрактам GME было передано $7.99 миллиарда опционной премии в рамках 351 тысяч отдельных сделок; 28-го числа объем составил еще $3.97 миллиарда. И есть одна деталь, которую обычно упускают: в моменты формирования максимумов на рынке преобладали путы. На 27-е число на долю колл-опционов приходилось лишь 24% от объема контрактов (1.05 миллионов пут против 0.33 миллионов колл), а 28-го числа этот показатель составил 29.5%. Пока часть участников рынка пыталась заработать на росте, другая часть оплачивала страховку от падения в моменты формирования пиков.
Последствия: падение обратно
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. Отчет по коротким позициям за две недели показывает, чего удалось достичь сквизу к тому моменту:
Точный 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Количество коротких позиций сократилось с 71.2 миллионов акций на расчете 2020-12-31 до 21.4 миллионов к 2021-01-29 — на дату расчета через одну сессию после даты публикации — а количество дней покрытия снизилось с 14 на пике в ноябре до 1. Согласно этому показателю, большинство шортистов, чьи позиции сформировали ситуацию, закрылись к концу месяца; подробный разбор этого процесса представлен в объяснении короткого сквиза, а различие между этим двухнедельным показателем и ежедневным объемом коротких продаж описано в статье short interest vs short volume.
Чему учит этот день
Несмотря на характерную для эпохи мем-акций форму, 28 января — это классический урок ликвидности. Цена акции определяется ее наиболее срочным маржинальным ордером. Когда необходимость закрытия позиций (выкуп шортов), ограничения доступа (ограничения брокеров на покупку) и механические паузы (остановки LULD) происходят одновременно, процесс определения цены идет скачками, а не плавными кривыми. Форма этого дня не требует наличия «злодея» для объяснения, и минутные графики не могут ни подтвердить, ни опровергнуть его существование. Приведенные выше данные — это то, что было зафиксировано по факту.
FAQ по GameStop на 28 января
Какова была максимальная цена GameStop за все время?
$483 (внутридневная цена), зафиксированная утром 28 января 2021 года. С учетом сплита четыре-к-одному в 2022 году, это соответствует $120.75 при текущем количестве акций.
Почему Robinhood ограничил покупку GameStop?
28 января 2021 года Robinhood перевел GME и другие активы в режим только для закрытия позиций. Компания объяснила это требованием клирингового центра внести депозит в размере около 3 миллиардов долларов тем утром. За ночь было привлечено более миллиарда долларов от инвесторов, и в следующую сессию покупка была частично возобновлена. Эти события зафиксированы в показаниях Конгресса и отчете SEC за 2021 год.
Стала ли Robinhood причиной обвала GameStop?
Данные торгов фиксируют последовательность событий, а не вердикт: ограничения были объявлены до открытия рынка, GME показала гэп вниз на -23.2%, достигла рекордного максимума в $483 и минимума в $112.25 в течение двух часов, и все ограниченные в покупке активы закрылись в тот же день с двузначным падением. Каким фактором все было обусловлено, остается предметом споров; в отчете SEC этот вопрос не был решен.
Сколько раз торговля GME приостанавливалась 28 января 2021 года?
Поминутная лента показывает 314 баров регулярной сессии вместо 390 — примерно семьдесят шесть минут было потеряно из-за повторяющихся приостановок по механизму Limit Up/Limit Down. Это сделало 28 января днем с наибольшим количеством приостановок за весь период сквиза: ни одна другая сессия в период с 25 января по 4 февраля не имела менее чем 348 баров регулярной сессии.
Что произошло с GME после 28 января 2021 года?
Один дополнительный всплеск — закрытие на уровне $328.24 29 января — и последующее падение: к 2021-02-04 акции закрылись по цене $53.38, а отчетный объем коротких позиций уже сократился до 21.4 миллионов акций на момент расчетов 29 января.
Каждый блок выше представляет собой сохраненный версионный запрос к историческим данным — вы можете расширить SQL-запрос, чтобы увидеть каждый показатель. Хотите прожить этот день, а не просто читать о нем? Это один из игровых сценариев в торговом симуляторе Strasmore Labs.