Ngăn tự khớp và wash trade là gì
Ngăn tự khớp (SMP) chặn hai lệnh của bạn khớp với nhau trong matching engine. Tìm hiểu SMP vận hành ra sao và khi nào wash trade bị pháp luật cấm.
Tính năng ngăn tự khớp (self-match prevention) của matching engine ngăn hai lệnh từ cùng một công ty giao dịch với nhau. Khi gửi lệnh, mỗi lệnh mang một mã nhận diện. Nếu hai lệnh có cùng mã này sắp khớp với nhau, engine sẽ hủy một lệnh hoặc cả hai trước khi giao dịch được thực hiện. Ngăn tự khớp là một chức năng hạ tầng của venue mà bạn phải bật, còn lệnh cấm wash trade là quy định pháp lý. Hai cơ chế này không thay thế cho nhau.
Ngay khi chiến lược thứ hai báo giá một công cụ mà chiến lược thứ nhất của bạn cũng đang báo giá, quy tắc này bắt đầu áp dụng. Một grid bot hai tầng trên cùng một ticker cũng chịu quy tắc giống như trading desk của ngân hàng.
Cơ chế ngăn tự khớp tại matching engine
Mỗi lệnh venue nhận được đều có các trường thông tin mà engine đọc trước khi khớp: chiều lệnh, giá, khối lượng và thời hạn hiệu lực. Ngăn tự khớp bổ sung thêm hai trường. Trường thứ nhất là mã nhận diện, có thể là số hoặc chuỗi ký tự, cho biết lệnh thuộc về công ty, tài khoản hoặc nhóm chiến lược nào. Trường thứ hai là chỉ thị cho engine biết phải làm gì khi hai lệnh đang hiệu lực có cùng mã nhận diện sắp giao dịch với nhau.
Kiểm tra được thực hiện ngay khi lệnh chủ động chạm mức giá của lệnh đang chờ mà nó có thể khớp. Bốn kết quả thường gặp là:
- Hủy lệnh đang chờ. Lệnh đến tiếp tục đi vào sổ lệnh và có thể khớp với các lệnh khác phía sau ở cùng mức giá.
- Hủy lệnh đến. Lệnh đang chờ giữ nguyên vị trí trong hàng đợi, còn lệnh chủ động bị loại.
- Hủy cả hai lệnh. Đây là thiết lập nghiêm ngặt nhất.
- Giảm khối lượng và hủy. Lệnh lớn hơn được giảm theo khối lượng của lệnh nhỏ hơn, lệnh nhỏ hơn bị hủy, phần còn lại tiếp tục có hiệu lực.
Không có giao dịch nào xảy ra trong cả bốn trường hợp. Không có giao dịch nào được ghi lên tape, không có fill nào xuất hiện trong fill log. Thay vào đó, hệ thống gửi thông báo hủy cho một hoặc cả hai phía.
Vị trí trong hàng đợi là chi phí ít được chú ý. Lệnh đang chờ bị hủy theo cơ chế hủy lệnh cũ sẽ mất toàn bộ lợi thế có được từ thời gian chờ. Theo ưu tiên giá-thời gian, tổn thất này là hoàn toàn: khi gửi lại, lệnh sẽ đứng sau tất cả lệnh đã gia nhập hàng đợi trong thời gian lệnh cũ nằm trên sổ. Hướng dẫn ước tính vị trí trong hàng đợi của chúng tôi trình bày giá trị của vị trí đó.
Một công cụ, nhiều sổ lệnh
Việc kiểm tra được thực hiện riêng tại từng venue. Engine chỉ so sánh các lệnh đang nằm trong chính sổ lệnh của nó. Hai lệnh của bạn nằm trên hai sổ khác nhau sẽ không nhìn thấy nhau, và không có cơ chế nào trên thị trường cổ phiếu Mỹ kết nối hai sổ này. Một cổ phiếu Mỹ có thể được báo giá đồng thời trên nhiều sổ lệnh. Bảng dưới đây đếm số venue báo giá và ghi nhận giao dịch riêng biệt của sáu mã phổ biến trong một khoảng thời gian mười lăm phút vào buổi sáng ngày 10 tháng 6 năm 2026.
Câu lệnh SQL chính xác đằng sau mỗi con số
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, tickerAAPL nhận được giá bid từ 16 venue riêng biệt trong khoảng thời gian đó, và giao dịch được thực hiện trên 17 venue. Mã có thanh khoản mỏng nhất trong bảng vẫn nhận báo giá từ 11 venue. Smart order router được thiết kế để chia lệnh thành các child order sẽ thường đưa hai chiến lược của bạn vào các sổ khác nhau. Khi đó, kiểm tra ở cấp engine không được áp dụng. Các công ty thu hẹp khoảng trống này từ trước, trong lớp quản lý lệnh, trước khi bất kỳ lệnh nào rời khỏi hệ thống. Các lệnh của chính bạn nằm ở hai phía đối lập, cùng một mức giá nhưng trên hai sổ khác nhau, cũng tạo ra một thị trường bị khóa hoặc bị chéo, vốn có bộ quy tắc riêng.
Một sổ lệnh khớp bao nhiêu giao dịch trong một phiên
Kiểm tra tự khớp nằm trên đường xử lý của mọi lần khớp do engine thực hiện. Với một mã có thanh khoản cao, đường xử lý này hoạt động liên tục trong ngày. Bảng dưới đây chia trọn một phiên của một cổ phiếu thành các khoảng mười lăm phút, rồi đếm số giao dịch được thực hiện trong từng khoảng. Chỉ các khoảng có ít nhất 200 giao dịch mới được giữ lại.
Câu lệnh SQL chính xác đằng sau mỗi con số
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_timeVào 04:00 ET, mã đó ghi nhận 9402 giao dịch trong mười lăm phút. Vào 19:45 ET, con số là 1345, trải trên 64 khoảng đạt ngưỡng 200 giao dịch. Mỗi giao dịch là một cặp lệnh được engine đưa đến khớp với nhau. Trước khi cho hai lệnh gặp nhau, cơ chế kiểm tra đọc mã nhận diện ở cả hai phía. Mọi lệnh nằm lại trên sổ đều có thể gặp một lệnh khác từ cùng tài khoản vào bất kỳ thời điểm nào sau đó trong ngày.
Tape thể hiện gì khi một giao dịch tự khớp được thực hiện
Một lần tự khớp bị ngăn chặn sẽ không để lại dấu vết. Tape chỉ chứa các giao dịch đã được thực hiện. Mỗi giao dịch đi kèm các cờ điều kiện, tức các mã do venue báo cáo gắn vào để mô tả cách giao dịch xảy ra. Bảng dưới đây chia trọn một phiên của một cổ phiếu theo các cờ này.
Câu lệnh SQL chính xác đằng sau mỗi con số
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 chiếm 48.34% số giao dịch có cờ trong phiên đó. Bảng liệt kê 10 cờ phổ biến nhất trong ngày. Hãy đọc danh sách và chú ý phần không xuất hiện. Không có mã nào cho biết hai lệnh đến từ cùng một công ty. Một giao dịch tự khớp nhưng vẫn được thực hiện sẽ trông giống mọi giao dịch khác ở mức giá đó. Vì vậy, hoạt động giám sát phải dựa trên tape, các mã nhận diện thành viên mà venue lưu giữ và số tài khoản gắn với lệnh.
Ranh giới giữa ngăn tự khớp và quy định về wash trade
Ngăn tự khớp là một dịch vụ của venue. Bạn đăng ký sử dụng, cấu hình và bật dịch vụ này. Nếu không thiết lập, engine vẫn sẽ vui vẻ khớp hai lệnh của bạn với nhau. Lệnh cấm wash trade là bắt buộc và không phụ thuộc vào bất kỳ thiết lập nào.
Section 9(a)(1) của Securities Exchange Act năm 1934 điều chỉnh các giao dịch chứng khoán không làm thay đổi beneficial ownership nhưng được thực hiện nhằm tạo ra hình ảnh sai lệch về hoạt động giao dịch. Commodity Exchange Act có quy định tương đương đối với hợp đồng tương lai, còn CME Rule 534 nhắc lại quy định này trong bộ quy tắc của sàn. FINRA Rule 5210 áp dụng cho broker-dealer trong cả hai bối cảnh. Phần hướng dẫn bổ sung của quy tắc này đề cập trực tiếp đến giao dịch tự khớp: giao dịch giữa hai thuật toán không liên quan tại cùng một công ty không tự động là hành vi vi phạm, nhưng công ty vẫn phải duy trì chính sách để rà soát và giảm các giao dịch đó.
Có hai hệ quả đối với người vận hành nhiều chiến lược. Một giao dịch tự chéo có thể vi phạm lệnh cấm trên venue nơi bạn không hề thiết lập chỉ thị ngăn tự khớp, vì quy định áp dụng cho giao dịch và ý định phía sau giao dịch. Ngược lại, một giao dịch tự chéo bị ngăn tự khớp chặn lại thì không vi phạm điều gì. Ngăn giao dịch đó chính là mục đích của cơ chế này.
Cách các nhà vận hành cấu hình cơ chế: CME, ICE, LME và MiFID II
Trên CME Globex, cơ chế ngăn tự khớp hoạt động dựa trên mã nhận diện được gửi cùng lệnh. Các công ty đăng ký trước những mã sẽ sử dụng. Mỗi lệnh mang một mã, cùng một chỉ thị cho biết engine phải hủy phía nào khi hai lệnh có cùng mã gặp nhau. Lệnh gửi không có mã vẫn được khớp bình thường. Đây là điểm dễ khiến nhà vận hành mới mắc lỗi: mặc định là tắt.
ICE vận hành Self-Trade Prevention Functionality. Cơ chế này được cấu hình theo mã nhận diện của công ty giao dịch thay vì cài riêng cho từng lệnh, với cùng nhóm lựa chọn hủy lệnh. London Metal Exchange cung cấp Self-Execution Prevention trên LMEselect cho các mã nhận diện giao dịch của thành viên. Tại châu Âu, Điều 17 của MiFID II yêu cầu mọi công ty đầu tư tham gia giao dịch thuật toán phải có hệ thống và kiểm soát phù hợp. Các yêu cầu bao gồm kiểm thử, chức năng kill và ngăn giao dịch mất trật tự. Điều 48 đặt nghĩa vụ tương tự lên venue. Các công cụ ngăn tự khớp ở cấp venue cũng trở thành thiết bị tiêu chuẩn đi kèm yêu cầu này.
Cấu hình được đặt ở cấp tài khoản hoặc công ty thay vì theo từng ticker. Quy mô của một option surface trên một tài sản cơ sở cho thấy lý do.
Câu lệnh SQL chính xác đằng sau mỗi con số
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 dateTrên 2026-06-01, một tài sản cơ sở có 1579 hợp đồng có volume được giao dịch riêng biệt, phân bổ trên 112 strike. Bảng bao quát 21 phiên có cấu trúc tương tự. Với số lượng đó, thiết lập quy tắc cho từng hợp đồng là không thể quản lý. Mã nhận diện được gắn với tài khoản và đi cùng mọi lệnh tài khoản đó gửi đi.
Sự cố mà fill log sẽ không giải thích
Trong thực tế, quy trình diễn ra như sau. Chỉ thị hủy lệnh mới nhất sẽ loại lệnh bạn vừa gửi ngay khi lệnh đến, trước khi lệnh có thể khớp. Từ bên trong bot, chuỗi sự kiện chỉ hiện là một lệnh mới, sau đó là một lệnh hủy mà không ai yêu cầu. Không có fill, không có reject và không có chuỗi lỗi nêu rõ nguyên nhân. Vì vậy, khi lần đầu gặp tình huống này, nhà vận hành thường đi tìm lỗi trong chính luồng hủy lệnh của mình.
Hai thói quen giúp làm rõ nguyên nhân. Hãy ghi nguyên văn các thông báo trạng thái lệnh của venue thay vì chỉ lưu bản tóm tắt đã chuẩn hóa, vì lý do ngăn tự khớp thường nằm trong một trường của thông báo đó. Hãy cảnh báo khi xuất hiện bất kỳ lệnh hủy nào không do mã nguồn của bạn tạo ra. Cảnh báo này nên được đặt cùng với circuit breaker cho giao dịch tự động của bạn, vì đây là cùng một nhóm sự cố: venue đã thay đổi trạng thái lệnh, còn quy trình của bạn vẫn tiếp tục như thể không có gì xảy ra.
Câu hỏi thường gặp
Ngăn tự khớp là gì?
Đây là bước kiểm tra tại matching engine nhằm ngăn hai lệnh có cùng mã nhận diện công ty hoặc tài khoản giao dịch với nhau. Khi hai lệnh sắp khớp, engine sẽ hủy lệnh đang chờ, lệnh đến hoặc cả hai, theo chỉ thị gắn với lệnh.
Giao dịch tự khớp có giống wash trade không?
Không. Giao dịch tự khớp là bất kỳ giao dịch nào được thực hiện giữa hai lệnh thuộc cùng một beneficial owner. Wash trade là giao dịch tự khớp được thực hiện mà không chịu rủi ro thị trường thực chất và nhằm tạo ra hình ảnh sai lệch về hoạt động giao dịch. Giao dịch tự khớp ngoài ý muốn giữa các thuật toán không liên quan được đối xử khác với giao dịch được sắp đặt. Tuy vậy, các công ty vẫn phải giám sát những giao dịch này.
Ngăn tự khớp có hoạt động giữa các sàn khác nhau không?
Không. Mỗi matching engine chỉ áp dụng kiểm tra cho các lệnh nằm trong sổ lệnh của chính nó. Hai lệnh của cùng một công ty nằm trên hai venue khác nhau vẫn có thể giao dịch với nhau. Khi đó, trách nhiệm thuộc về các bước kiểm tra pre-trade của công ty ở phía trên các venue.
Tại sao lệnh của tôi bị hủy mà không có fill và không có lý do?
Chỉ thị ngăn tự khớp theo cơ chế hủy lệnh mới nhất là một khả năng. Venue đã hủy lệnh ngay khi lệnh đến, trước khi lệnh có thể khớp với lệnh đang chờ có cùng mã nhận diện. Lý do thường xuất hiện trong một trường của thông báo hủy từ venue, thay vì trong thông báo từ chối lệnh.
Venue nào yêu cầu mã nhận diện ngăn tự khớp?
Yêu cầu khác nhau theo từng venue và sản phẩm. CME yêu cầu mã nhận diện trong thông tin gửi lệnh và mã này phải được đăng ký trước. ICE và London Metal Exchange cung cấp cấu hình riêng ở cấp công ty. Các venue châu Âu có nghĩa vụ về hệ thống và kiểm soát theo MiFID II. Bộ quy tắc của venue đối với sản phẩm bạn giao dịch là căn cứ có thẩm quyền.
Mỗi bảng trong bài đều kèm SQL đã tạo ra dữ liệu. Hãy mở rộng bất kỳ bảng nào để xem. Muốn đếm số venue đang báo giá một mã bạn giao dịch hoặc chia một phiên theo cờ điều kiện, hãy đặt câu hỏi bằng tiếng Anh thông thường trên terminal Strasmore.