Strasmore Research
Analizy Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-07-24

Giełda 24 lutego 2022 inwazja Rosji na Ukrainę

Analiza sesji 24 lutego 2022 roku. Spadek indeksów S&P 500 i Nasdaq po inwazji Rosji oraz ich późniejsza odbudowa. Wpływ na złoto, ropę i obligacje skarbowe.

Wczesnym rankiem 24 lutego 2022 roku Rosja rozpoczęła pełnoskalową inwazję na Ukrainę, co wywołało jedną z najszerzej analizowanych sesji na amerykańskim rynku akcji w tej dekadzie. Kontrakty terminowe na indeksy odnotowały gwałtowny spadek w nocy, ETF Nasdaq-100 (QQQ) otworzył się na poziomie -3.2% poniżej wartości zamknięcia, a następnie zamknął się na poziomie +3.4%. Niniejsza strona dokumentuje całe wydarzenie: przebieg odwrócenia trendu minuta po minucie, zachowanie indeksów S&P 500 oraz Dow, zmiany cen ropy, złota, akcji spółek z sektora obronnego, obligacji skarbowych oraz wskaźnika zmienności, a także sytuację w kolejnych tygodniach. Każda liczba pochodzi z zapytania bazodanowego; po rozwinięciu dowolnego panelu można zobaczyć kod SQL.

Przed otwarciem: przebieg nocy

Inwazja nie była zdarzeniem nagłym. Pod koniec 2021 roku i na początku 2022 roku Rosja gromadziła wojska przy granicy z Ukrainą — ówczesne szacunki Zachodu wskazywały na liczby znacznie przekraczające 100,000 — a rynki od wielu tygodni uwzględniały to ryzyko w wycenach. W poniedziałek, 21 lutego, Moskwa uznała dwie samowolnie ogłoszone republiki separatystyczne we wschodniej Ukrainie; rynki w USA były zamknięte z powodu święta urodzin George'a Washingtona, więc pierwszą sesją zdolną do wyceny tych informacji był wtorek, 22 lutego, który przyniósł spadki. Pierwsza transza zachodnich sankcji została nałożona właśnie tego wtorku, równolegle z decyzją Niemiec o wstrzymaniu certyfikacji gazociągu Nord Stream 2.

Następnie, krótko przed godziną 6:00 czasu moskiewskiego w czwartek, 24 lutego — czyli około godziny 22:00 w środę czasu nowojorskiego — prezydent Rosji ogłosił operację, a w ciągu godziny odnotowano wybuchy w ukraińskich miastach. Kontrakty terminowe na amerykańskie indeksy, które są przedmiotem obrotu w nocy, natychmiast odnotowały wyprzedaż. O świcie jedynym otwartym pytaniem pozostawało, jak nisko poniżej środowego zamknięcia spadnie aukcja otwarcia o godzinie 9:30.

Dzień w jednym wierszu

Jeden wiersz zawiera pełną odpowiedź — kurs zamknięcia, lukę, minimum, maksimum, zamknięcie oraz wolumen:

ZapytanieQQQ 24 lutego 2022 — odwrócenie w dniu inwazji
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 = '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')

Kluczowe dane: minimum sesji wyniosło $318.26 i zostało odnotowane o 09:30 ET — w pierwszej minucie otwarcia-3.4% poniżej kursu zamknięcia z poprzedniego dnia. Od tego pierwszego odczytu instrument QQQ wzrastał przez sześć i pół godziny, kończąc na poziomie $340.65: +3.4% w skali dnia, co stanowiło wahnięcie typu trough-to-close na poziomie 7% przy wolumenie 128 milionów akcji. Zamknięcie nie było osłabione pod koniec sesji: kurs zamknął się zaledwie 0.11% poniżej sesyjnego maksimum wynoszącego $341.04, co oznacza, że dzień zakończył się niemal na swoim szczycie. Każdy, kto dokonał sprzedaży w pierwszej minucie handlu, sprzedał w odległości 0.18% od ostatecznego minimum sesji — faktyczne minimum zostało odnotowane chwilę po otwarciu aukcji, a nie w jej trakcie (cena aukcyjna wyniosła $318.84; minimum wyniosło $318.26).

Odwrócenie, analiza przedziałów czasowych

Półgodzinne przedziały obrazują przebieg wzrostów:

