碎股交易如何影響成交量數據
碎股交易以整股形式進入成交紀錄,2026年2月23日的規則變更導致權益類成交量序列出現斷層。本文解析碎股如何影響數據準確性與歷史序列的連續性。
碎股(fractional shares)會以整股成交(whole-share prints)的形式進入綜合磁帶(consolidated tape),而在 2026年2月23日之前,這種轉換同時以兩種方向進行。小於一股的交易會被無條件進位至一股;大於一股的交易則會截斷小數部分。任何跨越該日期的權益類成交量序列都會出現斷層;在碎股交易頻繁的標的中,舊數據在兩個方向上同時存在誤差。
碎股訂單如何成為成交紀錄?
假設您以 180 美元的報價買入 50 美元的股票,您訂購的數量為 0.2778 股。沒有任何交易所的訂單簿會接受此數量。交易所僅撮合整股,且決定全國最佳買賣報價(NBBO,即所有人可獲得的最高買價與最低賣價)的報價,僅計算 100 股的整手單位(round lots)。我們的 零股報價 頁面涵蓋了第二項規則。
經紀商會在自家帳簿上填補此缺口。經紀商會將客戶間的碎股需求進行淨額結算,將整股部分作為單一訂單發送至市場,並將碎股部分以自營交易(principal fills)的形式分派回客戶帳戶,這意味著經紀商本身就是您碎股交易的對手方。進入公開磁帶的成交紀錄僅包含經紀商發送的整股數量。您持有的 0.2778 股僅存在於您的對帳單中,並未計入當日的公開成交量。
請記住第一個事實:大多數碎股活動從未在公開成交量中顯現。公開可見的是代表這些碎股的聚合整股訂單,以及極少數直接發送至磁帶的碎股報告。
2026年2月23日發生了什麼變化
數量欄位本身的格式發生了改變。交易報告現在可以攜帶小數點後六位的份額數量,並採用截斷而非進位的方式,因此 0.142857 股的報告可以原樣發布。在此日期之前,所有報告的數量必須為整數,且進位規則並不對稱。
- 小於一股時,數量被無條件進位至 1。這導致了從未實際發生的成交量出現。
- 等於或大於一股時,小數部分被截斷。例如 2.7 股的報告會被發布為 2 股。
這兩種扭曲同時發生在同一個欄位中,且方向相反。交易筆數繼承了第一種情況:一筆被進位至一股的碎股報告,在當日的交易統計中被視為一筆整股成交。若將這些數據在多年歷史中針對碎股頻繁的標的進行累加,發布的序列可能偏高、偏低,或偶然正確,且序列本身無法辨識誤差來源。
小額成交筆數的分佈最能體現此變化。下方的面板統計了 AAPL 在 2026年1月初與 2026年7月初兩個五個交易日的區間內,所有小於 26 股的成交紀錄。零股列包含了所有小於一股的成交紀錄。
每個數據背後的精確 SQL 語法
SELECT
scaffold.shares AS shares,
toUInt64(ifNull(t.jan_prints, 0)) AS prints_early_january,
toUInt64(ifNull(t.jul_prints, 0)) AS prints_early_july
FROM
(
SELECT toUInt32(arrayJoin(range(0, 26))) AS shares
) AS scaffold
LEFT JOIN
(
SELECT
toUInt32(floor(toFloat64(size))) AS shares,
countIf(sip_timestamp < '2026-02-01 00:00:00') AS jan_prints,
countIf(sip_timestamp >= '2026-07-01 00:00:00') AS jul_prints
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND ((sip_timestamp >= '2026-01-05 00:00:00' AND sip_timestamp < '2026-01-10 00:00:00')
OR (sip_timestamp >= '2026-07-06 00:00:00' AND sip_timestamp < '2026-07-11 00:00:00'))
AND toFloat64(size) < 26
GROUP BY shares
) AS t ON t.shares = scaffold.shares
ORDER BY shares在 1 月的區間內,一股的桶狀統計(bucket)包含 1360015 筆成交,7 月則為 331200 筆,對比 7 月兩股的 132674 筆成交。小於一股的列在 1 月包含 2 筆,7 月為 1191620 筆。在 1 月區間內報告的所有小於一股的交易,都被向上歸類為完整的一股。
碎股與零股(odd lots)的區別
這兩者經常被混淆,但它們屬於不同的排除項目。零股是指小於 100 股的整股訂單。整手(round lot)為 100 股,是構成受保護報價的單位。零股會顯示在公開磁帶上,擁有自己的 交易條件代碼,並計入成交量。它們只是不會更新全國最佳買賣報價。碎股則是另一個概念:小於一股。
每一筆碎股成交也屬於零股。但幾乎沒有零股是碎股。下方的面板按 2026年7月三個交易日內零股佔成交筆數的比例,對六個熱門標的進行了排序。
每個數據背後的精確 SQL 語法
SELECT
ticker,
round(100 * countIf(toFloat64(size) >= 1 AND toFloat64(size) < 100) / count(), 1) AS odd_lot_pct,
round(100 * countIf(toFloat64(size) >= 100) / count(), 1) AS round_lot_pct,
countIf(toFloat64(size) < 1) AS sub_one_share_prints
FROM global_markets.stocks_trades
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'KO', 'PG', 'SPY')
AND sip_timestamp >= '2026-07-08 00:00:00'
AND sip_timestamp < '2026-07-11 00:00:00'
GROUP BY ticker
ORDER BY odd_lot_pct DESC按零股佔比排序,清單從 SPY 的 74.1% 比例開始,一路降至 KO 的 39%。最後一欄統計了小於一股的成交筆數:在相同的三個交易日內,211801 的比例屬於 SPY。零股是常態,碎股則是附著其上的微量數據。
為什麼成交量欄位突然變成了小數
三十年來,份額數量一直為整數,所有下游系統都已適應此規則。小數點後六位悄然打破了這一假設:若讀取器將該欄位解析為整數,則會拒絕該行數據或將 0.5 向下取整為 0,而定義為整數的欄位也會儲存同樣的結果。若您自行保存交易數據,數量欄位需要使用至少具備六位小數的資料型態,且基於此計算的總和也需要相同的精度。
評估成交量序列最簡單的健康檢查是平均成交規模:成交股數除以當日交易筆數。該指標在短時間內於單一標的中相對穩定,這使得突發性的變動容易被察覺。以下是 AAPL 在變更前後兩週的數據。
每個數據背後的精確 SQL 語法
SELECT
toString(date) AS session_date,
formatDateTime(date, '%b %e') AS session_label,
round(sum(toFloat64(volume)) / sum(transactions), 1) AS shares_per_print,
round(sum(toFloat64(volume)) / 1000000, 1) AS volume_millions
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
AND date >= '2026-02-09'
AND date <= '2026-03-06'
GROUP BY date
HAVING sum(transactions) > 0
ORDER BY dateAAPL 在 Feb 9 的平均每筆成交為 61.3 股,成交量為 44.6 百萬股;在 Mar 6 的平均每筆成交為 66.2 股。這種幅度的日常波動屬於常態。2月23日改變的是數量的書寫方式,而非實際的股票交易量。
當序列跨越斷層時,哪些數據會變動
任何以成交量標準化的指標都會繼承此斷層。以下四項值得檢查:
- 相對成交量(Relative volume):今日成交量與先前區間平均值的對比。當回溯期跨越 2026年2月23日,比率的兩側是基於不同規則計算的。我們的 相對成交量 頁面提供了計算公式。
- VWAP(成交量加權平均價):根據每筆成交的數量進行加權。被進位的碎股成交紀錄承載了超過其實際規模的權重。參見 VWAP 如何計算。
- 分鐘與日線圖:由區間內的成交規模加總而成。OHLCV 柱狀圖如何構建 說明了此聚合過程。
- 週轉率與流動性指標:透過多年歷史數據,將價格變動除以美元成交量。
請將 2026年2月23日視為價格歷史中的公司行動:這是一個已標記的斷層,而非需要平滑處理的故障。價格歷史在不同層面上也存在同樣的問題,詳見我們的 除權息調整價格歷史 頁面。切勿在未標記邊界的情況下,將變更前後的成交量放在同一軸線上。
從更長的時間跨度觀察平均成交規模,更能說明最後一點。它會隨著每個標的的市場結構,按各自的節奏漂移。
每個數據背後的精確 SQL 語法
SELECT
toString(m) AS month,
formatDateTime(m, '%b %Y') AS month_label,
round(sumIf(vol, sym = 'AAPL') / sumIf(trades, sym = 'AAPL'), 1) AS aapl_shares_per_print,
round(sumIf(vol, sym = 'MSFT') / sumIf(trades, sym = 'MSFT'), 1) AS msft_shares_per_print,
round(sumIf(vol, sym = 'KO') / sumIf(trades, sym = 'KO'), 1) AS ko_shares_per_print
FROM
(
SELECT
toStartOfMonth(date) AS m,
ticker AS sym,
toFloat64(volume) AS vol,
transactions AS trades
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'KO')
AND date >= '2025-09-01'
AND date < '2026-08-01'
)
GROUP BY m
ORDER BY mAAPL 在 Sep 2025 的平均每筆成交為 91.4 股,在 Jul 2026 為 54.9 股,而 KO 在該結束月份為 61.8 股。這三個序列處於不同水平,且在整個範圍內沒有共同的階梯式變動。月度成交量序列不會顯示報告規則變更的位置。日曆會顯示,這就是為什麼必須將該日期標記出來的原因。
視窗與排除項目
- 1 月視窗涵蓋 2026年1月5日至 1月9日的五個交易日。7 月視窗涵蓋 2026年7月6日至 7月10日的五個交易日。兩者皆已在 SQL 中固定,因此面板不會隨新數據流入而變動。
- 六個標的的面板涵蓋 2026年7月8日至 7月10日的三個交易日,並統計所有成交紀錄,不論場所或條件。
- 交易數據在前端會有短暫延遲,因此這裡的每個視窗都處於過去的數據中。
常見問題
您可以在交易所買到碎股嗎?
不能。交易所訂單簿僅接受整股。碎股訂單是由您的經紀商在淨額結算客戶需求並將整股部分發送至市場後,從其自身庫存中填補的。碎股是您與經紀商之間的自營交易。
碎股數量何時開始出現在磁帶上?
2026年2月23日。從該日起,交易報告攜帶小數點後六位的數量,採用截斷而非進位。在此之前,所有報告的數量皆為整數。
歷史成交量數據是否錯誤?
在碎股活動頻繁的標的中,數據同時在兩個方向上存在誤差。小於一股的報告被進位至一股,增加了成交量;大於一股的報告被截斷,減少了成交量。這兩者並不會按任何可預測的規律相互抵銷。
碎股交易與零股交易相同嗎?
不同。零股是小於 100 股的整股數量,且數十年來一直顯示在磁帶上。碎股數量小於一股。每一筆碎股成交都是零股;但反之則幾乎不成立。
跨越 2026年2月邊界繪製成交量圖表最安全的方法是什麼?
標記它。將數量保持在足以容納六位小數的資料型態中,在任何跨越該日期的序列上標記日期,並在回溯平均值跨越兩側時明確說明。
此處的每個面板下方皆附有 SQL 語法。打開面板,更換代碼或視窗,即可在 Strasmore 終端機上親自統計成交筆數。