2022年2月24日战争开盘,收盘转绿
2022年2月24日,俄罗斯入侵乌克兰,美股大幅低开后收涨。完整记录盘中反转,以及油价、黄金、防务股、美债、波动率和后续几周表现。
2022年2月24日凌晨,俄罗斯对乌克兰发动全面入侵。美国股市经历了本十年最受研究的交易时段之一。股指期货在隔夜交易中大幅下跌,纳斯达克-100 ETF QQQ开盘下跌 -3.2%,收盘时为 +3.4%。本页记录了整个事件:市场如何逐分钟反转,标普500指数和道琼斯指数的表现,油价、金价、防务股、美国国债和波动率的走势,以及随后几周的市场表现。所有数字均来自存储查询;展开任意面板即可查看 SQL。
开盘前:夜间局势如何演变
入侵并非毫无征兆。2021年末至2022年初,俄罗斯在乌克兰边境附近集结军队。当时西方估计兵力远超十万人,市场也已连续数周交易这一风险。2月21日星期一,莫斯科承认乌克兰东部两个自行宣布成立的分离主义共和国。美国市场因华盛顿诞辰纪念日休市,能够对这一消息定价的首个交易日是次日2月22日星期二,当天市场全线下跌。首批西方制裁也于当日落地,德国同时暂停了北溪2号管道的认证程序。
随后,2月24日星期四莫斯科时间清晨6点前不久,也就是纽约时间周三晚间约10点,俄罗斯总统宣布展开军事行动。不到一小时内,乌克兰多个城市传出爆炸声。美国股指期货可在夜间交易,因此立即下跌。到日出时,唯一尚未确定的问题是,上午9点30分的开盘竞价将低于周三收盘价多少。
一行概览
一行数据包含全部关键信息:前收盘价、跳空幅度、最低价、最高价、收盘价和成交量:
| 前收盘价 | 常规交易时段开盘价 | 跳空幅度 (%) | 常规交易时段最低价 | 最低价时间(ET) | 常规交易时段最高价 | 常规交易时段收盘价 | 日变动 (%) | 最低价较前收盘 (%) | 最低点至收盘 (%) | 收盘价较最高价 (%) | 开盘价较最低价 (%) | 日成交股数(百万) | 常规交易时段分钟线 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 ET,即开盘后第一分钟,较前收盘价低 -3.4%。从首次成交开始,QQQ 上涨了六个半小时,最终收于 $340.65:当日上涨 3.4%,从盘中低点到收盘价上涨 7%,成交量为 128 百万股。收盘并非在收盘铃声前回落:收盘价仅比盘中最高价 $341.04 低 0.11%,这意味着当天基本收在最高位。任何在开盘第一分钟卖出的人,卖出价距离当天最终低点仅 0.18%;真正的最低成交价出现在开盘集合竞价后不久,而不是集合竞价本身(集合竞价成交价为 $318.84;最低价为 $318.26)。
逐个时段看反转
半小时分段展现了这轮上涨的形态:
| ET 时间 | 区间收盘价 | 区间最低价 | 成交股数(百万) |
|---|---|---|---|
| 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百万股。这与2011年的阶梯式下跌正好相反。这类交易日说明,“市场因入侵而下跌”的说法会造成误导:期货在隔夜下跌;现货市场从开盘第一分钟起便上涨。你实际经历哪一种走势,完全取决于订单何时到达市场。这也是较为平静的几周中隔夜跳空所衡量的主题。
不只是纳斯达克:整个市场都出现反转
如果只看一个指数,显然还无法回答一个问题:这是成长股特有的现象,还是整个市场都出现了反转?下图将十一个 ticker 放在同一尺度上进行比较,包括三只主要指数 ETF,以及地缘政治冲击交易策略通常会配置的资产:能源、黄金、长期美债、波动率 ETF 和四家国防承包商。
| ticker | 前收盘价 | 跳空幅度 (%) | 最低价较前收盘 (%) | 最高价较前收盘 (%) | 日变动 (%) |
|---|---|---|---|---|---|
| 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%,几乎没有上涨。成长股权重较高的指数反转最为剧烈;工业股权重较高的道琼斯指数反转幅度最小。SPY 与 DIA 的差异来自指数成分,而不是缺口大小。
资金流向:石油、黄金、国防和波动率
现在来看同一面板的下方几行,即“战争交易”。能源板块开盘即触及高点,随后收跌:XLE 跳空高开 +2.1%,盘中一度跌至较前收盘低 -3.4%,最终收于 -0.9%。黄金走出了相同的完整行情:GLD 高开 +2.4%,收于 -0.6%。VIXY 是一只持有短期 VIX 期货的 ETF,也是可交易的波动率指数最接近的代理工具。该 ETF 开盘跳空高开 +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 date2月24日,10年期国债收益率收于1.96%,略低于前一日的1.99%。真正的避险买盘在下一周出现:到2022-03-01,10年期收益率报1.72%,为这一窗口期内的最低收盘水平;同期,2年期收益率从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入侵前的交易日收跌(2月22日至23日分别为 -1% 和 -2.6%),因为局势升级占据了头条。入侵当天收盘为 +3.4%,次日又上涨了 +1.5%。市场因威胁下跌,却因事件发生而上涨,这是一个足以配上华尔街谚语的经典模式,而这组行情是其最清晰的现代例证。但请继续查看表格:截至 2022-03-14,数据收于 $318.21,低于入侵当日上午恐慌性交易形成的价格。
反弹守住了吗?
没有。现在这一说法已有成交记录为证:
| 入侵日收盘价 | 入侵日最低价 | 首次收盘低于入侵日最低价 | 至新低的日历日数 | 3月低点收盘价 | 3月低点日期 | 3月低点较入侵日收盘 (%) | 年内低点收盘价 | 年内低点日期 | 年内低点较入侵日收盘 (%) |
|---|---|---|---|---|---|---|---|---|---|
| 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%。2月24日的反转真实而剧烈,但影响是局部的。决定2022年市场方向的不是战争,而是加息周期。这与2020年3月崩盘传达的教训方向相反。
这种幅度的反转有多罕见?
扫描2003年至2025年底的每个QQQ交易日后发现,确切有2个交易日盘中一度较前收盘价下跌至少3%,但最终收盘时较前收盘价上涨至少1%:
| 交易时段 | 最低价较前收盘 (%) | 收盘价较前收盘 (%) | 最低点至收盘 (%) |
|---|---|---|---|
| 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 session2022年2月24日是其中之一。另一个是2022-10-13,该交易日在一份高于预期的通胀报告发布一小时后开盘,同样经历了跳空低开、收盘上涨。入侵日的反转幅度更大:从盘中低点到收盘价上涨7%,相对于5.7%。二十三年的行情数据中,这两笔成交都出现在同一年。
这一天带来的启示
这份行情记录体现了三个持久有效的市场机制。第一,广受预期的事件真正发生时,市场通常已经完成了仓位调整;入侵前的两个下跌交易日已经反映了这种预期。第二,开盘集合竞价会以单一价格消化隔夜累积的恐慌,而这个价格可能成为当天的极值,无论方向是上行还是下行。第三,剧烈的单日反转只能说明当天的资金流向,不能说明下一季度的方向;本交易日之后的几周仍然创出了新低。事件日要求交易者了解市场运行机制,也会惩罚把单个交易日的形态误认为市场制度性趋势。
成交量细节进一步说明了各方的行为:128.5百万股使其成为上方三周表格中成交最活跃的交易日;在从盘中低点上涨至收盘的过程中,成交量放大意味着真实规模的买盘遇上了真实的卖盘,而不是成交清淡的行情自然漂移。请比较2020年3月24日的反弹中相同的特征:信念驱动的成交量同样标志着恐慌行情的转折;还要将其与随后一个交易日便回落的清淡反弹日区分开来。
入侵日常见问题
俄罗斯入侵乌克兰时,股市表现如何?
当天,即2022年2月24日,纳斯达克-100 ETF QQQ开盘下跌-3.2%,并在开盘第一分钟触及低点,随后整个交易时段持续攀升,最终收涨3.4%。标普500 ETF SPY收涨1.5%,道琼斯指数 ETF DIA收涨0.3%。
俄罗斯入侵乌克兰时,股票为何上涨?
本页面不对动机作出判断;盘面记录了事件顺序。沉重的抛售压力在9:30开盘时已充分释放,之后每个小时买盘都占据主导。市场在威胁出现时下跌、事件发生时反弹,这种模式在历史上有许多先例。
俄罗斯入侵乌克兰时,原油和黄金表现如何?
两者都在开盘时飙升,随后回落:能源 ETF XLE跳空上涨2.1%,最终收涨-0.9%;黄金 ETF GLD跳空上涨2.4%,最终收涨-0.6%。国防股守住了涨幅:上方面板中的四只主要股票均收涨。
入侵后的反弹是否持续?
没有。QQQ在18个日历日后,即2022-03-14,收盘跌破入侵日的恐慌低点;到2022年低点2022-12-28时,其价格已较入侵日收盘价低-23.7%。
2022年2月24日这样的反转有多罕见?
非常罕见。从2003年至2025年年底,只有2个QQQ交易日盘中较前一日收盘价下跌至少3%,但最终仍收涨至少1%。其中包括这一天,以及2022-10-13。
上方每个面板都是基于历史盘面的已存档、版本化查询。展开 SQL即可查看每项测量结果。与其阅读这一天的行情,不如亲身体验?这是Strasmore Labs交易模拟器中的可操作场景之一。