ZapytanieQQQ co pół godziny — sesja regulaminowa 24 lutego 2022
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 = '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

Wzrost nie przebiegał w sposób liniowy — przedział ET 12:00 zamknął się na poziomie $328.03, poniżej zamknięcia 11:30 wynoszącego $330.29 — jednak kierunek nie uległ istotnej zmianie, a ostatni przedział zamknął się na poziomie $340.65, na szczycie tabeli. Wolumen przyjął typowy kształt litery U: 18.6 milionów akcji w pierwszej półgodzinie oraz 15 milionów w ostatniej, przy 4.7 milionach w okresie lunchowym. Jest to lustrzane odbicie spadków z 2011 roku. Sesje tego typu sprawiają, że relacje typu „rynek spadł z powodu inwazji” są mylące: futures spadły w nocy; sesja gotówkowa zaczęła rosnąć od pierwszej minuty. Wynik zależał wyłącznie od czasu realizacji zleceń — zjawisko to opisuje temat luk nocnych w spokojniejsze tygodnie.

Nie tylko Nasdaq: nastąpiło odwrócenie trendu na całym rynku

Analiza pojedynczego indeksu pozostawiłaby otwarte pytanie: czy była to specyfika spółek wzrostowych, czy odwrócenie trendu w całym sektorze? Poniższe zestawienie obejmuje jedenaście instrumentów na jednej skali — trzy główne indeksowe ETF, a następnie aktywa typowe dla sytuacji szoków geopolitycznych: surowce energetyczne, złoto, długoterminowe obligacje skarbowe, ETF na zmienność oraz czterech wykonawców z sektora obronnego.

Zapytanie11 tickerów 24 lutego 2022 — luki, ekstremalne wartości intraday, zamknięcie (% vs zamknięcie poprzednie)
Dokładny kod SQL dla każdej liczby
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)

Odwrócenie trendu objęło cały rynek, jednak jego skala nie była bezpośrednio skorelowana z wielkością porannego luki: QQQ otworzył się luką o -3.2%, a zamknął wzrostem o +3.4%. SPY oraz DIA odnotowały luki o niemal identycznej wartości — odpowiednio -2.6% i -2.6% — jednak SPY zamknął się na poziomie +1.5%, podczas gdy DIA na poziomie +0.3%, co stanowi ledwo dodatni wynik. Najsilniejszą korektę odnotował indeks o wysokiej ekspozycji na spółki wzrostowe; najsłabszą indeks przemysłowy Dow — o różnicy między SPY a DIA decyduje skład portfeli, a nie wielkość luki.

Gdzie ulokowano kapitał: ropa, złoto, sektor obronny, zmienność

Należy przeanalizować dolne wiersze tej samej tabeli — tzw. „handel wojenny”. Sektor energetyczny otworzył się na szczytach, lecz zakończył sesję spadkiem: XLE zaliczył lukę wzrostową o +2.1%, w trakcie sesji osiągając spadki sięgające -3.4% względem poprzedniego zamknięcia, a ostatecznie zamknął się na poziomie -0.9%. Złoto odnotowało analogyczną zmianę kierunku: GLD otworzył się na +2.4%, a zamknął na -0.6%. VIXY — ETF posiadający krótkoterminowe kontrakty terminowe na VIX, będący najbliższym zbywalnym instrumentem odzwierciedlającym indeks zmienności — zaliczył lukę wzrostową +11.1% na otwarciu i zamknął się na -3%, czyli poniżej poprzedniego zamknięcia. Klasyczne aktywa typu „safe haven” osiągnęły szczyty dokładnie w momencie najgorszych nagłówków, a następnie traciły na wartości wraz z odbiciem na rynku akcji: nastąpiło odwrócenie trendu rynkowego.

Wyjątkiem byli producenci zbrojeniowi, którzy utrzymali wzrosty. Wszystkie cztery spółki zamknęły się na plusie — LMT +1.7%, NOC +2.4%, RTX +2.1%, GD +1.1% — natomiast Northrop Grumman przez całą sesję nie spadło poniżej poziomu zamknięcia z środy (jego dołowe wartości w trakcie sesji wyniosły +1%), będąc jedyną ze spółek, która nie odnotowała spadku.

Obligacje skarbowe: popyt na bezpieczne aktywa wystąpił z opóźnieniem

