Strasmore Research
Market Recap

2026年上半年市场回顾

Matt ConnorBy Matt Connor Updated 2026-07-23

2026年上半年呈现出截然不同的两种市场特征:第一季度各大主要指数ETF均出现下跌或停滞不前;而第二季度则实现了强劲反弹。SPY上半年上涨了 8.8%;QQQ上涨了 18.7%;IWM的 21.3% 是该小盘股ETF在我们记录的历史中表现最好的上半年——下文通过对往年数据的统一查询计算得出。利率市场呈现出另一种走势:2s10s利差 在半年内从 72 个基点收窄至 30,且从未出现倒挂。本页面记录了上半年的完整账目——包括得分板、历史排名、月度阶梯走势、各期限收益率曲线、十一个板块、期权数据的月度演变,以及上半年表现突出的个股。此处所有数据均来自存储查询;如需查看SQL代码,请展开相应面板。

半年报表现

查询2026年H1:四大指数ETF的半年、Q1及Q2收益率
每个数字背后的完整 SQL
SELECT ticker,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
    round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS h1_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
  AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY ticker

两季度的划分构成了半年报的核心形态:SPY 先是 -5.2%,随后是 14.1%;QQQ 先是 -6.9%,随后是 26.5%。IWM 在 21.3% 时表现最为稳健,小盘股在六个月内的表现优于所有大盘股指数。季度详情请参阅 第二季度回顾。关于半年报计算方式的说明:SPY 半年的 8.8% 远低于其第二季度的表现,因为半年报包含了回撤与反弹——-5.2% 与 14.1% 的复利计算结果如表所示,任何“上半年回报率”的标题都包含了这一完整的波动过程。

回顾历史,上半季表现是否异常

8.8% 的上半季表现是否异常?下表针对每年的分钟级历史数据,重新计算了相同的上半季收益率(从一月到六月的常规交易时段开盘至收盘)。每个 ETF 配对仅执行一次查询,且每年的计算方式完全一致,随后将该表现与历史数据进行排名对比。分钟级数据的最早日期已在下文的方法论中验证;记录中第一个完整的上半季是从收据中指定的年份开始。

查询历年上半年:SPY与QQQ(按年度重新计算)
每个数字背后的完整 SQL
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
       ticker,
       uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
       round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 1) AS h1_return_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
  AND window_start >= toDateTime('2003-01-01 00:00:00')
  AND window_start < toDateTime('2026-07-01 00:00:00')
  AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
  AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
ORDER BY y ASC, ticker ASC
查询排名记录:本半年与往年对比 (SPY与QQQ;排名1为最优;不含自身)
每个数字背后的完整 SQL
SELECT ticker,
       round(anyIf(ret, y = 2026), 1) AS h1_2026_pct,
       arrayCount(x -> x > anyIf(ret, y = 2026), groupArrayIf(ret, y != 2026)) + 1 AS rank_best,
       count() AS halves_compared,
       min(y) AS first_year,
       anyIf(sessions, y = 2026) AS sessions_2026
FROM (
    SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
           ticker,
           uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
           (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ')
      AND window_start >= toDateTime('2003-01-01 00:00:00')
      AND window_start < toDateTime('2026-07-01 00:00:00')
      AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY y, ticker
    HAVING sessions >= 100
)
GROUP BY ticker
ORDER BY ticker ASC

2004 以来,SPY 的 8.8% 在 23 个上半季中排名 6(排名第 1 为最优)—— 处于前三分之一,并非历史最高。QQQ 的 18.7% 在 16 个可比上半季中排名 3 —— QQQ 的数据序列较短,因为该基金在某些年份使用不同的根代码进行交易;此外,若某个代码的上半季交易次数少于一百次,则会被表中的交易次数保护机制排除,因此排除情况是透明可见的。

查询历年上半年:DIA与IWM(计算方式相同)
每个数字背后的完整 SQL
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
       ticker,
       uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
       round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 1) AS h1_return_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('DIA', 'IWM')
  AND window_start >= toDateTime('2003-01-01 00:00:00')
  AND window_start < toDateTime('2026-07-01 00:00:00')
  AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
  AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
