بازگشت بازار سهام پس از حمله روسیه
تحلیل نوسانات بازار در 24 فوریه 2022؛ بررسی بازگشت شاخصهای S&P 500 و Nasdaq پس از کاهش شدید اولیه و تاثیر جنگ بر قیمت نفت، طلا و اوراق قرضه Treasury.
در ساعات اولیه 24 فوریه 2022، روسیه حمله تمامعیار خود به اوکراین را آغاز کرد و بازار سهام ایالات متحده یکی از پرتحلیلترین جلسات معاملاتی دهه را تجربه کرد. معاملات آتی شاخصها در طول شب با کاهش شدید مواجه شدند؛ ETF Nasdaq-100 با نماد QQQ با کاهش -3.2% باز شد و در نهایت با رشد 3.4% بسته شد. این صفحه تمام جزئیات این رویداد را ثبت کرده است: بازگشت قیمتها دقیقه به دقیقه، عملکرد S&P 500 و Dow، وضعیت نفت، طلا، سهام صنایع دفاعی، اوراق قرضه Treasury و شاخص نوسان، و همچنین روند هفتههای پس از آن. تمامی اعداد از طریق پرسوجوهای ذخیرهشده استخراج شدهاند؛ برای مشاهده کد SQL، هر پنل را باز کنید.
پیش از بازگشایی: وقایع شب چگونه گذشت
حمله ناگهانی نبود. در اواخر سال 2021 و اوایل سال 2022، روسیه نیروهای خود را در نزدیکی مرز اوکراین متمرکز کرد؛ در آن زمان، برآوردهای غربی بسیار فراتر از 100,000 نفر بود و بازارها هفتهها بود که این ریسک را در قیمتها لحاظ میکردند. در روز دوشنبه، 21 فوریه، مسکو دو جمهوری جداییطلب در شرق اوکراین را به رسمیت شناخت؛ در آن زمان بازارهای ایالات متحده به دلیل تعطیلات روز تولد واشینگتن بسته بودند و اولین جلسه معاملاتی که قادر به قیمتگذاری این خبر بود، سهشنبه 22 فوریه بود که با افت قیمت همراه شد. اولین مرحله از تحریمهای غرب در همان سهشنبه و همزمان با توقف تایید خط لوله Nord Stream 2 توسط آلمان، اعمال شد.
سپس، در ساعات کوتاه پیش از ساعت 6 صبح به وقت مسکو در روز پنجشنبه، 24 فوریه — حدود ساعت 10 شب چهارشنبه در نیویورک — رئیسجمهور روسیه عملیات را اعلام کرد و گزارشهایی از وقوع انفجار در شهرهای اوکراین در مدت یک ساعت منتشر شد. شاخصهای آتی ایالات متحده که در طول شب معامله میشوند، بلافاصله با فروش گسترده مواجه شدند. با طلوع خورشید، تنها پرسش باقیمانده این بود که مزایده بازگشایی ساعت 9:30 صبح، چقدر پایینتر از قیمت بستهشدن روز چهارشنبه خواهد بود.
خلاصه روزانه در یک سطر
یک سطر تمام پاسخها را در بر میگیرد: قیمت بستهشدن قبلی، شکاف قیمتی، کمترین، بیشترین، قیمت بستهشدن و حجم معاملات:
کد دقیق 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 ET — دقیقاً در دقیقه اول بازگشایی — ثبت شد که -3.4% پایینتر از قیمت بستهشدن قبلی بود. پس از آن اولین ثبت قیمت، QQQ به مدت شش و نیم ساعت صعود کرد و در قیمت $340.65 بسته شد: 3.4%+ در روز، با نوسان از کمترین تا بیشترین قیمت معادل 7% در حجم معاملات 128 میلیون سهم. قیمت بستهشدن با ضعف در دقایق پایانی همراه نبود: قیمت بستهشدن تنها 0.11% پایینتر از بیشترین قیمت جلسه یعنی $341.04 بود، به این معنی که روز تقریباً در بالاترین سطح خود پایان یافت. هر کسی که در اولین دقیقه معاملات اقدام به فروش کرد، در محدوده 0.18% از کمترین قیمت نهایی جلسه معامله کرده است — کف واقعی لحظاتی پس از بازگشایی ثبت شد، نه در لحظه بازگشایی (قیمت حراج $318.84 بود؛ اما کمترین قیمت $318.26 ثبت شد).
بازگشت، بازه به بازه
بازه های نیمساعته روند صعودی را نشان میدهند:
کد دقیق 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 ETF در سطح $328.03 بسته شد، یعنی کمتر از قیمت بستهشدن 11:30 که $330.29 بود — اما جهت حرکت هرگز تغییر جدی نکرد و بازه نهایی در سطح $340.65، یعنی بالاترین نقطه جدول، بسته شد. حجم معاملات الگوی معمول U را دنبال کرد: 18.6 میلیون سهم در نیمساعت اول و 15 میلیون سهم در نیمساعت آخر، در مقابل 4.7 میلیون سهم در زمان ناهار. این وضعیت، تصویر معکوس نزش پلهای سال 2011 است. جلسات معاملاتی از این نوع دلیل آن هستند که روایتهای «بازار در اثر تهاجم سقوط کرد» گمراهکننده هستند: بخش آتی (futures) در طول شب سقوط کرد؛ اما جلسه نقدی (cash session) از اولین دقیقه خود صعود کرد. آنچه شما تجربه کردید کاملاً به زمان ثبت سفارشهایتان بستگی داشت؛ موضوع شکافهای شبانه در هفتههای آرامتر مورد بررسی قرار میگیرد.
فراتر از Nasdaq: بازگشت کلی بازار
تحلیل بر اساس تنها یک شاخص، این پرسش اساسی را بیپاسخ میگذارد: آیا این یک نوسان خاص در سهام رشد بود یا بازگشتی در کل بازار؟ جدول زیر یازده نماد را بر اساس یک معیار واحد بررسی میکند: سه ETF اصلی شاخصها، و سپس داراییهایی که در زمان شوکهای ژئوپلیتیک مورد توجه قرار میگیرند: انرژی، طلا، اوراق قرضه بلندمدت Treasury، یک ETF نوسانپذیری و چهار پیمانکار حوزه دفاعی.
کد دقیق 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% در مقابل %+0.3% در DIA بسته شد که تنها در محدوده مثبت بود. شاخص با وزن بالای سهام رشد، شدیدترین بازگشت را داشت؛ در حالی که شاخص Dow با وزن بالای بخش صنعتی، کمترین میزان بازگشت را ثبت کرد. تفاوت میان SPY و DIA ناشی از ترکیب داراییهاست، نه میزان شکاف قیمتی.
جریان سرمایه: نفت، طلا، صنایع دفاعی و نوسانپذیری
سطرهای پایینتر همین پنل را بررسی کنید که نشاندهنده «معاملات جنگ» است. بخش انرژی در بالاترین سطح خود باز شد اما با نزول بسته شد: ETF مربوطه (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% بود)؛ این شرکت تنها یکی از چهار شرکت بود که قیمت آن به محدوده قرمز نرسید.
اوراق قرضه دولتی: تقاضا برای داراییهای امن با تأخیر ایجاد شد
کاهش بازده اوراق قرضه دولتی به معنای افزایش قیمت اوراق است؛ این همان جریان کلاسیک سرمایه به سمت داراییهای امن است. در روز شروع تهاجم، این جریان در زمان بسته شدن بازار تقریباً ناچیز بود:
کد دقیق 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بازده 10 ساله در تاریخ 24 فوریه در سطح 1.96% بسته شد که کمی کمتر از سطح 1.99% در روز قبل بود. فرار واقعی سرمایه در هفته بعد رخ داد: تا 2022-03-01، بازده 10 ساله به 1.72% رسید که پایینترین سطح بسته شدن در این بازه زمانی بود؛ همچنین بازده 2 ساله در همین مدت از 1.58% به 1.31% کاهش یافت. ETF با نام TLT که نشاندهنده اوراق قرضه با مدتزمان طولانی در پنل بالا است، همان روند را در معاملات درونروزی نشان داد: یک شکاف مثبت به میزان +1.8% در زمان بازگشایی که تا زمان بسته شدن بازار به +0.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 = '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% در تاریخ 22 و 23 فوریه)؛ چرا که اخبار مربوط به مقدمات جنگ بر سرخط خبرها غالب بود. روز خودِ تهاجم با افزایش 3.4% بسته شد و روز بعد نیز شاهد افزایش 1.5% بود. سقوط بازارها در زمان تهدید و صعود آنها در زمان وقوع حادثه، الگویی قدیمی است که ضربالمثلهای والاستریت نیز به آن اختصاص یافته است؛ و این نمودار، شفافترین سند مدرن از این الگو است. اما به بررسی جدول ادامه دهید: قیمت در تاریخ 2022-03-14 به دلار 318.21 رسید که پایینتر از سطح ثبتشده در زمان هراس صبح روز تهاجم است.
آیا روند صعودی تداوم یافت؟
خیر — و اکنون شواهد این موضوع ثابت شده است:
کد دقیق 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در روز 2022-03-14، یعنی 18 روز تقویمی پس از تهاجم، QQQ در قیمت 318.26 دلار، پایینتر از کفِ وحشتزدهی دقیقه اولِ بازار در صبح روز تهاجم، بسته شد. آن قیمتِ بستهشدن در کفِ ماه مارس یعنی 318.21 دلار، -6.6% پایینتر از قیمتِ بستهشدن در روز تهاجم بود — و روند سالانه ادامه یافت: تا 2022-12-28، QQQ در قیمت 260.02 دلار بسته شد، یعنی -23.7% پایینتر از سطحِ پایانِ روز تهاجم. بازگشتِ قیمت در 24 فوریه واقعی، شدید و موضعی بود. چرخه افزایش نرخ بهره، و نه جنگ، جهتگیری سال 2022 را تعیین کرد؛ همان درسی که سقوط مارس 2020 در جهت مخالف به ما آموخت.
میزان نادر بودن بازگشتی با این ابعاد چقدر است؟
بررسی تمامی جلسات معاملاتی QQQ از سال 2003 تا پایان 2025، دقیقاً 2 جلسه را نشان میدهد که در طول روز حداقل 3٪ پایینتر از قیمت بسته شدن روز قبل معامله شدند، اما در نهایت حداقل 1٪ بالاتر از آن قیمت بسته شدند:
کد دقیق 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 session24 فوریه 2022 یکی از این موارد است. مورد دیگر 2022-10-13 است؛ جلسهای که یک ساعت پس از انتشار گزارش تورم فراتر از انتظار باز شد و شاهد یک روز دیگر با الگوی gap-down-close-green بود. بازگشت قیمتی در روز آغاز تهاجم، بزرگتر از دیگری بود: یک نوسان از کف تا قیمت بسته شدن به میزان 7% در جهت مخالف 5.7%. در طول بیست و سه سال ثبت دادهها، هر دو مورد در یک سال رخ دادهاند.
آنچه این روز به ما میآموزد
سه مکانیزم پایدار در این روند بازار وجود دارد. نخست: تا زمان وقوع یک رویداد مورد انتظار، معمولاً موقعیتهای معاملاتی پیشتر شکل گرفتهاند؛ دو جلسه نزولی پیش از تهاجم، نشاندهنده این پیشبینی بودند. دوم: حراج زمان بازگشایی بازار، مرحلهای است که ترسهای انباشتهشده شبانه در یک قیمت واحد تخلیه میشوند و این قیمت میتواند نقطه اوج یا حضیض روز در هر دو جهت باشد. سوم: یک بازگشت شدید در یک روز، نشاندهنده جریانهای نقدینگی همان روز است، نه جهتگیری فصل بعد؛ به هر حال، هفتههای پس از این جلسه به کفهای جدید کاهش یافت. روزهای رویداد، پاداش کسانی است که با سازوکار بازار آشنا هستند؛ و کسانی را که شکل یک جلسه معاملاتی را با روند کلی بازار اشتباه میگیرند، جریمه میکنند.
جزئیات حجم معاملات، هویت عاملان بازار را تایید میکند: حجم 128.5 میلیون سهم، این روز را به سنگینترین جلسه در جدول سه هفتهای بالا تبدیل کرد. حجم بالای معاملات در یک صعود از کف تا قیمت بسته شدن، نشان میدهد که خرید واقعی در برابر فروش واقعی قرار گرفته است، نه یک حرکت بیروح در بازار کمحجم. این الگو را با رالی 24 مارس 2020 مقایسه کنید، جایی که حجم معاملات با قاطعیت، نقطه چرخش از یک وضعیت پانیک را مشخص کرد؛ و آن را با روزهای بازگشت ضعیفی که در جلسه بعد از بین میروند، مقایسه کنید.
پرسشهای متداول روز تهاجم
با حمله روسیه به اوکراین، بازار سهام چه واکنشی داشت؟
در خود آن روز — 24 فوریه 2022 — ETF Nasdaq-100 با نماد QQQ در اولین دقیقه معاملات با کاهش -3.2% باز شد، اما در طول جلسه صعود کرد و با افزایش 3.4% بسته شد. ETF S&P 500 با نماد SPY با افزایش 1.5% و ETF Dow با نماد DIA با افزایش 0.3% بسته شدند.
چرا با وجود حمله روسیه به اوکراین، قیمت سهام افزایش یافت؟
این صفحه به بررسی انگیزهها نمیپردازد؛ بلکه توالی وقایع را ثبت میکند — فشار فروش سنگین در بازگشایی ساعت 9:30 کاملاً اعمال شد و در تمام ساعات بعدی، خرید بر بازار حاکم بود. الگوی «سقوط در زمان تهدید و صعود در زمان وقوع رویداد» نمونههای تاریخی متعددی دارد.
وضعیت نفت و طلا در زمان حمله روسیه به اوکراین چگونه بود؟
قیمت هر دو در زمان بازگشایی جهش کرد و سپس کاهش یافت: ETF انرژی با نماد XLE با شکاف مثبت 2.1% باز شد و با کاهش -0.9% بسته شد، و ETF طلا با نماد GLD با شکاف مثبت 2.4% باز شد و با کاهش -0.6% بسته شد. سهام صنایع دفاعی سود خود را حفظ کردند: هر چهار شرکت اصلی در پنل بالا در محدوده سبز بسته شدند.
آیا رالی پس از تهاجم تداوم داشت؟
خیر. QQQ در 2022-03-14، یعنی 18 روز تقویمی بعد، پایینتر از کفِ ناشی از وحشت در روز تهاجم بسته شد و تا رسیدن به کف سال 2022 در تاریخ 2022-12-28، در سطح -23.7% پایینتر از قیمت بسته شدن در روز تهاجم قرار داشت.
بازگشت روندی مانند 24 فوریه 2022 چقدر نادر است؟
بسیار نادر. از سال 2003 تا پایان 2025، تنها 2 جلسه معاملاتی QQQ وجود داشته است که در طول روز 3 درصد یا بیشتر پایینتر از قیمت بسته شدن روز قبل معامله شده و همچنان حداقل 1 درصد افزایش یافته و بسته شده است — این مورد و 2022-10-13.
هر پنل در بالا، یک پرسوجوی ذخیرهشده و نسخهبندیشده از دادههای تاریخی است — برای مشاهده هر اندازهگیری، کد SQL را گسترش دهید. میخواهید این روز را به جای خواندن، تجربه کنید؟ این یکی از سناریوهای قابل بازی در شبیهساز معاملاتی Strasmore Labs است.