微观结构深析:2026年6月29日
从逐笔成交与NBBO报价磁带出发,核对交易时段与成交量,说明代码字典要求的成交量修正、纳秒级时间戳接收,以及一份在字母S处被截断的FINRA文件。
这是2026年6月29日市场回顾的底层技术篇:分钟K线之下的原始数据流——在一个再普通不过的周一交易日里,包含156.1百万笔逐笔成交和505.38百万次NBBO报价更新。每一个数字都来自已存储的查询结果(展开任意面板即可查看对应的SQL语句),当天两处需要深入核查的问题也都有完整说明:一处是行情数据自身代码字典所要求的成交量修正,另一份供应商文件则在字母S处悄然停止。
成交明细,逐笔核对
先核对交易时段,绝不凭假设推定:交易所节假日日历显示,2026年6月29日共有 0 条记录,而 SPY 在常规交易时段内恰好生成了 390 根分钟K线,为完整交易日,即纽约时间上午9:30至下午4:00。在整个延长交易时段中,综合交易磁带共记录了 156.1 百万笔独立成交。
| 假日行数 6/29 | SPY 常规时段蜡烛 | 成交笔数(百万) | 零股占成交笔数比(%) | 零股占成交股数比(%) | 打印单股数中位数 | 单股交易(百万) | 碎股占成交笔数比(%) |
|---|---|---|---|---|---|---|---|
| 0 | 390 | 156.1 | 72.61 | 8.79 | 21 | 17.9 | 4.73 |
每个数字背后的完整 SQL
WITH
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-06-29') AS holiday_rows,
(
SELECT countIf(window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-06-29 00:00:00' AND window_start < '2026-06-30 00:00:00'
) AS spy_bars
SELECT
holiday_rows AS holiday_rows_jun29,
spy_bars AS spy_regular_session_bars,
round(count() / 1e6, 1) AS trades_m,
round(100.0 * countIf(size < 100) / count(), 2) AS odd_lot_pct_of_trades,
round(100.0 * toFloat64(sumIf(size, size < 100)) / toFloat64(sum(size)), 2) AS odd_lot_pct_of_shares,
multiIf(
countIf(size <= 19) >= 0.5 * count(), 19,
countIf(size <= 20) >= 0.5 * count(), 20,
countIf(size <= 21) >= 0.5 * count(), 21,
countIf(size <= 22) >= 0.5 * count(), 22,
countIf(size <= 23) >= 0.5 * count(), 23,
0) AS median_print_shares,
round(countIf(size = 1) / 1e6, 1) AS one_share_trades_m,
round(100.0 * countIf(size != round(size)) / count(), 2) AS fractional_pct_of_trades
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'72.61% 的成交记录为零股交易,即少于100股的成交,但这些交易仅占原始成交股数的 8.79%,这一未修正的总量将由下方成交量溯源一节予以剔除。成交规模的中位数为 21 股,该数值由一种自校验的区间探针测得:探针在19至23股的累计计数上进行探测,若未命中区间则返回0,并设有边界,使未命中时维持原有记录不变。其中 17.9 百万笔成交恰好为一股,4.73% 笔带有小数股数,这一形态与零售交易应用逐笔小额报入市场相符,同时由 做市商作为交易对手方 承接。
成交量取证:从字典中推导"匹配成交量"
把每笔成交记录的 size 字段加总,6 月 29 日的成交股数会得出 24.79 亿股。这个数字是错的,成交记录本身就能证明。每笔成交都带有交易条件代码;SIP(证券信息处理器,负责把所有交易场所的数据汇总为一条流)会发布一份字典,逐个代码说明该笔成交是否计入汇总成交量。有些消息只是对已经统计过一次的成交量进行管理性重播。本文不是硬编码一份"已知"代码清单,而是直接从字典本身推导排除集合:
| 剔除代码 | 剔除ID校验 | 代码 |
|---|---|---|
| 3 | 69 | 15 Market Center Official Close · 16 Market Center Official Open · 38 Corrected Consolidated Close (per listing market) |
每个数字背后的完整 SQL
SELECT
count() AS excluded_codes,
sum(id) AS excluded_id_checksum,
arrayStringConcat(arraySort(groupArray(concat(toString(id), ' ', name))), ' · ') AS codes
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND JSONExtractBool(update_rules, 'consolidated', 'updates_volume') = 015 Market Center Official Close · 16 Market Center Official Open · 38 Corrected Consolidated Close (per listing market)3 个交易条件在汇总数据流上带有 updates_volume = false:15 Market Center Official Close · 16 Market Center Official Open · 38 Corrected Consolidated Close (per listing market)。一个现成的教训:此前的日度复盘草稿硬编码了代码 15 和 16,也就是每本数据指南都会提到的官方开盘、收盘消息,却完全遗漏了代码 38。真相来源是字典,而不是记下来的代码列表。
刻意分成两个代码块,是因为在 156.1 万行的扫描中插入针对字典的标量子查询,会远远超出我们 30 秒的上限。因此,上面的代码块把该集合推导为一行结果,并以代码数量和一个 id 校验和(69)作为合理性约束;下面的代码块再套用推导出的字面值。一旦字典发生变化,校验和约束会阻止本文继续发布以待复核;字面值则永远不可能悄无声息地过期。
| 原始股数(十亿) | 匹配股数(十亿) | 剔除股数(十亿) | 剔除打印单 |
|---|---|---|---|
| 24.79 | 20.66 | 4.13 | 91175 |
每个数字背后的完整 SQL
SELECT
round(toFloat64(sum(size)) / 1e9, 2) AS raw_shares_bn,
round(toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]))) / 1e9, 2) AS matched_shares_bn,
round(toFloat64(sumIf(size, hasAny(conditions, [15, 16, 38]))) / 1e9, 2) AS excluded_shares_bn,
countIf(hasAny(conditions, [15, 16, 38])) AS excluded_prints
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'修正后的统计:原始成交股数为 24.79 亿股,SIP 统计口径为 20.66 亿股,其中 4.13 亿股来自 91175 笔管理性成交记录,予以排除。只有一个定义,且表述精确:"匹配成交量"指 SIP 自身的条件规则计入汇总总量的那部分成交量,不多不少。我们并不判断哪些交易在经济上更有意义,我们只是执行成交记录自身的核算规则。
解读最大的成交流水
当日规模最大的几笔成交,正是条件代码不再只是无关紧要的细节之处:
| ticker | ET 时间 | 股数(百万) | 价格 | 名义金额(百万$) | 占最大金额打印单比(%) | 条件ID |
|---|---|---|---|---|---|---|
| CAG | 16:04:53 | 61.69 | 13.98 | 862.5 | 25.4 | 8, 41 |
| SNAP | 11:46:13 | 22.6 | 4.41 | 99.7 | 2.9 | 53, 41 |
| NVDA | 16:00:00 | 17.38 | 194.97 | 3389.5 | 100 | 8, 9, 41 |
| CAG | 16:04:59 | 15.17 | 13.98 | 212 | 6.3 | 12, 2 |
| CAG | 16:04:53 | 12.87 | 13.98 | 179.9 | 5.3 | 12 |
| CAG | 16:04:53 | 12.61 | 13.98 | 176.3 | 5.2 | 12 |
| ARI | 16:03:52 | 12.54 | 10.52 | 131.9 | 3.9 | 8, 41 |
| AAPL | 16:00:00 | 11.65 | 281.74 | 3281.7 | 96.8 | 8, 9, 41 |
| GPUS | 16:02:47 | 10 | 0.1545 | 1.5 | 0 | 12, 2 |
每个数字背后的完整 SQL
SELECT
ticker,
formatDateTime(toTimeZone(sip_timestamp, 'America/New_York'), '%H:%i:%S') AS et_time,
round(toFloat64(size) / 1e6, 2) AS shares_m,
toFloat64(price) AS price,
round(toFloat64(size) * toFloat64(price) / 1e6, 1) AS notional_usd_m,
round(100 * (toFloat64(size) * toFloat64(price)) / max(toFloat64(size) * toFloat64(price)) OVER (), 1) AS pct_of_biggest_dollar_print,
arrayStringConcat(arrayMap(c -> toString(c), conditions), ', ') AS condition_id
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
AND size >= 10000000
AND NOT hasAny(conditions, [15, 16, 38])
ORDER BY size DESC
LIMIT 10前几行是示例。当日成交量最大的一笔成交为 61.69 百万股 CAG(Conagra)股票,价格为 $13.98,金额约 $862.5 百万,时间戳为 16:04:53,交易代码为 8, 41(8 收盘成交,41 交易直通豁免)。这是纽约交易所在下午4:00后公布的收盘集合竞价结果,在成交量中只计入一次。
同一批 61.69 百万股随后又以代码 15(市场中心官方收盘价)再次出现。这是一次重复上报,词典会将其剔除,属于上方已剥离的 4.13 百万的一部分。该行代码 15 的记录本就按规则从上方表格中剔除,因此这笔数据的接收情况单列一个仅一行的小面板:
(以下内容请提供,以便完成后续翻译。)
| 集合竞价打印单股数(百万) | 官方收盘重打股数(百万) | 股数差异 | 重打 ET | 重打交易所ID | CAG code15 打印单 |
|---|---|---|---|---|---|
| 61.69 | 61.69 | 0 | 16:04:53 | 10 | 6 |
每个数字背后的完整 SQL
SELECT
round(toFloat64(maxIf(size, has(conditions, 8))) / 1e6, 2) AS auction_print_shares_m,
round(toFloat64(maxIf(size, has(conditions, 15))) / 1e6, 2) AS official_close_reprint_shares_m,
round(toFloat64(maxIf(size, has(conditions, 8))) - toFloat64(maxIf(size, has(conditions, 15))), 2) AS share_difference,
formatDateTime(toTimeZone(argMaxIf(sip_timestamp, size, has(conditions, 15)), 'America/New_York'), '%H:%i:%S') AS reprint_et,
argMaxIf(exchange, size, has(conditions, 15)) AS reprint_exchange_id,
countIf(has(conditions, 15)) AS cag_code15_prints
FROM global_markets.stocks_trades
WHERE ticker = 'CAG'
AND sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'在 CAG 上,6条官方收盘信息中规模最大的一笔记录为 61.69 百万股,恰为本次竞价的 61.69 百万股(差额:0),时间戳为 16:04:53 ET,来自 exchange id 10;NYSE 位于股票目录中:上市市场正在重申其自身的竞价结果。
其余CAG行的情况完全不同。那笔15.17百万股成交(代码12, 2,12 Form T/延长交易时段,2 Average Price Trade),以及另有两笔挂在代码12下的记录,均为通过FINRA报告的拍卖后成交记录,其条件字段带 updates_volume = true。SIP 将其计为真实成交,我们匹配出的成交数量统计也同样计入。
在其他方面,代码 9 代表 Nasdaq 收盘集合竞价,NVDA 的 3389.5 百美元集合竞价是该表中金额最大的一笔成交,而 SNAP 那笔成交(53, 41)上的代码包括 53,即合格或有交易(Qualified Contingent Trade)。
时钟:十分钟主导全天
按分钟分辨率看,成交记录几乎全部集中在交易日的两端:
| ET 分钟 | 成交笔数(百万) |
|---|---|
| 15:59 | 3.98 |
| 15:58 | 2.29 |
| 09:30 | 1.81 |
| 15:57 | 1.59 |
| 15:55 | 1.36 |
| 15:56 | 1.24 |
| 15:54 | 1.01 |
| 15:50 | 1 |
| 10:15 | 0.88 |
| 15:53 | 0.8 |
每个数字背后的完整 SQL
SELECT
formatDateTime(toTimeZone(toStartOfMinute(sip_timestamp), 'America/New_York'), '%H:%i') AS et_minute,
round(count() / 1e6, 2) AS trades_m
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY et_minute
ORDER BY trades_m DESC
LIMIT 1015:59 的单分钟成交 3.98 百万笔,相当于每秒六万笔以上。其余前十名是否集中在开盘与收盘,仅需看一行数据即可确认:
| 开盘收盘区间外条目 | 开盘收盘区间内条目 | 区间外条目分钟 | 区间外条目成交笔数(百万) |
|---|---|---|---|
| 1 | 9 | 10:15 | 0.88 |
每个数字背后的完整 SQL
SELECT
countIf(NOT (et_minute BETWEEN '09:30' AND '09:39' OR et_minute BETWEEN '15:50' AND '16:00')) AS entries_outside_open_close,
countIf(et_minute BETWEEN '09:30' AND '09:39' OR et_minute BETWEEN '15:50' AND '16:00') AS entries_in_open_close,
maxIf(et_minute, NOT (et_minute BETWEEN '09:30' AND '09:39' OR et_minute BETWEEN '15:50' AND '16:00')) AS outside_entry_minute,
maxIf(trades_m, NOT (et_minute BETWEEN '09:30' AND '09:39' OR et_minute BETWEEN '15:50' AND '16:00')) AS outside_entry_trades_m
FROM (
SELECT
formatDateTime(toTimeZone(toStartOfMinute(sip_timestamp), 'America/New_York'), '%H:%i') AS et_minute,
round(count() / 1e6, 2) AS trades_m
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY et_minute
ORDER BY trades_m DESC
LIMIT 10
)9 分钟落在开盘头十分钟或收盘前最后十分钟之内。唯一例外是 10:15 的盘中时间,其成交记录达 0.88 百万笔,确属上午盘中的异动。仅凭本数据无法判断其成因,我们不臆造原因。下文会再次出现这一时间点。
报价流:五亿次更新
全美最优买卖报价(National Best Bid and Offer),即所有交易所中最佳的买入价与卖出价,每当其中任一侧发生变化便重新发布。
其在6月29日被更新 505.38 million 次,而当日成交为 156.1 million 笔。
| 更新次数(百万) | QQQ 更新次数(百万) | NVDA 更新次数(百万) | QQQ 减 NVDA 更新次数(百万) | NVDA 减第二名差距(百万) |
|---|---|---|---|---|
| 505.38 | 5.23 | 1.8 | 3.43 | 0.67 |
每个数字背后的完整 SQL
WITH
(
SELECT (round(countIf(ticker = 'QQQ') / 1e6, 2), round(countIf(ticker = 'NVDA') / 1e6, 2),
round(countIf(ticker = 'AAPL') / 1e6, 2), round(countIf(ticker = 'TSLA') / 1e6, 2))
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('QQQ', 'NVDA', 'AAPL', 'TSLA')
AND sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
) AS pinned
SELECT
round(count() / 1e6, 2) AS updates_m,
pinned.1 AS qqq_updates_m,
pinned.2 AS nvda_updates_m,
round(pinned.1 - pinned.2, 2) AS qqq_minus_nvda_updates_m,
round(pinned.2 - greatest(pinned.3, pinned.4), 2) AS nvda_minus_next_single_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'报价量由指数类产品主导:仅 QQQ 一项就有 5.23 million 次更新,超过我们核查中报价最活跃的单只股票 NVDA(1.8 million 次)——比排在其后的第二名单只股票高出 0.67 million 次。对每一只上市证券逐一统计报价量,超出30秒的数据上限,因此下方榜单是一份受核查的样本集,并非完整排名:
| ticker | 更新次数(百万) |
|---|---|
| QQQ | 5.23 |
| SPY | 5.07 |
| TQQQ | 3.91 |
| IWM | 3.4 |
| SQQQ | 3.29 |
| NVDA | 1.8 |
| AAPL | 1.13 |
| TSLA | 0.59 |
每个数字背后的完整 SQL
SELECT ticker, round(count() / 1e6, 2) AS updates_m
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('QQQ', 'SPY', 'TQQQ', 'IWM', 'SQQQ', 'NVDA', 'AAPL', 'TSLA')
AND sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY ticker
ORDER BY updates_m DESCQQQ 以 5.23 million 次更新居该核查样本之首;榜单顶端是指数基金及其杠杆化同类产品,而非家喻户晓的个股。
显微镜下的SPY:纳秒级行情记录,以及价差的两种口径
| SPY 更新数(m) | 最繁忙秒(ET) | 10:15 内最繁忙秒 | 最繁忙秒更新数 | 更新间最小间隔(ns) | 间隔中位数(us) | 相同时间戳对 | 时间加权平均价差(美分) | 每次更新平均价差(美分) | 每次更新溢价(美分) | 交叉更新数 | 买价或卖价为零的更新数 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.98 | 10:15:43 | 1 | 1461 | 1375 | 245.6 | 75138 | 2.34 | 2.72 | 0.38 | 1544 | 0 |
每个数字背后的完整 SQL
WITH
(
SELECT (formatDateTime(toTimeZone(toStartOfSecond(sip_timestamp), 'America/New_York'), '%H:%i:%S'), count())
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY' AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 20:00:00'
GROUP BY toStartOfSecond(sip_timestamp)
ORDER BY count() DESC, toStartOfSecond(sip_timestamp) ASC
LIMIT 1
) AS busiest_sec,
ordered AS (
SELECT
toFloat64(ask_price - bid_price) AS spread,
bid_price,
ask_price,
toFloat64(sip_timestamp - lagInFrame(sip_timestamp) OVER (ORDER BY sip_timestamp, sequence_number)) AS gap_s,
greatest(toFloat64(least(leadInFrame(sip_timestamp, 1, toDateTime64('2026-06-29 20:00:00', 9)) OVER (ORDER BY sip_timestamp, sequence_number ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING), toDateTime64('2026-06-29 20:00:00', 9)) - sip_timestamp), 0) AS dwell_s,
rowNumberInAllBlocks() AS rn
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY' AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 20:00:00'
)
SELECT
round(count() / 1e6, 2) AS spy_updates_m,
busiest_sec.1 AS busiest_second_et,
toUInt8(startsWith(busiest_sec.1, '10:15')) AS busiest_second_in_1015,
busiest_sec.2 AS busiest_second_updates,
round(minIf(gap_s, rn > 0 AND gap_s > 0) * 1e9) AS min_gap_between_updates_ns,
round(quantileExactIf(0.5)(gap_s, rn > 0) * 1e6, 1) AS median_gap_us,
countIf(rn > 0 AND gap_s = 0) AS identical_timestamp_pairs,
round(sumIf(spread * dwell_s, bid_price > 0 AND ask_price >= bid_price) / sumIf(dwell_s, bid_price > 0 AND ask_price >= bid_price) * 100, 2) AS time_weighted_avg_spread_cents,
round(avgIf(spread, bid_price > 0 AND ask_price >= bid_price) * 100, 2) AS per_update_avg_spread_cents,
round((avgIf(spread, bid_price > 0 AND ask_price >= bid_price) - sumIf(spread * dwell_s, bid_price > 0 AND ask_price >= bid_price) / sumIf(dwell_s, bid_price > 0 AND ask_price >= bid_price)) * 100, 2) AS per_update_premium_cents,
countIf(bid_price > 0 AND ask_price > 0 AND ask_price < bid_price) AS crossed_updates,
countIf(bid_price <= 0 OR ask_price <= 0) AS zero_bid_or_ask_updates
FROM ordered仅在常规交易时段,SPY的报价就变动了 3.98 百万次。其最繁忙的一秒是 10:15:43 ET(美东时间),落在上文标记的那个 10:15 分钟区间之内,其中包含 1461 次报价更新。相邻两次更新之间的最短间隔为 1375 纳秒,中位数为 245.6 微秒,而 75138 组连续报价的纳秒时间戳完全相同。也就是说,即便以纳秒分辨率衡量,也无法完全还原现代行情的时间先后。
这些纳秒数据的价值在于测量买卖价差。按每次更新等权计数,SPY的平均价差为 2.72 美分;按每条报价的存续时长加权,则为 2.34 美分。每次更新口径在数值上机械地高出 0.38 美分:报价更新恰好集中在价差扩大且快速变动的时点,而一个挂单的存续是以实际时间计量的。因此,每看到一项价差统计,都应先问它用的是哪种时钟。
统计口径是公开披露的,而非隐去不谈:1544 次常规时段更新出现了瞬时的买卖价倒挂(卖一价低于买一价,这是不同交易场所报价交错排列所致),0 次则出现零买价或零卖价。上述价差统计剔除了这两类更新,并对被剔除的部分如实计数。
价差有时间窗口
将 SPY 的报价价差按半小时分桶,就把市场微观结构转化成了任何交易员都能使用的曲线:
| ET 时间 | 价差中位数(美分) | 报价更新数 |
|---|---|---|
| 04:00 | 8 | 90477 |
| 04:30 | 7 | 94194 |
| 05:00 | 6 | 85391 |
| 05:30 | 6 | 84732 |
| 06:00 | 6 | 80634 |
| 06:30 | 6 | 67515 |
| 07:00 | 6 | 78384 |
| 07:30 | 7 | 90251 |
| 08:00 | 6 | 82373 |
| 08:30 | 6 | 96858 |
| 09:00 | 5 | 75032 |
| 09:30 | 3 | 714684 |
| 10:00 | 3 | 828786 |
| 10:30 | 3 | 598922 |
| 11:00 | 3 | 415660 |
| 11:30 | 3 | 254713 |
| 12:00 | 3 | 194340 |
| 12:30 | 2 | 159115 |
| 13:00 | 2 | 150132 |
| 13:30 | 2 | 106726 |
每个数字背后的完整 SQL
SELECT
formatDateTime(toTimeZone(toStartOfInterval(sip_timestamp, INTERVAL 30 MINUTE), 'America/New_York'), '%H:%i') AS et_time,
round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price), bid_price > 0 AND ask_price >= bid_price) * 100, 1) AS median_spread_cents,
count() AS quote_updates
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY' AND sip_timestamp >= '2026-06-29 08:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY et_time
ORDER BY et_time在04:00 ET盘前时段,中位数为8美分;在09:30开盘时段为3美分;到14:00时为2美分。这意味着在盘前开盘时点交易同一只股票,成本约为午后早段订单的四倍。价差并非恒定不变,而是一张随时间变化的时刻表。
法证展品:停在 S 的那份文件
每个日度供应商文件在发布任何数字之前,都要先做完整性校验:统计标的数量、检查字母顺序的跨度、与前后交易日对比。6 月 29 日的 FINRA 场外做空成交量文件,正是做这项校验的理由:
| date | 代码 | 首个代码 | 最后代码 | TSLA 行数 | 做空占已报告比例(%) |
|---|---|---|---|---|---|
| 2026-06-26 | 15052 | A | ZYME | 1 | 46.89 |
| 2026-06-29 | 5489 | A | SSUS | 0 | 45.85 |
| 2026-06-30 | 15362 | A | ZYME | 1 | 48.82 |
每个数字背后的完整 SQL
SELECT
date,
uniqExact(ticker) AS tickers,
min(ticker) AS first_ticker,
max(ticker) AS last_ticker,
countIf(ticker = 'TSLA') AS tsla_rows,
round(100 * sum(short_volume) / sum(total_volume), 2) AS short_pct_of_reported
FROM global_markets.stocks_short_volume
WHERE date BETWEEN '2026-06-26' AND '2026-06-30'
GROUP BY date
ORDER BY date6 月 26 日的文件覆盖 15052 个标的,从 A 到 ZYME。6 月 29 日的文件覆盖 5489 个,从 A 到 SSUS,也就是说它在 S 开头的标的中间就中断了。此点之后按字母顺序排列的所有标的,包括 TSLA,6 月 29 日的记录为 0 行,而 6 月 26 日为 1 行,全部缺失;到 6 月 30 日,文件恢复到 15362 个标的。所谓完整性校验,不过是这样一张每日一行的核对单:一边是发布一个统计量,一边是发布一份残缺的产物。
在做出上述披露之后,且只有在披露之后,比例才成立:6 月 29 日的标记做空成交量占报告的场外成交量的 45.85%,6 月 26 日为 46.89%,6 月 30 日为 48.82%。6 月 29 日的数字只涵盖 A 至 S 这一段,因此应视为部分读数。接近一半的空头占比,是相邻交易日常见的水平;而单日做空成交量并不等于 做空兴趣。
数据说明
完整数据说明
- 下午5点至6点的报价低迷期。 SPY的报价流在17:00(东部时间)这半小时内几乎停滞(仅233次更新),到18:00(40608)重新活跃;这是跨标的的行情接口与交易时段的固有特征,并非数据缺失。
- 碎股交易普遍存在。 4.73%的成交记录带有非整数股数;成交量必须按小数累加。
- 代码字典在不同类型之间复用ID。 Id 15 既是成交条件(Market Center Official Close,市场中心官方收盘),又是报价条件(Closed,已收盘);此处的每个字典查询都带有 asset_class = 'stocks' AND type = 'sale_condition' 的过滤条件。仅凭ID做裸查询会对代码作出错误标注。
- 报价质量的排除项就地统计。 盘口交叉以及零买价或零卖价的笔数统计位于上方的SPY微观结构面板中;没有任何价差统计隐藏其剔除数量。
- 全市场行情扫描仅为批处理面板。 此处的全市场区块在冷缓存下每块耗时最多约30秒(超时的区块会重试一次,缓存预热后的运行可通过上限);它们仅在撰写时通过受控的只读通道执行一次,从不面向读者实时运行,所存储的结果即为记录。
方法说明
- 时间戳以 UTC 存储,并使用原始 UTC 边界进行筛选(6 月 29 日的常规交易时段为 UTC 时间 13:30 至 20:00);toTimeZone 仅出现在 SELECT 列表中。
- 交易时段类型依据节假日日历及实际观测到的 390 根常规时段 K 线窗口进行核验,绝不预设。
- 按 SIP 计数(撮合)的成交量,指 SIP 自身的成交条件规则计入合并总量的那部分成交量;排除项集合依据数据字典推导,受校验和约束,绝不硬编码。
- 每次更新的价差统计对每个 NBBO 更新等权加权;时间加权统计则按每笔报价存续的时长加权。两者均披露各自的排除项。
- 十进制的价格与数量列以原生精度求和,在进行任何比值或价格乘数量的运算之前,先转换为 64 位浮点数。
- Tick 表保留完整历史,不做滚动过期;无论如何,这些已存储且带版本的结果才是持久记录。数据仓库状态截至 2026 年 7 月 3 日。
上方每个面板都是一个存储对象,图表、表格与 SQL 三者合一。打开其中任意一个,复制查询,即可在 Strasmore 终端上继续深入。