ORDER BY y ASC, ticker ASC
查询排名记录:DIA与IWM与往年上半年对比 (排名1为最优;不含自身)
每个数字背后的完整 SQL
SELECT ticker,
       round(anyIf(ret, y = 2026), 1) AS h1_2026_pct,
       arrayCount(x -> x > anyIf(ret, y = 2026), groupArrayIf(ret, y != 2026)) + 1 AS rank_best,
       count() AS halves_compared,
       min(y) AS first_year,
       anyIf(sessions, y = 2026) AS sessions_2026
FROM (
    SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
           ticker,
           uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
           (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('DIA', 'IWM')
      AND window_start >= toDateTime('2003-01-01 00:00:00')
      AND window_start < toDateTime('2026-07-01 00:00:00')
      AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY y, ticker
    HAVING sessions >= 100
)
GROUP BY ticker
ORDER BY ticker ASC

小盘股行是本次分析的核心:IWM 自 2004 以来在 23 个上半季中排名 1 —— 这是该基金历史上的最佳表现,优于表中所有的反弹上半季。DIA 的 8.4% 在 23 个上半季中排名 4。计算逻辑说明:计算每个日历上半季内常规交易时段的开盘至收盘收益率,每年计算方式一致,上限固定在当前期间的结束点,以确保在后续年份数据载入时,对比集合不会在无提示的情况下扩大。

月度走势

查询月度收益率 (SPY与QQQ,单次查询重新计算)
每个数字背后的完整 SQL
SELECT toString(toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York')))) AS period_start, ticker,
    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) / argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS month_return_pct,
    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 month_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
  AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY period_start, ticker
ORDER BY period_start, ticker

行情呈现震荡走势:先小幅上涨,随后连续下跌,接着大幅反弹,再经历小幅回调。四月是上半年的转折点(SPY 9.9%,QQQ 14.8% —— 这是 QQQ 六个月中表现最好的月份),六月 SPY 以 -1.2% 平稳收官。关于六月的详细回顾(包含该平稳数值背后的涨跌家数分布),请参阅 此处。逐月分析数据表:年初行情基本持平(一月 SPY 0.9%),二月(-0.5%)和三月(-4.2%)持续下跌,随后四月单月实现反转,五月延续涨势(4.9%),六月小幅回调。六个月中有三个月为负值——对于最终实现稳健上涨的上半年而言,这种涨跌各半的情况很常见。当单月数据看似定论时,请记住这种常规的市场形态。

利率:全收益率曲线,按期限划分

本半年美债收益率曲线呈现扭曲态势,而非平行移动。极短端(与政策利率关联最紧密的期限)几乎没有波动;两年期利率上升了三分之二个百分点;三十年期利率几乎没有变化。本报告对比了本半年期初与期末的完整收益率曲线。

查询七种期限:期初与期末收益率及变化
每个数字背后的完整 SQL
SELECT maturity, start_pct, end_pct, round((end_pct - start_pct) * 100, 0) AS change_bp FROM (
    SELECT '1-month' AS maturity, (SELECT round(argMin(yield_1_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_month)) AS start_pct, (SELECT round(argMax(yield_1_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_month)) AS end_pct, 1 AS o
    UNION ALL SELECT '3-month', (SELECT round(argMin(yield_3_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_3_month)), (SELECT round(argMax(yield_3_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_3_month)), 2
    UNION ALL SELECT '1-year', (SELECT round(argMin(yield_1_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_year)), (SELECT round(argMax(yield_1_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_year)), 3
    UNION ALL SELECT '2-year', (SELECT round(argMin(yield_2_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_2_year)), (SELECT round(argMax(yield_2_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_2_year)), 4
    UNION ALL SELECT '5-year', (SELECT round(argMin(yield_5_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_5_year)), (SELECT round(argMax(yield_5_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_5_year)), 5
    UNION ALL SELECT '10-year', (SELECT round(argMin(yield_10_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_10_year)), (SELECT round(argMax(yield_10_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_10_year)), 6
    UNION ALL SELECT '30-year', (SELECT round(argMin(yield_30_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_30_year)), (SELECT round(argMax(yield_30_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_30_year)), 7
) ORDER BY o

从上至下阅读变化列,扭曲趋势显而易见:一个月期利率在六个月内变动了 -2 个基点,而两年期利率上升了 67,三十年期利率仅变动了 5。平行移动意味着所有期限的利率同步变动;而本半年内,收益率曲线的中端发生了变动,且两端表现平稳——短端利率锚定在政策利率附近,长端利率几乎未重新定价。

曲线斜率的变化

查询斜率记录:期初、期末、最小值(本半年利差未倒挂)
每个数字背后的完整 SQL
SELECT
    round((argMin(yield_10_year - yield_2_year, date)) * 100, 0) AS start_bp,
    round((argMax(yield_10_year - yield_2_year, date)) * 100, 0) AS end_bp,
    round(min((yield_10_year - yield_2_year)) * 100, 0) AS min_bp,
    count() AS prints
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30')
  AND isNotNull(yield_10_year) AND isNotNull(yield_2_year)

收益率曲线趋平的定义是短端利率上升速度快于长端利率:2s10s spread124 次数据记录中从 72 基点降至 30 基点 —— 该半年度的最低值位 27,因此曲线趋平但从未发生倒挂。曲线趋平是否预示后续走势仅为预测,本表不作预测。

查询2s10s利差,本半年每日报价
每个数字背后的完整 SQL
SELECT toString(date) AS d, round((yield_10_year - yield_2_year) * 100, 0) AS spread_2s10s_bp
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30')
  AND isNotNull(yield_10_year) AND isNotNull(yield_2_year)
ORDER BY date

日线序列显示,趋平并非单一事件,而是一个持续的过程 —— 124 次数据记录显示其在半年度内逐步下降,利差从年初的 72 基点降至期末的 30 基点。

板块:指数掩盖的分化

究竟是哪些板块创造了上半年的收益?我们将十一只 SPDR 板块 ETF 按半年和季度进行了拆分分析。

查询11个板块ETF:2026年H1收益率、Q1与Q2拆分及H1成交额
每个数字背后的完整 SQL
SELECT ticker,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
    round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
  AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY ticker

市场分化是核心:科技板块 (XLK) 上半年上涨 30.8% ——且第二季度表现为 42% ——而通信服务板块 (XLC) 则收于 -9.3%。表现最好与最差的板块在半年内的差距约为四十个百分点。持有“大盘”意味着同时持有这两个极端。能源板块 (XLE) 是长期持仓的警示:它在半年内表现稳健,涨幅为 18.8% ——由第一季度的 36.9% 和第二季度的 -11% 组成。在指数下跌的季度,它是市场表现最强的大型板块;而在指数反弹的季度,它却是表现最弱的板块之一。金融板块 (XLF) 的走势则完全相反:第一季度为 -9.9%,第二季度为 7.7%。单一的上半年数据抹平了这两次波动;只有按季度拆分才能反映真实情况。

各板块交易成本

收益率表格随处可见,但报价行情却并不常见。本面板衡量了每个板块 ETF 在一个完整交易日内的中位数买卖价差。此处衡量的是 123 个交易日中的 6 月 29 日,并已注明。

查询板块ETF中值报价利差(2026年6月29日,常规交易时段)
每个数字背后的完整 SQL
SELECT ticker,
    round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 2) AS med_spread_bps,
    round(count() / 1e6, 2) AS quote_updates_m,
    countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
  AND sip_timestamp >= toDateTime64('2026-06-29 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-29 20:00:00', 9)
GROUP BY ticker
ORDER BY med_spread_bps

共有 11 个报价的价差在几个基点或更低——最低为 0.62 bps (XLV),最高为 2.23 bps (XLRE)。这就是“板块 ETF 具有流动性”的实际含义:建立任何板块头寸的成本仅以百分之零点几计。作为与个股的对比,6 月 29 日深度分析 显示,在同一交易日内,流动性较差的个股价差是这些水平的数百倍。

半年期的市场宽度

本报告从两个维度分析市场宽度。粗略维度:在半年的 123 周期内,SPY 有 64 个交易日上涨,59 个交易日下跌——在整体稳步上涨的背景下,涨跌天数几乎持平,这反映了日线图呈现出的震荡上行态势。精细维度——涵盖所有个股:该维度基于月度规模;6 月份的上涨/下跌个股比例见 6 月回顾(当时下跌个股多于上涨个股),季度边界的统计见 Q2 回顾。由于单次六个月全市场上涨个股扫描的查询量超过了本页面的预算限制,我们在此说明该限制,而非直接缩小统计范围。

查询SPY本半年上涨与下跌交易日统计
每个数字背后的完整 SQL
SELECT countIf(day_ret > 0) AS up_sessions,
       countIf(day_ret < 0) AS down_sessions,
       countIf(day_ret = 0) AS flat_sessions,
       count() AS sessions_total
FROM (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 2) AS day_ret
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      AND window_start < toDateTime('2026-07-01 00:00:00')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY d
)

期权交易记录:逐月分析

仅半年的数据即可展示期权交易记录的演变。下表中的每个面板代表一个月的完整交易扫描——包括总合约成交量,以及在到期当日(0DTE)成交的份额。数据表明:成交量从一月的 1316.1 百万份合约增长至六月的 1477.9 百万份,六月是半年中交易最活跃的月份;同时,当日到期合约的占比从一月的 26.5% 上升至六月的 34.3%,后者也是半年中占比最高的月份。六月期权成交量的三分之一是在当日到期的合约中完成的。

查询1月:全市场期权合约成交量及当日到期占比
每个数字背后的完整 SQL
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
       round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
       uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-01-01 00:00:00')
  AND window_start < toDateTime('2026-02-01 00:00:00')
查询2月:全市场期权合约成交量及当日到期占比
每个数字背后的完整 SQL
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
       round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
       uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-02-01 00:00:00')
  AND window_start < toDateTime('2026-03-01 00:00:00')
查询3月:全市场期权合约成交量及当日到期占比
每个数字背后的完整 SQL
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
       round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
       uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-03-01 00:00:00')
  AND window_start < toDateTime('2026-04-01 00:00:00')
查询4月:全市场期权合约成交量及当日到期占比
每个数字背后的完整 SQL
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
       round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
       uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-04-01 00:00:00')
  AND window_start < toDateTime('2026-05-01 00:00:00')
查询5月:全市场期权合约成交量及当日到期占比
每个数字背后的完整 SQL
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
       round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
       uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-05-01 00:00:00')
  AND window_start < toDateTime('2026-06-01 00:00:00')
查询6月:全市场期权合约成交量及当日到期占比
每个数字背后的完整 SQL
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
       round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
       uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-06-01 00:00:00')
  AND window_start < toDateTime('2026-07-01 00:00:00')

每月抽样交易成本

查询SPY每月样本日(每月第二个周三)中值报价利差
每个数字背后的完整 SQL
SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session,
       round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 3) AS med_spread_bps,
       round(count() / 1e6, 2) AS quote_updates_m,
       countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
  AND ((sip_timestamp >= toDateTime64('2026-01-14 14:30:00', 9) AND sip_timestamp < toDateTime64('2026-01-14 21:00:00', 9))
    OR (sip_timestamp >= toDateTime64('2026-02-11 14:30:00', 9) AND sip_timestamp < toDateTime64('2026-02-11 21:00:00', 9))
    OR (sip_timestamp >= toDateTime64('2026-03-11 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-03-11 20:00:00', 9))
    OR (sip_timestamp >= toDateTime64('2026-04-15 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-04-15 20:00:00', 9))
    OR (sip_timestamp >= toDateTime64('2026-05-13 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-05-13 20:00:00', 9))
    OR (sip_timestamp >= toDateTime64('2026-06-10 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-10 20:00:00', 9)))
GROUP BY session
ORDER BY session ASC

SPY 在每月第二个星期三的报价中值:1月样本为 0.145 bps,2月为 0.144 bps;春季样本的数值约为其两倍;6月样本为 0.409 bps,为六个月中的最大值。说明:这些数据是单日抽样(每月第二个星期三),而非全月中值——对六个月的完整报价行情进行扫描将超出本页面的查询预算。样本日期已在表格中列出,无效报价已在其中统计,并未被直接剔除。

本半年度的重要标的

以下并非编辑精选,而是基于成交额衡量的重要性:下表列出了本季度成交额排名前列的标的。此处进行了重新计算以供核实,每个标的均链接至其深度分析报告。

查询Q2常规时段全市场成交额(排除待核实代码)
每个数字背后的完整 SQL
SELECT ticker,
    round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS dollar_bn,
    round(100 * sum(toFloat64(close) * toFloat64(volume)) / max(sum(toFloat64(close) * toFloat64(volume))) OVER (), 1) AS pct_of_leader
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-04-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
  AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
  AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY dollar_bn DESC
LIMIT 8

MU 在第二季度的成交额超过了 SPY($2047.5 十亿美元对比 $2032 十亿美元)——这与 Q2 回顾 中的数据一致。在上述领先标的中,该半年度表现如下:

查询领先板块的半年及Q2收益率及半年成交额
每个数字背后的完整 SQL
SELECT ticker,
    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)
         / argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
    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)
         / argMinIf(toFloat64(open), window_start, window_start >= toDateTime('2026-04-01 00:00:00') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
    round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('MU', 'NVDA', 'TSLA', 'SNDK', 'AMD', 'INTC')
  AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY ticker

存储与半导体板块主导了本半年度:SNDK 在六个月内回报 830.1%,MU 回报 290% —— 其六月走势已在此进行逐笔分析 —— INTC 回报 269.3%。NVDA 是该名单中成交额最大的标的,半年成交额达 $3287.9 十亿美元,回报率为 5.2% —— 当存储类股票翻倍增长时,其回报仅为个位数;其六月深度分析 详细记录了这种分化走势。TSLA 是名单中唯一的下跌者,回报率为 -8.2%。六月上市的巨头公司因使用重复代码且尚待实体验证,暂不纳入领先标的扫描范围 —— 其首月表现已发布逐日核实报告。依据:领先标的名单基于第二季度常规交易时段的美元成交额(见上方扫描结果);回报列为本半年度数据,统计区间从首个常规交易时段开盘至最后一个常规交易时段收盘。

上半年 IPO 浪潮月度回顾

查询本半年每月新股上市数量
每个数字背后的完整 SQL
SELECT toString(toStartOfMonth(listing_date)) AS m, count() AS listings
FROM global_markets.stocks_ipos
WHERE listing_date >= toDate('2026-01-01') AND listing_date <= toDate('2026-06-30')
GROUP BY m
ORDER BY m

上市潮呈现前重后轻且分布不均的特征:47 次上市是上半月最繁忙的月份,而 17 次则是最平淡的月份——备受瞩目的六月大型上市事件发生在交易量尚属常规的月份(35 次上市)。

上半年概览

查询2026年H1公司日历(含三个月末申报指数缺口)
每个数字背后的完整 SQL
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= toDate('2026-01-01') AND ex_dividend_date <= toDate('2026-06-30')) AS ex_div_events,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= toDate('2026-01-01') AND execution_date <= toDate('2026-06-30')) AS splits,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= toDate('2026-01-01') AND listing_date <= toDate('2026-06-30')) AS ipos,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= toDate('2026-01-01') AND filing_date <= toDate('2026-06-30')) AS h1_filings,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-03-31')) AS filings_mar31,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-04-30')) AS filings_apr30,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')) AS filings_jun30

上半年共有 205 家公司上市。这一上市潮中,六月份最大的首发案例已在 逐笔记录报告 中列出。此外,还发生了 830 次拆股和 28356 次除权事件。从规模来看,上半年平均每个交易日都有超过一家新公司上市。备案总量包含三重披露特征:在半年内所有最后一个交易日为工作日的月末,SEC 指数几乎为空(例如,3月31日仅有 55 份备案,4月30日仅有 34 份,6月30日仅有 31 份,而相邻日期的备案量则达数千份),因此在数据回填前,半年的备案总数被低估了 —— 月末数据缺口详见诊断说明

会话收据

查询本半年共123个交易日(经核实)
每个数字背后的完整 SQL
SELECT
    (SELECT uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')) AS h1_sessions

数据说明

完整数据说明
  • 空头头寸数据截至 6 月 15 日结算日(生成时数据状态:6 月底数据尚未发布 —— 详见 6 月回顾;数据发布后本文将自动更新)。
  • 2026 年有三个月末申报日数据几乎为空(3 月 31 日、4 月 30 日、6 月 30 日 —— 即该半年内最后一个日历日为工作日的每个月末);数据已随计数一同披露,详情见 月末缺口说明。去年同期月末均有数千条申报记录,因此这是数据流缺口,而非申报假期。
  • 半年度规模的排行榜具有局限性:由于六个月全市场扫描超出了本页的查询预算,因此选取文中显示的季度规模领先扫描结果作为重点名单,并针对该固定名单计算半年度回报率 —— 计算依据已在引用处说明。第二季度6 月 回顾包含其对应规模下的完整排行榜表格。
  • 半年度规模的全市场宽度同样具有局限性 —— 已显示日线级细分数据;个股级计数存在于月度和季度规模中,并已在宽度部分进行链接。
  • QQQ 的历史序列短于 SPY:该基金在若干年份内使用不同的根代码进行交易;会话计数保护机制已明确排除这些年份(年度会话计数见表中数据)。
  • 六个期权面板均为全盘月度扫描,价差趋势则每月抽取一个标记会话样本 —— 两者均通过批处理路径运行;样本基数已在文中说明。
  • 微观结构详情见 6 月 29 日深度解析

方法论

  • 统计周期为 2026 年 1 月 1 日至 6 月 30 日 —— 123 个交易日,已通过观测 K 线验证。收益率计算方式为每个窗口期内常规交易时段的开盘价至收盘价,所有计算均采用文中所示的相同查询。
  • 历史对比数据在生成时会针对完整的分钟级历史数据进行实时重新计算,绝不读取存储值。深度验证:此处延迟视图中最早的分钟 K 线日期与基础表(2003 年 9 月)一致,已在撰写时核实,因此存档的第一个完整上半年数据为 2004 年。每个历史查询均将上限锁定在该统计期末(随着后续年份数据的摄入,对比集不会扩大),并应用了最小交易日限制,每年的交易日数量已列出。
  • 时间戳以 UTC 格式存储,并带有原始 UTC 边界。多年历史数据块根据东部时间(9:30–15:59,按行转换——这是跨越数十年唯一安全的夏令时惯例)过滤常规交易时段;仅限 EDT 范围内的单窗口数据块使用等效的原始 UTC 时间段。此处已说明这两种惯例。
  • 生成过程通过受限的只读路径运行;公开页面永不查询实时数据。数据仓库状态截至 2026 年 7 月 5 日。

这是定期半年回顾的首版;年度完整版将在 1 月发布。季度详情:2026 年 Q2。本报告对比的宏观数据见 宏观概况