Фондовый рынок США двадцать четвертого февраля
Двадцать четвертого февраля две тысячи двадцать второго года рынок США показал резкий разворот после начала конфликта. Изучите динамику индексов, нефти, золота и облигаций в этот день.
Ранним утром двадцать четвёртого февраля две тысячи двадцать второго года Россия начала полномасштабное вторжение в Украину, и фондовый рынок США провёл одну из самых изучаемых торговых сессий десятилетия. Фьючерсы на индексы резко упали в ночные часы, ETF на индекс Nasdaq-100 QQQ открылся с понижением на -3.2%, а закрылся с результатом +3.4%. На этой странице представлены все данные по данному событию: поминутный разворот рынка, динамика S&P 500 и Dow, движение цен на нефть, золото, акции оборонных компаний, казначейские облигации и волатильность, а также обзор последующих недель. Каждое число получено из сохранённого запроса; разверните любую панель для просмотра SQL.
Перед открытием: как развивались события ночью
Вторжение не стало неожиданностью. В конце две тысячи двадцать первого и начале две тысячи двадцать второго года Россия сосредоточила войска у границ Украины; по оценкам западных стран, их численность значительно превышала сто тысяч человек, и рынки закладывали этот риск в котировки на протяжении нескольких недель. В понедельник, двадцать первого февраля, Москва признала две самопровозглашенные сепаратистские республики на востоке Украины. Американские рынки были закрыты в связи с празднованием Дня Вашингтона, поэтому первой сессией, отреагировавшей на эти новости, стал вторник, двадцать второе февраля, завершившийся снижением. В тот же вторник был введен первый пакет западных санкций, а Германия приостановила сертификацию газопровода «Северный поток — 2».
Затем, незадолго до шести утра по московскому времени в четверг, двадцать четвертого февраля — около десяти вечера в среду по нью-йоркскому времени — президент России объявил о начале операции, и в течение часа поступили сообщения о взрывах в украинских городах. Фьючерсы на американские индексы, торгующиеся в ночное время, немедленно начали падение. К рассвету единственным открытым вопросом оставалось то, насколько ниже уровня закрытия среды пройдут сделки на открывающем аукционе в девять тридцать утра.
День в одной строке
В одной строке представлены все данные: цена закрытия предыдущего дня, гэп, минимум, максимум, цена закрытия и объем торгов:
| Закрытие пред. | Открытие RTH | Гэп (%) | Low RTH | Low (ET) | High RTH | Закрытие RTH | Изменение за день (%) | Low к пред. (%) | От min до закрытия (%) | От закрытия до max (%) | Открытие над low (%) | Объем (млн) | Минутные бары RTH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 329.41 | 318.84 | -3.2 | 318.26 | 09:30 | 341.04 | 340.65 | 3.4 | -3.4 | 7 | 0.11 | 0.18 | 128 | 390 |
Точный 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 = 'QQQ'
AND window_start >= toDateTime('2022-02-23 00:00:00') AND window_start < toDateTime('2022-02-24 04:00:00')
) AS prior_rth_close
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(argMaxIf(close, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)) / minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS trough_to_close_pct,
round((maxIf(toFloat64(high), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / toFloat64(argMaxIf(close, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)) - 1) * 100, 2) AS close_to_high_pct,
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)) / minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 2) AS open_above_low_pct,
round(toFloat64(sum(volume)) / 1e6, 1) AS day_shares_m,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS rth_minute_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'QQQ'
AND window_start >= toDateTime('2022-02-24 04:00:00') AND window_start < toDateTime('2022-02-24 23:59:00')Результат, который стоит проанализировать: внутридневной минимум в $318.26 был зафиксирован в 09:30 по восточному времени, на первой минуте торгов, что на -3.4% ниже цены закрытия предыдущего дня. После этой первой сделки QQQ рос в течение шести с половиной часов и завершил сессию на отметке $340.65: +3.4% за день, показав размах колебаний от минимума до закрытия в 7% при объеме торгов в 128 миллиона акций. Закрытие не было вялым: цена остановилась всего на 0.11% ниже дневного максимума в $341.04, что означает, что день завершился практически на пике. Любой, кто продал на первой минуте торгов, сделал это в пределах 0.18% от абсолютного минимума сессии; фактическая минимальная цена была зафиксирована через несколько мгновений после открытия, а не во время самого аукциона (цена аукциона составила $318.84; минимум — $318.26).
Разворот, по интервалам
Тридцатиминутные интервалы показывают динамику подъема:
| Время (ET) | Закрытие интервала | Low интервала | Объем (млн) |
|---|---|---|---|
| 09:30 | 325.41 | 318.26 | 18.6 |
| 10:00 | 326.04 | 323.11 | 13.8 |
| 10:30 | 328.14 | 324.6 | 9.5 |
| 11:00 | 329.12 | 327.3 | 8 |
| 11:30 | 330.29 | 327.6 | 6.1 |
| 12:00 | 328.03 | 326.93 | 6 |
| 12:30 | 328.18 | 327.16 | 4.7 |
| 13:00 | 328.8 | 327.76 | 5.1 |
| 13:30 | 331.72 | 328.77 | 7.6 |
| 14:00 | 333.3 | 330.7 | 7.6 |
| 14:30 | 335.94 | 333.29 | 8.1 |
| 15:00 | 336.89 | 335.48 | 7.3 |
| 15:30 | 340.65 | 336.82 | 15 |
Точный 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 = 'QQQ'
AND window_start >= toDateTime('2022-02-24 04:00:00') AND window_start < toDateTime('2022-02-24 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Ступенчатый рост не был идеально ровным: интервал 12:00 ET закрылся на уровне $328.03, ниже закрытия 11:30 на отметке $330.29. Однако направление движения не менялось, и последний интервал закрылся на уровне $340.65, что стало максимумом дня. Объем торгов повторил стандартную U-образную форму: 18.6 миллиона акций в первые полчаса и 15 миллиона в последние, против 4.7 миллиона в обеденное время. Это зеркальное отражение нисходящей лестницы две тысячи одиннадцатого года. Подобные сессии доказывают, почему утверждения о том, что «рынок упал на новостях о вторжении», вводят в заблуждение: фьючерсы упали ночью, а спот-сессия начала расти с первой минуты. То, какую динамику увидел инвестор, зависело исключительно от времени исполнения ордеров — это тема, которую ночные гэпы позволяют оценить в более спокойные недели.
Не только Nasdaq: разворот по всему рынку
История с одним индексом оставила бы открытым очевидный вопрос: была ли это особенность акций роста или разворот всего рынка? В приведенной ниже таблице одиннадцать тикеров приведены к единому знаменателю: три основных индексных ETF, а также активы, к которым обращаются при геополитических шоках: энергетика, золото, долгосрочные казначейские облигации, ETF на волатильность и четыре оборонных подрядчика.
| ticker | Закрытие пред. | Гэп (%) | Low к пред. (%) | High к пред. (%) | Изменение за день (%) |
|---|---|---|---|---|---|
| QQQ | 329.41 | -3.2 | -3.4 | 3.5 | 3.4 |
| SPY | 421.97 | -2.6 | -2.7 | 1.6 | 1.5 |
| DIA | 331.44 | -2.6 | -2.6 | 0.4 | 0.3 |
| XLE | 67.64 | 2.1 | -3.4 | 2.2 | -0.9 |
| GLD | 178.28 | 2.4 | -1.7 | 2.4 | -0.6 |
| TLT | 136.62 | 1.8 | -0.3 | 2 | 0.2 |
| VIXY | 20.17 | 11.1 | -3.8 | 11.2 | -3 |
| LMT | 389.14 | 2.3 | -0.4 | 2.5 | 1.7 |
| NOC | 386.1 | 2.5 | 1 | 4.4 | 2.4 |
| RTX | 92.27 | 0.8 | -3.2 | 2.6 | 2.1 |
| GD | 216.25 | 0.2 | -2.2 | 1.2 | 1.1 |
Точный SQL-код для каждого числа
SELECT
ticker,
round(prior_close, 2) AS prior_close,
round((rth_open / prior_close - 1) * 100, 1) AS gap_pct,
round((rth_low / prior_close - 1) * 100, 1) AS low_vs_prior_pct,
round((rth_high / prior_close - 1) * 100, 1) AS high_vs_prior_pct,
round((rth_close / prior_close - 1) * 100, 1) AS day_change_pct
FROM (
SELECT
ticker,
argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2022-02-23')) AS prior_close,
argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2022-02-24')) AS rth_open,
minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2022-02-24')) AS rth_low,
maxIf(toFloat64(high), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2022-02-24')) AS rth_high,
argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959 AND toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2022-02-24')) AS rth_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('QQQ', 'SPY', 'DIA', 'XLE', 'GLD', 'TLT', 'VIXY', 'LMT', 'NOC', 'RTX', 'GD')
AND window_start >= toDateTime('2022-02-23 00:00:00') AND window_start < toDateTime('2022-02-24 23:59:00')
GROUP BY ticker
)
ORDER BY indexOf(['QQQ', 'SPY', 'DIA', 'XLE', 'GLD', 'TLT', 'VIXY', 'LMT', 'NOC', 'RTX', 'GD'], ticker)Разворот произошел по всему рынку, но его масштаб не был прямо пропорционален глубине утреннего гэпа: QQQ открылся с гэпом -3.2% и закрылся на уровне +3.4%. SPY и DIA открылись с почти таким же гэпом, -2.6% и -2.6% соответственно, однако SPY закрылся на +1.5%, в то время как DIA показал лишь +0.3%, едва выйдя в зеленую зону. Индекс с высокой долей акций роста развернулся сильнее всего; промышленный Dow — слабее всего. Разницу между SPY и DIA определяет состав, а не размер гэпа.
Куда ушли деньги: нефть, золото, оборонный сектор, волатильность
Теперь рассмотрим нижние строки той же панели — так называемую «военную сделку». Энергетический сектор открылся на максимумах, но закрылся в красной зоне: XLE открылся с гэпом +2.1%, в течение дня опускался до -3.4% ниже уровня закрытия предыдущего дня и завершил торги на отметке -0.9%. Золото совершило аналогичный разворот: GLD открылся на +2.4% и закрылся на -0.6%. VIXY, ETF, удерживающий краткосрочные фьючерсы на VIX — наиболее близкий торгуемый инструмент к индексу волатильности, — открылся с гэпом +11.1% и закрылся на -3%, ниже уровня закрытия предыдущего дня. Классические защитные активы достигли пика ровно в момент появления самых негативных заголовков и начали снижаться вместе с восстановлением рынка акций: это был зеркальный разворот по отношению к динамике акций.
Исключением стал оборонный сектор. Все четыре компании закрылись в зеленой зоне: LMT +1.7%, NOC +2.4%, RTX +2.1%, GD +1.1%. При этом Northrop Grumman на протяжении всей сессии ни разу не опускалась ниже уровня закрытия среды (ее внутридневной минимум составил +1%) — это единственная из четырех бумаг, которая не уходила в красную зону.
Казначейские облигации: спрос на защитные активы возник с задержкой
Снижение доходности казначейских облигаций означает рост цен на них, что является классическим признаком притока капитала в защитные активы. В день начала вторжения этот приток практически не отразился на ценах закрытия:
| Сессия | Доходность 2-лет. | Доходность 10-лет. |
|---|---|---|
| 2022-02-18 | 1.47 | 1.92 |
| 2022-02-22 | 1.56 | 1.94 |
| 2022-02-23 | 1.58 | 1.99 |
| 2022-02-24 | 1.54 | 1.96 |
| 2022-02-25 | 1.55 | 1.97 |
| 2022-02-28 | 1.44 | 1.83 |
| 2022-03-01 | 1.31 | 1.72 |
| 2022-03-02 | 1.5 | 1.86 |
| 2022-03-03 | 1.53 | 1.86 |
| 2022-03-04 | 1.5 | 1.74 |
| 2022-03-07 | 1.55 | 1.78 |
| 2022-03-08 | 1.63 | 1.86 |
Точный SQL-код для каждого числа
SELECT
toString(date) AS session,
round(yield_2_year, 2) AS yield_2_year,
round(yield_10_year, 2) AS yield_10_year
FROM global_markets.treasury_yields
WHERE date BETWEEN '2022-02-18' AND '2022-03-08'
ORDER BY dateДоходность десятилетних облигаций закрылась на уровне 1.96% 24 февраля, что лишь немногим ниже показателя предыдущего дня — 1.99%. Реальное бегство в качество произошло на следующей неделе: к 2022-03-01 доходность десятилетних бумаг составила 1.72%, что стало минимальным значением закрытия за рассматриваемый период, а доходность двухлетних облигаций за тот же отрезок времени упала с 1.58% до 1.31%. ETF на долгосрочные казначейские облигации TLT, представленный на графике выше, продемонстрировал внутридневную динамику в том же ключе: гэп вверх на 1.8% при открытии торгов к закрытию сократился до 0.2%.
Дни вокруг события
Три недели ежедневных закрытий позволяют оценить разворот в контексте и спокойно определить, удержался ли он:
| Сессия | Закрытие ($) | Изменение (%) | Объем (млн) |
|---|---|---|---|
| 2022-02-22 | 338.09 | -1 | 85.1 |
| 2022-02-23 | 329.41 | -2.6 | 85.1 |
| 2022-02-24 | 340.65 | 3.4 | 128.5 |
| 2022-02-25 | 345.87 | 1.5 | 77.6 |
| 2022-02-28 | 347.15 | 0.4 | 76.4 |
| 2022-03-01 | 341.56 | -1.6 | 66.8 |
| 2022-03-02 | 347.18 | 1.6 | 69.8 |
| 2022-03-03 | 342.26 | -1.4 | 70.6 |
| 2022-03-04 | 337.35 | -1.4 | 75.8 |
| 2022-03-07 | 324.83 | -3.7 | 89.2 |
| 2022-03-08 | 323.28 | -0.5 | 115.3 |
| 2022-03-09 | 335.05 | 3.6 | 63.8 |
| 2022-03-10 | 331.42 | -1.1 | 68.7 |
| 2022-03-11 | 324.34 | -2.1 | 65.6 |
| 2022-03-14 | 318.21 | -1.9 | 78.9 |
Точный 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 = 'QQQ'
AND window_start >= toDateTime('2022-02-18 00:00:00') AND window_start < toDateTime('2022-03-15 23:59:00')
GROUP BY et_date
)
)
WHERE et_date >= toDate('2022-02-22') AND et_date <= toDate('2022-03-14')
ORDER BY et_dateСессии перед началом вторжения были «красными» (-1% и -2.6% от двадцать второго–двадцать третьего февраля), поскольку заголовки новостей были заполнены сообщениями о наращивании сил, однако в день самого вторжения рынок закрылся на +3.4%, за чем последовал рост ещё на +1.5% на следующий день. Падение рынков на фоне угрозы и ралли по факту события — это паттерн, настолько старый, что для него существует поговорка на Уолл-стрит, и данная лента сделок является его самым наглядным современным подтверждением. Но посмотрите на таблицу дальше: она заканчивается на отметке $318.21 от 2022-03-14, что ниже уровня, на котором проходили сделки в панике утром в день вторжения.
Удержалось ли ралли?
Нет, и теперь этому есть документальное подтверждение:
| Закрытие (вторжение) | Low (вторжение) | Первое закрытие ниже low вторжения | Дней до нового low | Закрытие (мартовский low) | Дата (мартовский low) | Мартовский low к закрытию вторжения (%) | Закрытие (годовой low) | Дата (годовой low) | Годовой low к закрытию вторжения (%) |
|---|---|---|---|---|---|---|---|---|---|
| 340.65 | 318.26 | 2022-03-14 | 18 | 318.21 | 2022-03-14 | -6.6 | 260.02 | 2022-12-28 | -23.7 |
Точный SQL-код для каждого числа
WITH
daily AS (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
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 c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'QQQ'
AND window_start >= toDateTime('2022-02-24 04:00:00') AND window_start < toDateTime('2023-01-01 00:00:00')
GROUP BY d
),
(SELECT c FROM daily WHERE d = toDate('2022-02-24')) AS invasion_close,
(
SELECT round(minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'QQQ'
AND window_start >= toDateTime('2022-02-24 04:00:00') AND window_start < toDateTime('2022-02-24 23:59:00')
) AS invasion_low
SELECT
invasion_close,
invasion_low,
toString(minIf(d, c < invasion_low AND d > toDate('2022-02-24'))) AS first_close_below_invasion_low,
dateDiff('day', toDate('2022-02-24'), minIf(d, c < invasion_low AND d > toDate('2022-02-24'))) AS calendar_days_to_new_low,
round(minIf(c, d BETWEEN toDate('2022-02-25') AND toDate('2022-03-31')), 2) AS march_low_close,
toString(argMinIf(d, (c, d), d BETWEEN toDate('2022-02-25') AND toDate('2022-03-31'))) AS march_low_date,
round((minIf(c, d BETWEEN toDate('2022-02-25') AND toDate('2022-03-31')) / invasion_close - 1) * 100, 1) AS march_low_vs_invasion_close_pct,
round(minIf(c, d > toDate('2022-02-24')), 2) AS year_low_close,
toString(argMinIf(d, (c, d), d > toDate('2022-02-24'))) AS year_low_date,
round((minIf(c, d > toDate('2022-02-24')) / invasion_close - 1) * 100, 1) AS year_low_vs_invasion_close_pct
FROM dailyСпустя 18 календарных дня после начала вторжения, 2022-03-14, фонд QQQ закрылся ниже минимума паники в $318.26, зафиксированного в первую минуту торгов в день начала конфликта. Тот мартовский минимум закрытия на уровне $318.21 оказался на -6.6% ниже цены закрытия дня вторжения, и год продолжил развиваться по нисходящей: к 2022-12-28 фонд QQQ закрылся на отметке $260.02, что на -23.7% ниже уровня закрытия дня вторжения. Разворот двадцать четвертого февраля был реальным, резким и локальным. Направление рынку в две тысячи двадцать втором году задал цикл повышения процентных ставок, а не война; это тот же урок, который мартовский обвал две тысячи двадцатого года преподал в обратном направлении.
Насколько редки развороты такого масштаба?
Анализ всех торговых сессий QQQ с две тысячи третьего года по конец две тысячи двадцать пятого года выявляет ровно 2 сессий, в ходе которых котировки внутри дня опускались как минимум на три процента ниже цены закрытия предыдущего дня, но при этом завершили торги ростом не менее чем на один процент:
| Сессия | Low к пред. (%) | Закрытие к пред. (%) | От min до закрытия (%) |
|---|---|---|---|
| 2022-02-24 | -3.4 | 3.4 | 7 |
| 2022-10-13 | -3.2 | 2.3 | 5.7 |
Точный SQL-код для каждого числа
SELECT
toString(d) AS session,
low_vs_prior_pct,
close_vs_prior_pct,
trough_to_close_pct
FROM (
SELECT
d,
round((lo / prev_c - 1) * 100, 1) AS low_vs_prior_pct,
round((c / prev_c - 1) * 100, 1) AS close_vs_prior_pct,
round((c / lo - 1) * 100, 1) AS trough_to_close_pct
FROM (
SELECT d, c, lo,
lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
FROM (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS c,
minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS lo
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'QQQ'
AND window_start >= toDateTime('2003-01-01 00:00:00') AND window_start < toDateTime('2026-01-01 00:00:00')
GROUP BY d
)
)
WHERE prev_c > 0 AND isFinite(prev_c)
)
WHERE low_vs_prior_pct <= -3 AND close_vs_prior_pct >= 1
ORDER BY sessionДвадцать четвёртое февраля две тысячи двадцать второго года — один из таких случаев. Другой — 2022-10-13, сессия, открывшаяся через час после публикации данных по инфляции, которые оказались выше ожиданий; это был ещё один день с гэпом вниз и закрытием в «зеленой» зоне. Разворот в день начала вторжения был более масштабным: амплитуда от минимума до закрытия составила 7% против 5.7%. За двадцать три года наблюдений оба случая пришлись на один и тот же год.
Чему учит этот день
На текущем рынке действуют три устойчивых механизма. Во-первых, к моменту наступления широко ожидаемого события позиционирование зачастую уже завершено; две «красные» сессии перед вторжением отражали эти ожидания. Во-вторых, на открытии торгов накопленный за ночь страх реализуется по единой цене, и эта цена может стать экстремумом дня в любом направлении. В-третьих, резкий однодневный разворот говорит о потоках капитала в конкретный день, а не о направлении движения в следующем квартале; в любом случае, в последующие недели после этой сессии рынок обновил минимумы. Дни событий вознаграждают тех, кто понимает рыночные механизмы, и наказывают тех, кто путает структуру отдельной сессии с рыночным режимом.
Детали по объему торгов подтверждают, кто и что делал: 128.5 миллионов акций сделали эту сессию самой активной за три недели, представленные в таблице выше. Высокий объем при росте от минимума до закрытия означает, что реальные крупные покупки встретились с реальными крупными продажами, а не с дрейфом на пустом рынке. Сравните это с аналогичной динамикой ралли 24 марта 2020 года, где объем, подтвержденный уверенностью участников, также ознаменовал разворот паники, и противопоставьте это дням со слабым отскоком, которые угасают на следующей сессии.
Часто задаваемые вопросы о дне начала вторжения
Как вел себя фондовый рынок в день вторжения России в Украину?
В сам день начала событий, двадцать четвертого февраля две тысячи двадцать второго года, ETF на индекс Nasdaq-100 QQQ открылся с понижением на -3.2%, достигнув минимума в первую минуту торгов, после чего рос в течение всей сессии и закрылся с результатом +3.4%. ETF на индекс S&P 500 SPY закрылся на уровне +1.5%, а ETF на индекс Dow DIA — на +0.3%.
Почему акции выросли в день вторжения России в Украину?
Данная страница не занимается поиском мотивов; лента сделок фиксирует последовательность событий: сильное давление продавцов полностью проявилось на открытии в девять тридцать, после чего в каждый последующий час доминировали покупатели. Паттерн «падение на угрозе, рост по факту события» имеет множество исторических параллелей.
Как вели себя нефть и золото в день вторжения России в Украину?
Оба актива резко выросли на открытии, а затем растеряли достижения: энергетический ETF XLE открылся с гэпом +2.1% и закрылся на -0.9%, а золотой ETF GLD открылся с гэпом +2.4% и закрылся на -0.6%. Акции оборонного сектора удержали рост: все четыре крупнейшие компании, представленные в панели выше, закрылись в плюсе.
Оказалось ли ралли после вторжения устойчивым?
Нет. QQQ закрылся ниже своего минимума паники в день вторжения через 18 календарных дней, а именно 2022-03-14, а к моменту достижения минимума две тысячи двадцать второго года 2022-12-28 он находился на -23.7% ниже уровня закрытия дня вторжения.
Насколько редки развороты, подобные двадцать четвертому февраля две тысячи двадцать второго года?
Очень редки. В период с две тысячи третьего года по конец две тысячи двадцать пятого года только в 2 сессиях QQQ торговался на три процента или более ниже предыдущего закрытия внутри дня и при этом закрывался как минимум на один процент выше — это данный случай и 2022-10-13.
Каждая панель выше представляет собой сохраненный версионированный запрос к исторической ленте сделок; разверните SQL, чтобы увидеть каждое измерение. Хотите прочувствовать этот день, а не просто прочитать о нем? Это один из игровых сценариев в симуляторе трейдинга Strasmore Labs.