Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor · · Updated 2026-08-08

2026年6月29日市場微結構深度解析

解析2026年6月29日的完整成交與報價逐筆資料、字典衍生的成交量更正、奈秒級收據,以及在字母 S 處截斷的 FINRA 檔案。

這是 2026年6月29日市場回顧 的底層解析:呈現分鐘 K 線下方的原始資料流,包括一個普通週一交易時段中的 156.1 百萬筆個別成交與 505.38 百萬筆 NBBO 報價更新。所有數字均來自儲存的查詢結果(展開任一面板即可查看完整 SQL)。當天發現的兩項資料問題也會完整說明:一項是行情資料本身的代碼字典要求進行的成交量更正,另一項則是供應商檔案在字母 S 處悄然停止。

逐筆交易紀錄

交易時段檢查必須先行,不能想當然耳:交易所休市日曆在2026年6月29日列有 0 筆資料,而 SPY 在正常交易時段內確實列印了 390 根1分鐘K線,涵蓋完整交易時段,即紐約時間上午9:30至下午4:00。整個延長交易日中,綜合交易紀錄共記錄 156.1 百萬筆個別交易。

查詢單日交易:時段檢查與每筆成交量
6月29日假日列SPY正常交易時段柱數交易筆數(百萬)零股交易占比(%)零股股數占比(%)成交中位數股數一股交易筆數(百萬)碎股交易占比(%)
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 百萬筆交易恰好為1股,另有 4.73% 筆採用零碎股數,這種模式與零售交易 App 將訂單一次切成一小筆一小筆送進交易紀錄的情況一致,由造市商承接另一側交易。

成交量鑑識:從字典推導「matched volume」

將每筆成交紀錄的 size 欄位加總後,6月29日顯示成交了 24.79 billion 股。這個數字是錯的,成交明細本身就說明了這一點。每筆成交紀錄都帶有 condition codes;SIP(Securities Information Processor)會將所有交易場所的資料整合為單一串流,並發布一份字典,逐一說明各代碼下的成交紀錄是否會更新整合成交量。有些訊息只是將已計入一次的成交量重新廣播。本文不硬編碼一份「已知」代碼清單,而是直接從字典推導排除集合:

查詢排除集合:由交易資料自身的代碼字典推導(單列)
排除代碼排除識別碼校驗和代碼
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
自己執行這個查詢

在整合資料流中,3 個 sale conditions 的 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 million 筆資料的掃描中,若在字典上使用 scalar subquery,執行時間會超過我們設定的30秒上限。因此,上方區塊先將集合推導為單一列,並以代碼數量與 id checksum(69)進行合理性檢查;下方區塊再套用推導出的常值。若字典日後發生變動,checksum 的限制會讓本文進入複核流程;這些常值不可能在無提示的情況下悄悄過時。

查詢原始成交量與 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 billion 股,SIP 計入的成交量為 20.66 billion 股,另有 4.13 billion 股分布於 91175 筆行政性成交紀錄中而遭排除。明確定義如下:「matched volume」是指依 SIP 自身的 condition rules 計入整合成交總量的成交量,僅此而已。我們不是在判斷哪些交易具有經濟意義,而是依照成交明細自身的核算規則處理。

最大筆成交的解讀

當日最大筆成交最能說明成交條件代碼並非無關緊要的細節:

查詢6月29日最大單筆成交(剔除字典排除代碼)
ticker美東時間股數(百萬)價格名目金額(美元百萬)占最大美元成交金額(%)條件識別碼
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 ET,條件代碼為 8, 41(8 Closing Prints、41 Trade Thru Exempt)。這是 NYSE 收盤競價的結果,於美東時間下午4點後公布。該筆成交只計入成交量一次。相同的 61.69 百萬股隨後又以代碼15「Market Center Official Close」重新出現:這是字典排除的重報資料,也是前文剔除的 4.13 十億股成交量的一部分。上述表格刻意剔除代碼15的資料列,因此這筆成交另以簡潔的單列面板呈現:

查詢交易憑證:CAG 收盤競價與代碼15重新申報並列
競價成交股數(百萬)官方收盤重發股數(百萬)股數差異重發美東時間重發交易所識別碼CAG代碼15成交筆數
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,交易所代碼為 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。

時鐘:十分鐘主導全天交易

以分鐘為單位觀察,成交明細幾乎全都集中在交易時段的兩端:

查詢交易資料中最繁忙的10分鐘(百萬筆成交)
美東時間分鐘交易筆數(百萬)
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 ET 分鐘內成交了 3.98 百萬筆交易,每秒超過六萬筆。其餘前十大時點是否同樣集中在開盤與收盤附近,可由一列資料直接衡量:

查詢最繁忙的10分鐘中,有多少分鐘落在開盤與收盤時段之外
開收盤外資料筆數開收盤內資料筆數外部資料分鐘外部資料交易筆數(百萬)
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 ET,當時出現 0.88 百萬筆成交,確實屬於上午中段的異常峰值;資料本身無法說明原因,我們不會自行臆測。下文還會回到同一個時間點。

報價串流:五億次更新

全國最佳買賣報價(National Best Bid and Offer,NBBO)涵蓋各交易所的最佳買價與賣價。只要任一價格變動,就會重新發布。6月29日共更新 505.38 百萬次,相較之下,成交筆數為 156.1 百萬筆。

