Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor · · Updated 2026-10-06

微观结构深析: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/29SPY 常规时段蜡烛成交笔数(百万)零股占成交笔数比(%)零股占成交股数比(%)打印单股数中位数单股交易(百万)碎股占成交笔数比(%)
0390156.172.618.792117.94.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校验代码
36915 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') = 0
自己运行这个查询

15 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)作为合理性约束;下面的代码块再套用推导出的字面值。一旦字典发生变化,校验和约束会阻止本文继续发布以待复核;字面值则永远不可能悄无声息地过期。

查询量额对比:原始量 vs SIP 统计量,应用推导出的排除集
原始股数(十亿)匹配股数(十亿)剔除股数(十亿)剔除打印单
24.7920.664.1391175
每个数字背后的完整 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 自身的条件规则计入汇总总量的那部分成交量,不多不少。我们并不判断哪些交易在经济上更有意义,我们只是执行成交记录自身的核算规则。

解读最大的成交流水

当日规模最大的几笔成交,正是条件代码不再只是无关紧要的细节之处:

查询6月29日最大单笔成交(已剔除字典排除代码)
tickerET 时间股数(百万)价格名义金额(百万$)占最大金额打印单比(%)条件ID
CAG16:04:5361.6913.98862.525.48, 41
SNAP11:46:1322.64.4199.72.953, 41
NVDA16:00:0017.38194.973389.51008, 9, 41
CAG16:04:5915.1713.982126.312, 2
CAG16:04:5312.8713.98179.95.312
CAG16:04:5312.6113.98176.35.212
ARI16:03:5212.5410.52131.93.98, 41
AAPL16:00:0011.65281.743281.796.88, 9, 41
GPUS16:02:47100.15451.5012, 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 的记录本就按规则从上方表格中剔除,因此这笔数据的接收情况单列一个仅一行的小面板:

(以下内容请提供,以便完成后续翻译。)

查询CAG 收盘竞价与 code-15 重报并列
集合竞价打印单股数(百万)官方收盘重打股数(百万)股数差异重打 ET重打交易所IDCAG code15 打印单
61.6961.69016:04:53106
每个数字背后的完整 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:593.98
15:582.29
09:301.81
15:571.59
15:551.36
15:561.24
15:541.01
15:501
10:150.88
15:530.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 10
自己运行这个查询

15:59 的单分钟成交 3.98 百万笔,相当于每秒六万笔以上。其余前十名是否集中在开盘与收盘,仅需看一行数据即可确认:

查询前十最繁忙分钟中落在开盘与收盘之外的数量
开盘收盘区间外条目开盘收盘区间内条目区间外条目分钟区间外条目成交笔数(百万)
1910:150.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 笔。

查询NBBO 全流单行:QQQ 与 NVDA 按名称标注
更新次数(百万)QQQ 更新次数(百万)NVDA 更新次数(百万)QQQ 减 NVDA 更新次数(百万)NVDA 减第二名差距(百万)
505.385.231.83.430.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秒的数据上限,因此下方榜单是一份受核查的样本集,并非完整排名:

查询八只报价密集标的的 NBBO 报价更新(百万)
ticker更新次数(百万)
QQQ5.23
SPY5.07
TQQQ3.91
IWM3.4
SQQQ3.29
NVDA1.8
AAPL1.13
TSLA0.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 DESC
自己运行这个查询

QQQ 以 5.23 million 次更新居该核查样本之首;榜单顶端是指数基金及其杠杆化同类产品,而非家喻户晓的个股。

显微镜下的SPY:纳秒级行情记录,以及价差的两种口径

查询SPY 显微镜:纳秒级间隔、双向价差、报价质量
SPY 更新数(m)最繁忙秒(ET)10:15 内最繁忙秒最繁忙秒更新数更新间最小间隔(ns)间隔中位数(us)相同时间戳对时间加权平均价差(美分)每次更新平均价差(美分)每次更新溢价(美分)交叉更新数买价或卖价为零的更新数
3.9810:15:43114611375245.6751382.342.720.3815440
每个数字背后的完整 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 的报价价差按半小时分桶,就把市场微观结构转化成了任何交易员都能使用的曲线:

查询SPY 报价价差中位数按半小时,4:00 am–8:00 pm ET
32 rows (showing 20)
ET 时间价差中位数(美分)报价更新数
04:00890477
04:30794194
05:00685391
05:30684732
06:00680634
06:30667515
07:00678384
07:30790251
08:00682373
08:30696858
09:00575032
09:303714684
10:003828786
10:303598922
11:003415660
11:303254713
12:003194340
12:302159115
13:002150132
13:302106726
每个数字背后的完整 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 场外做空成交量文件,正是做这项校验的理由:

查询完整性探针:FINRA 空头量文件覆盖,6月26-30日
date代码首个代码最后代码TSLA 行数做空占已报告比例(%)
2026-06-2615052AZYME146.89
2026-06-295489ASSUS045.85
2026-06-3015362AZYME148.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 date
自己运行这个查询

6 月 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 终端上继续深入。

#microstructure#deepdive#spy#nbbo#condition codes