Spadek rentowności obligacji skarbowych oznacza wzrost cen tych papierów — jest to klasyczny mechanizm napływu kapitału do bezpiecznych aktywów. W dniu rozpoczęcia inwazji ten przepływ był niemal niewidoczny na zamknięciu sesji:

ZapytanieRentowności obligacji skarbowych 2-letnich i 10-letnich, 18 lutego – 8 marca 2022 (%)
Dokładny kod SQL dla każdej liczby
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

Rentowność 10-letnich obligacji zamknęła się na poziomie 1.96% w dniu 24 lutego, czyli nieco poniżej poziomu 1.99% z dnia poprzedniego. Masowa ucieczka kapitału nastąpiła w kolejnym tygodniu: do 2022-03-01 rentowność 10-letnich obligacji wyniosła 1.72% — co stanowi najniższe zamknięcie w tym okresie — natomiast rentowność 2-letnich obligacji spadła z 1.58% do 1.31% w tym samym przedziale czasowym. ETF TLT, reprezentujący długoterminowe obligacje skarbowe w powyższej tabeli, odzwierciedlił ten sam trend w skali sesji: wzrost o +1.8% na otwarciu, który spadł do poziomu +0.2% na zamknięciu.

Okres wokół tego wydarzenia

Trzy tygodnie dziennych kursów zamknięcia pozwalają osadzić odwrócenie trendu w szerszym kontekście i ocenić, czy utrzymało się ono na stałe:

ZapytanieCodzienne zamknięcia QQQ, 22 lutego – 14 marca 2022
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 = '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

Sesje przed inwazją kończyły się spadkami (-1% i -2.6% w dniach 22–23 lutego), ponieważ dominowały wówczas doniesienia o przygotowaniach. Dzień samej inwazji zamknął się na poziomie +3.4%, a kolejnego dnia odnotowano wzrost o kolejne +1.5%. Spadki rynków pod wpływem zagrożenia i wzrosty pod wpływem wydarzenia to schemat na tyle stary, że doczekał się własnego przysłowia na Wall Street, a obecne dane są jego najczystszym współczesnym dowodem. Należy jednak przeanalizować tabelę dalej: kończy się ona na poziomie $318.21 dnia 2022-03-14 — poniżej poziomu, który wyznaczyła panika w poranek w dniu inwazji.

Czy rajd się utrzymał?

Nie — a teraz te twierdzenia mają potwierdzenie w danych:

ZapytaniePo odwróceniu: moment przełamania dołku z dnia inwazji przez QQQ oraz skala spadku
Dokładny kod SQL dla każdej liczby
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 dni kalendarzowych po inwazji, dnia 2022-03-14, QQQ zamknął się poniżej panicznego dołka z pierwszej minuty sesji w dniu inwazji, wynoszącego $318.26. To marcowe zamknięcie na poziomie $318.21 było o -6.6% niższe od zamknięcia w dniu inwazji — a trend się utrzymał: do 2022-12-28 QQQ zamknął się na poziomie $260.02, czyli o -23.7% poniżej poziomu z dnia inwazji. Odwrócenie trendu z 24 lutego było realne, gwałtowne — i lokalne. To cykl podwyżek stóp procentowych, a nie wojna, wyznaczył kierunek na 2022 rok, co stanowi tę samą lekcję, którą krach z marca 2020 przekazał w przeciwnym kierunku.

Jak rzadkie są odwrócenia o takiej skali?

Analiza każdej sesji QQQ od 2003 roku do końca 2025 roku wykazuje dokładnie 2 sesji, podczas których kurs w trakcie dnia spadł o co najmniej 3% poniżej poprzedniego zamknięcia, a mimo to zakończył dzień wynikiem co najmniej 1% powyżej niego:

ZapytanieSesje QQQ od 2003: dołek intraday ≤ −3% vs zamknięcie poprzednie ORAZ zamknięcie ≥ +1%
Dokładny kod SQL dla każdej liczby
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

24 lutego 2022 roku jest jednym z takich przykładów. Drugim jest 2022-10-13 — sesja, która rozpoczęła się godzinę po publikacji raportu o inflacji wyższej od oczekiwanej; kolejny dzień typu gap-down-close-green. Odwrócenie w dniu inwazji było większe: wahanie od dołka do zamknięcia wyniosło 7% względem 5.7%. W ciągu dwudziestu trzech lat danych oba przypadki wystąpiły w tym samym roku.

