自我撮合防範與洗售交易有何不同
了解自我撮合防範如何在撮合引擎中取消相互交叉的委託,以及它與洗售交易法律規範的界線,掌握策略排隊順位可能付出的代價。
自我撮合防範是撮合引擎的一項功能,可防止同一公司的兩筆委託彼此成交。委託送入時會帶有識別碼;當兩筆共用該識別碼的委託即將交叉成交,引擎會在任何成交回報產生前取消其中一筆,或取消兩筆。自我撮合防範屬於可啟用的交易場所基礎設施;禁止洗售交易則是法律規範,兩者適用範圍並不相同。
只要第二個策略開始對某項商品報價,而第一個策略已在該商品上報價,這項規則就與你有關。同一個 symbol 上的雙層網格機器人,面對的規則與銀行交易台相同。
撮合引擎如何運作自我撮合防範
交易場所收到的每筆委託,都會帶有引擎在撮合前讀取的欄位:買賣方向、價格、數量、有效時間。自我撮合防範會再增加兩個欄位。第一個是識別碼,可以是數字或字串,用來表示該委託所屬的公司、帳戶或策略群組。第二個是指示,告訴引擎當兩筆帶有該識別碼的有效委託即將彼此成交時,應採取何種處置。
當主動成交委託抵達可與簿上被動委託成交的價格時,引擎會立即執行檢查。常見結果有四種:
- 取消簿上委託。新進委託繼續進入委託簿,並可與該價格後方的其他委託成交。
- 取消新進委託。簿上委託保留其排隊順位,主動成交委託則被取消。
- 取消兩筆委託。這是最嚴格的設定。
- 減量並取消。較大筆委託按較小筆委託的數量減少,較小筆委託遭取消,剩餘數量繼續有效。
四種結果都不會成交。成交紀錄不會出現在行情帶上,也不會寫入成交日誌;取而代之的是,其中一筆或兩筆委託收到非預期的取消訊息。
排隊順位是容易被忽略的成本。在取消較早委託的指示下,簿上委託一旦被取消,就會失去等待期間累積的全部順位。按照價格時間優先規則,這項損失是完整的:重新送出委託後,會排在等待期間加入隊列的所有委託之後。我們的估算排隊順位指南說明這個位置的價值。
一項商品,多本委託簿
這項檢查以交易場所為單位。引擎只會比較自己持有的委託。你在兩本不同委託簿中掛出的兩筆委託彼此不可見,美國股票市場也沒有任何機制會跨越兩本委託簿進行這項檢查。一檔美國股票可以同時在多本委託簿中報價。下方面板統計六檔常見股票,在2026年6月10日上午一個十五分鐘時段內,出現報價與成交的不同交易場所數量。
每個數據背後的精確 SQL 語法
SELECT
q.ticker AS ticker,
q.quoting_venues AS quoting_venues,
t.printing_venues AS printing_venues
FROM
(
SELECT
ticker,
countDistinct(bid_exchange) AS quoting_venues
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')
AND sip_timestamp >= toDateTime('2026-06-10 14:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 14:15:00', 'UTC')
AND bid_price > 0
GROUP BY ticker
) AS q
INNER JOIN
(
SELECT
ticker,
countDistinct(exchange) AS printing_venues
FROM global_markets.stocks_trades
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')
AND sip_timestamp >= toDateTime('2026-06-10 14:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 14:15:00', 'UTC')
GROUP BY ticker
) AS t ON t.ticker = q.ticker
ORDER BY quoting_venues DESC, ticker在該十五分鐘時段內,AAPL的買方報價來自16個不同交易場所,成交則出現在其中17個交易場所。面板中流動性最薄弱的股票,仍有11個交易場所提供報價。智慧型路由器若按設計拆分子委託,通常會把你的兩個策略分送至不同委託簿,因此不會適用引擎層級的檢查。公司會在委託離開內部系統前,於上游的委託管理層補上這項控管。你在兩本委託簿中以相同價格掛出相反方向的委託,也會形成鎖定或交叉市場,並適用另一套規則。
一個委託簿在一個交易時段內會撮合多少次
自我撮合檢查位於引擎每次撮合的路徑上。對流動性高的股票而言,這條路徑全天都很繁忙。下方面板把一檔股票完整交易時段分成十五分鐘區間,統計各區間的成交筆數,並保留至少有200筆成交的區間。
每個數據背後的精確 SQL 語法
SELECT
formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 15 MINUTE), '%H:%i') AS et_time,
count() AS trade_count
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-10 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-11 04:00:00', 'UTC')
GROUP BY et_time
HAVING count() >= 200
ORDER BY et_time在04:00 ET,該股票十五分鐘內成交9402筆;在19:45 ET,成交1345筆。共有64個區間達到200筆成交的門檻。每筆成交都代表引擎撮合的一對委託;在允許兩筆委託成交前,引擎會先讀取雙方的識別碼。每筆進入委託簿並停留的委託,都可能在當日稍後與同一帳戶的另一筆委託相遇。
自我交易成交時,行情帶會顯示什麼
被阻止的自我撮合不會留下任何紀錄。行情帶只記錄已執行的成交,而每筆成交都會帶有成交條件旗標,也就是報送交易場所附加、用來描述成交方式的代碼。下方面板將一檔股票完整交易時段的成交按這些旗標拆分。
每個數據背後的精確 SQL 語法
SELECT
condition_name,
print_count,
round(100 * print_count / sum(print_count) OVER (), 2) AS share_pct
FROM
(
SELECT
cc.id AS condition_id,
any(cc.name) AS condition_name,
count() AS print_count
FROM
(
SELECT toInt32(arrayJoin(conditions)) AS condition_id
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-10 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-11 04:00:00', 'UTC')
) AS f
INNER JOIN
(
SELECT
toInt32(id) AS id,
any(name) AS name
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND has(data_types, 'trade')
GROUP BY id
) AS cc ON cc.id = f.condition_id
GROUP BY condition_id
)
ORDER BY print_count DESC
LIMIT 10Odd Lot Trade涵蓋該交易時段中48.34%的帶旗標成交,面板列出當日最常見的10個旗標。閱讀清單時,也要注意其中沒有什麼。沒有任何代碼會表示兩筆委託來自同一家公司。若自我交易確實成交,看起來就與該價格的其他交易相同;因此,相關監控不是依靠行情帶,而是依靠交易場所持有的參與者識別資料,以及委託所帶的帳戶號碼。
自我撮合防範與洗售交易法規的界線
自我撮合防範是交易場所提供的服務。你可以選擇啟用並進行設定;如果完全不設定,引擎仍會照常撮合你的兩筆委託。禁止洗售交易則不是可選項,也不取決於任何設定。
《1934年證券交易法》第9(a)(1)條涵蓋涉及實益所有權未發生變更、且為製造活躍交易假象而進行的證券交易。《商品交易法》也有對應的期貨規定,CME Rule 534則在交易所規章中重申這項要求。FINRA Rule 5210適用於受兩項規範約束的 broker-dealer,其補充資料直接處理自我交易:同一家公司內兩個不相關演算法之間的交易,本身不構成違規;公司仍應制定政策,對這類交易進行檢視並加以減少。
對同時運行多個策略的交易者而言,這會帶來兩項後果。即使你完全沒有設定自我撮合指示,自我交叉成交仍可能在該交易場所違反禁止規定,因為規則所約束的是交易及其背後意圖。若自我撮合防範已阻止自我交叉成交,則不會構成違規;阻止這類交易正是該功能的目的。
交易者如何設定:CME、ICE、LME與MiFID II
在CME Globex上,自我撮合防範依靠送單時提交的識別碼運作。公司必須登記將使用的識別碼,每筆委託都帶有其中一個識別碼;當兩筆帶有相同識別碼的委託相遇時,配對指示會指定引擎取消哪一方。未帶識別碼送出的委託會照常撮合,這是新進交易者常見的陷阱:預設狀態是關閉。
ICE提供Self-Trade Prevention Functionality,設定依據是交易公司識別碼,而非逐筆委託設定,並提供相同類型的取消結果。London Metal Exchange則在LMEselect上,為會員交易識別碼提供Self-Execution Prevention。在歐洲,MiFID II第17條要求從事演算法交易的投資公司建立系統與控管措施,涵蓋測試、kill functionality及防止市場失序交易。第48條也對交易場所提出相應義務;交易場所端的防範工具亦因此成為標準配置。
設定通常位於帳戶或公司層級,而非逐一依 symbol 設定。單一標的的選擇權合約面之規模,正好說明原因。
每個數據背後的精確 SQL 語法
SELECT
toString(date) AS session_date,
countDistinct(ticker) AS contracts_traded,
countDistinct(strike_price) AS strikes_traded
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date >= '2026-06-01'
AND date <= '2026-06-30'
AND volume > 0
AND iv_converged = 1
GROUP BY date
ORDER BY date在2026-06-01,一項標的有1579份可獨立交易且具成交量的合約,分布於112個履約價;面板涵蓋21個形態相近的交易時段。以這樣的數量逐份合約設定規則並不可行。識別碼會繫結至帳戶,並隨該帳戶送出的每一筆委託傳遞。
成交日誌不會說明的失敗模式
實務上的情況如下。取消最新委託的指示會在你剛送出委託時立即將其取消,使其無法與簿上委託成交。在機器人內部,這段流程看起來像是先送出新委託,接著收到一個無人要求的取消。由於沒有成交、沒有拒單,也沒有明確說明原因的錯誤字串,第一次遇到這種情況的操作人員,往往會先在自己的取消流程中尋找程式錯誤。
兩個習慣可以讓問題更容易辨識。逐字記錄交易場所的委託狀態訊息,不要只保留正規化摘要,因為防範原因通常會以欄位形式附在該訊息中。對任何不是由自有程式發起的取消操作發出警示。這項警示應與你的自動交易斷路器放在同一套控管中,因為兩者屬於相同類型的失敗:交易場所改變了你的委託狀態,但你的流程仍像什麼都沒有發生一樣繼續執行。
常見問答
什麼是自我撮合防範?
這是撮合引擎的一項檢查,可防止帶有相同公司或帳戶識別碼的兩筆委託彼此成交。當兩筆委託即將成交時,引擎會依委託所附的指示,取消簿上委託、新進委託或兩者。
自我交易是否等同於洗售交易?
不是。自我交易是指同一實益所有人所送出的兩筆委託彼此成交。洗售交易則是未承擔真正市場風險,並意圖製造誤導性交易活躍假象的自我交易。無關聯演算法之間的非故意自我交易,與事先安排的自我交易適用不同處理方式;公司仍應對此進行監控。
自我撮合防範是否能跨不同交易所運作?
不能。每個撮合引擎只會對自己委託簿中的委託執行檢查。同一家公司在兩個交易場所掛出的兩筆委託仍可能彼此成交,因此必須由公司在交易場所上游的交易前檢查負責處理。
為什麼我的委託沒有成交,也沒有原因就被取消?
取消最新委託的自我撮合指示是其中一種可能原因:交易場所會在委託送達時將其取消,使其無法與帶有你方識別碼的簿上委託成交。原因通常會出現在交易場所的取消訊息欄位中,而不是拒單訊息中。
哪些交易場所要求自我撮合防範識別碼?
要求會依交易場所與商品而異。CME要求在送單時提供事先登記的識別碼;ICE與London Metal Exchange則提供各自的公司層級設定,歐洲交易場所也依MiFID II負有建立系統與控管措施的義務。你所交易商品適用的交易場所規章才是最終依據。
本頁每個面板都附有產出結果的SQL,因此展開任一面板即可閱讀。若要統計你所交易標的的報價交易場所數量,或按成交條件旗標拆解交易時段,請在Strasmore terminal以自然語言提出問題。