查詢完整 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 百萬次更新;NVDA 則為 1.8 百萬次,是我們檢視的個股中報價更新次數最多者,並領先下一檔個股 0.67 百萬次。由於完整統計每一檔掛牌標的的報價不符合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 百萬次更新居首;排行榜前段由指數基金及其槓桿型產品占據,而非一般投資人熟悉的個股。

SPY 放大檢視:奈秒級成交紀錄,以及兩種計算方式的買賣價差

查詢SPY 顯微檢視:奈秒級間隔、兩種方式呈現的價差與報價品質
SPY 更新數(百萬)最繁忙秒(ET)10:15內最繁忙秒最繁忙秒更新數更新間最小間隔(奈秒)間隔中位數(微秒)相同時間戳記配對數時間加權平均價差(美分)每次更新平均價差(美分)每次更新溢價(美分)交叉報價更新數買價或賣價為零的更新數
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 次更新的買價或賣價為零;價差統計排除這兩類資料,並明確計算排除的筆數。

The spread has a clock

Bucketing SPY's quoted spread by half hour turns the microstructure into a curve any trader can use:

查詢SPY 每半小時中位數報價價差,ET凌晨4:00至晚上8:00
32 rows (showing 20)
美東時間價差中位數(美分)報價更新數
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
自己執行這個查詢

A median of 8 cents in the 04:00 ET premarket bucket, 3 cents in the 09:30 opening bucket, and 2 cents by 14:00, trading the same share at the premarket open costs roughly four times the spread of an early-afternoon order. The spread is not a constant; it is a schedule.

取證展品:在 S 開頭處中止的檔案

我們每天發布任何數據前,都會先對供應商檔案進行完整性檢查:計算 ticker 數量、檢查字母排序涵蓋範圍,並與相鄰日期比較。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 個 ticker,範圍從 A 到 ZYME。6月29日的檔案涵蓋 5489 個 ticker,範圍從 A 到 SSUS;檔案在 S 開頭的名稱中途便停止。此後依字母排序的所有 ticker,包括 TSLA,在6月29日僅有 0 列,相較之下6月26日有 1 列,因而全部遺漏;到了6月30日,檔案恢復為 15362 個 ticker。完整性檢查並不複雜,就像每天每列一筆的收據;這正是發布統計數字與發布殘缺檔案之間的差別。

在納入上述揭露後,也只有在這個前提下,才能看這項比率:6月29日,標示為放空的成交量占申報場外交易成交量的 45.85%;6月26日為 46.89%,6月30日為 48.82%。6月29日的數字僅涵蓋 A 至 S 的部分,因此應視為不完整讀數。鄰近各交易日顯示,接近一半的放空占比才是常態水準;而每日放空成交量並不等於 放空未平倉量。

資料說明

完整資料說明
  • 下午5點至6點的報價低谷。 SPY 的報價串流在 17:00 ET 半小時內幾乎停止(233 次更新),並在 18:00 恢復(40608 次更新)。這是跨 ticker 的資料串流與交易時段模式,並非資料遺失。
  • 零股無處不在。 4.73% 的成交筆數包含非整數股數;成交量必須以小數相加。
  • 代碼字典會在不同類型間重複使用 id。 Id 15 同時代表成交條件(Market Center Official Close)與報價條件(Closed);本文每次查詢字典時,都會篩選 asset_class = 'stocks' AND type = 'sale_condition'。若僅依 id 直接查詢,便會誤標代碼。
  • 報價品質排除項目會直接計入。 交叉報價與買方或賣方報價為零的筆數,均列在上方的 SPY microscope 面板中;任何 spread 統計都沒有隱藏這些排除項目。
  • 完整市場逐筆資料掃描僅以批次面板執行。 這裡的全市場區塊在冷快取下,每個最多約需30秒(逾時的區塊會重試一次;快取暖機後的執行可解除上限)。這些掃描僅在撰寫時透過受控的唯讀路徑執行一次,不會在讀者瀏覽時即時執行;儲存的結果即為紀錄。

方法論

  • 時間戳記以 UTC 儲存,並使用原始 UTC 邊界篩選(6月29日正常交易時段為 13:30 至 20:00 UTC);toTimeZone 僅出現在 SELECT 清單中。
  • 交易時段類型會與假日行事曆及實際觀察到的 390 根正常交易時段 bar 進行核對,不會逕行假設。
  • 「SIP 計入(matched)成交量」是 SIP 依自身條件規則計入合併總量的成交量;排除集合是根據字典推導,受 checksum 邊界約束,從未硬編碼。
  • 每次更新的 spread 統計對每次 NBBO 更新給予相同權重;時間加權統計則依每筆報價維持的時間長度加權。兩者均揭露排除項目。
  • Decimal 價格與數量欄位以原生格式加總,並在任何比率或價格乘以數量的算術運算前轉換為 64 位元浮點數。
  • Tick 表保留完整歷史資料,不採用滾動式到期;無論如何,這些已儲存且具版本控管的結果都是持久紀錄。資料倉儲狀態截至2026年7月3日。

上方每個面板都是一個整合的儲存物件、圖表、表格與 SQL。開啟任一面板、複製查詢,並在 Strasmore terminal 上進一步分析。

#microstructure#deepdive#spy#nbbo#condition codes