Wnioski z tego dnia

W tym przebiegu rynkowym występują trzy trwałe mechanizmy. Po pierwsze: do czasu wystąpienia szeroko oczekiwanego wydarzenia pozycjonowanie często jest już dokonane — dwa czerwone sesje przed inwazją odzwierciedlały to oczekiwanie. Po drugie: aukcja otwarcia to moment, w którym skumulowany nocny lęk zostaje rozliczony po jednej cenie, a cena ta może stanowić ekstremum dnia w dowolnym kierunku. Po trzecie: gwałtowny jednodniowy odwrócenie trendu informuje o przepływach z tego konkretnego dnia, a nie o kierunku na kolejny kwartał — kolejne tygodnie po tej sesji i tak przyniosły nowe minima. Dni wydarzeń nagradzają znajomość mechanizmów rynkowych; karzą za mylenie kształtu pojedynczej sesji z długoterminowym reżimem rynkowym.

Szczegóły wolumenu potwierdzają aktywność uczestników: 128.5 milionów akcji sprawiło, że była to najobszerniejsza sesja w powyższej trzytygodniowej tabeli, a wysoki wolumen podczas wzrostu od dołka do zamknięcia oznacza, że realny popyt spotkał się z realną podażą — nie był to pusty ruch rynkowy. Należy porównać ten sam schemat z rajdem z 24 marca 2020 r., gdzie wolumen potwierdzający przekonanie inwestorów również wyznaczył punkt zwrotny paniki, i zestawić go z dniami słabych odbić, które wygasają kolejnej sesji.

FAQ z dnia inwazji

Jak zareagował rynek akcji w dniu inwazji Rosji na Ukrainę?

W samym dniu zdarzenia — 24 lutego 2022 — ETF Nasdaq-100 QQQ otworzył się spadkiem o -3.2% w pierwszej minucie sesji, a następnie wzrastał przez całą sesję, kończąc na poziomie +3.4%. ETF S&P 500 SPY zamknął się na poziomie +1.5%, a ETF Dow DIA na poziomie +0.3%.

Dlaczego akcje wzrosły w momencie inwazji Rosji na Ukrainę?

Niniejsza strona nie przypisuje motywów; rejestruje ona jedynie sekwencję zdarzeń — silna presja sprzedaży wystąpiła podczas otwarcia o 9:30, natomiast w każdej kolejnej godzinie dominowały zakupy. Wzorzec spadków pod wpływem zagrożenia i wzrostów po wystąpieniu zdarzenia ma wiele historycznych odpowiedników.

Jak zareagowały ropa i złoto w momencie inwazji Rosji na Ukrainę?

Oba aktywa gwałtownie wzrosły na otwarciu, a następnie straciły na wartości: ETF energetyczny XLE otworzył się luką wzrostową o 2.1% i zamknął się na poziomie -0.9%, natomiast ETF złota GLD otworzył się luką wzrostową o 2.4% i zamknął się na poziomie -0.6%. Akcje spółek z sektora obronnego utrzymały zyski: wszystkie cztery główne podmioty w powyższym zestawieniu zamknęły się na czerwono.

Czy rajd wzrostowy po inwazji się utrzymał?

Nie. QQQ zamknął się poniżej dołka wywołanego paniką w dniu inwazji 18 dni kalendarzowych później, czyli 2022-03-14, a w swoim dołku z 2022 roku, który przypadł na 2022-12-28, znajdował się -23.7% poniżej zamknięcia z dnia inwazji.

Jak rzadkie są odwrócenia trendu typu 24 lutego 2022?

Bardzo rzadkie. W okresie od 2003 do końca 2025 roku tylko 2 sesji QQQ odnotowało handel na poziomie 3% lub więcej poniżej poprzedniego zamknięcia w trakcie sesji, kończąc jednocześnie z wynikiem co najmniej 1% wzrostu — ta sesja oraz 2022-10-13.


Każdy powyższy panel to zapisane, wersjonowane zapytanie do historycznych danych — rozwiń kod SQL, aby zobaczyć każde pomiary. Chcesz przeżyć ten dzień zamiast tylko o nim czytać? Jest to jeden z możliwych do przetestowania scenariuszy w symulatorze handlowym Strasmore Labs(https://labs.strasmore.com/g1).

#market history#geopolitics#reversals#qqq