Self-Match Prevention dan Wash Trade
Self-match prevention menghentikan dua order Anda agar tidak saling bertransaksi. Pahami cara kerja SMP di matching engine dan batas awal hukum wash trade.
Self-match prevention adalah fitur matching engine yang menghentikan dua order dari firm yang sama agar tidak saling bertransaksi. Saat masuk, order membawa identifier. Ketika dua order dengan identifier yang sama akan saling cross, engine membatalkan salah satunya, atau keduanya, sebelum trade apa pun tercetak. Self-match prevention merupakan infrastruktur venue yang perlu diaktifkan, sedangkan larangan wash trade adalah ketentuan hukum. Keduanya tidak mencakup hal yang sama.
Begitu strategi kedua mulai mengutip instrumen yang sudah dikutip strategi pertama, aturan ini berlaku bagi Anda. Bot grid dengan dua ladder pada satu simbol menghadapi aturan yang sama seperti trading desk bank.
Cara kerja self-match prevention pada matching engine
Setiap order yang diterima venue membawa field yang dibaca engine sebelum matching: side, price, size, dan time in force. Self-match prevention menambahkan dua field lagi. Yang pertama adalah identifier, berupa angka atau string yang menunjukkan firm, account, atau kelompok strategi pemilik order. Yang kedua adalah instruksi yang memberi tahu engine tindakan yang harus diambil ketika dua order aktif dengan identifier tersebut akan saling bertransaksi.
Pemeriksaan berlangsung saat order agresif mencapai harga order resting yang akan dicocokkannya. Empat hasil berikut umum digunakan:
- Membatalkan order resting. Order masuk tetap diteruskan ke order book dan dapat mencocokkan order lain yang berada di belakangnya pada harga tersebut.
- Membatalkan order masuk. Order resting mempertahankan queue position, sementara order agresif dibatalkan.
- Membatalkan kedua order. Ini adalah pengaturan yang paling ketat.
- Decrement and cancel. Order yang lebih besar dikurangi sebesar ukuran order yang lebih kecil. Order yang lebih kecil dibatalkan dan sisa order yang lebih besar tetap aktif.
Tidak ada trade yang terjadi dalam keempat skenario tersebut. Tidak ada yang tercetak di tape, tidak ada yang masuk ke fill log, dan unsolicited cancel muncul pada satu leg atau dua leg sebagai gantinya.
Queue position adalah biaya yang sering tidak terlihat. Order resting yang dibatalkan berdasarkan instruksi cancel-oldest kehilangan seluruh posisi yang diperolehnya selama menunggu. Berdasarkan price-time priority, kerugian itu sepenuhnya hilang: ketika order dimasukkan kembali, posisinya berada di belakang semua order yang masuk selama order tersebut berada di book. Panduan kami tentang mengestimasi queue position membahas nilai posisi tersebut.
Satu instrumen, banyak book
Pemeriksaan ini berlaku per venue. Engine hanya membandingkan order yang disimpannya sendiri. Dua order Anda yang resting di dua book berbeda tidak saling terlihat, dan tidak ada mekanisme US equities yang menjangkau kedua book tersebut. Satu saham AS dapat dikutip secara bersamaan di banyak book. Panel di bawah menghitung venue yang berbeda untuk quoting dan printing pada enam nama saham yang umum diperdagangkan selama satu periode lima belas menit pada pagi 10 Juni 2026.
SQL tepat di balik setiap angka
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 menarik bid dari 16 venue terpisah selama periode lima belas menit tersebut, dan print terjadi di 17 venue di antaranya. Nama dengan likuiditas paling rendah dalam panel tersebut tetap menarik quote dari 11 venue. Smart order router yang memang membagi child order akan menempatkan dua strategi Anda di book yang berbeda dalam banyak kasus. Dalam situasi itu, pemeriksaan pada level engine tidak berlaku. Firm menutup celah tersebut lebih awal, di order management layer, sebelum order meninggalkan perusahaan. Order Anda sendiri yang resting pada sisi berlawanan dengan harga yang sama di dua book juga menghasilkan locked or crossed market, yang memiliki seperangkat aturan tersendiri.
Berapa banyak match yang dibuat satu book dalam satu sesi
Pemeriksaan self-match berada dalam jalur setiap match yang dibuat engine. Pada nama yang likuid, jalur tersebut tetap sibuk sepanjang hari. Panel di bawah membagi satu sesi penuh pada satu saham ke dalam interval lima belas menit dan menghitung print di setiap interval. Hanya interval dengan sedikitnya 200 print yang dipertahankan.
SQL tepat di balik setiap angka
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_timePada 04:00 ET, nama tersebut mencatat 9402 trade dalam lima belas menit. Pada 19:45 ET, jumlahnya 1345, di antara 64 interval yang memenuhi batas minimum 200 print. Setiap print merupakan satu pasangan order yang dipertemukan engine. Sebelum membiarkan keduanya bertemu, pemeriksaan membaca identifier pada kedua sisi. Setiap order yang resting di book menjadi kandidat untuk bertemu dengan order lain dari account yang sama di kemudian hari.
Apa yang terlihat di tape ketika self-trade tercetak
Self-match yang dicegah tidak meninggalkan catatan apa pun. Tape hanya memuat transaksi yang dieksekusi, dan setiap print disertai condition flag, yaitu kode yang diberikan venue pelapor untuk menjelaskan bagaimana trade tersebut terjadi. Panel di bawah membagi satu sesi penuh pada satu saham berdasarkan flag tersebut.
SQL tepat di balik setiap angka
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 mencakup 48.34% dari seluruh flagged print dalam sesi tersebut, dan panel mencantumkan 10 flag yang paling umum pada hari itu. Perhatikan apa yang tidak ada dalam daftar. Tidak ada kode yang menunjukkan bahwa dua order berasal dari satu firm. Self-trade yang benar-benar tercetak terlihat seperti trade lain pada harga tersebut. Karena itu, surveillance dilakukan melalui tape, participant identifier yang disimpan venue, dan account number yang melekat pada order.
Batas self-match prevention dan awal berlakunya ketentuan wash trade
Self-match prevention adalah layanan venue. Anda memilih untuk menggunakannya, mengonfigurasinya, dan engine akan tetap mencocokkan dua order Anda jika Anda tidak pernah mengaktifkannya. Larangan wash trade tidak bersifat opsional dan tidak bergantung pada pengaturan apa pun.
Section 9(a)(1) Securities Exchange Act of 1934 mencakup transaksi sekuritas yang tidak mengubah beneficial ownership dan dilakukan untuk menciptakan kesan menyesatkan mengenai aktivitas perdagangan. Commodity Exchange Act memuat ketentuan yang setara untuk futures, dan CME Rule 534 menegaskannya dalam rulebook bursa. FINRA Rule 5210 berlaku bagi broker-dealer, dan materi tambahannya membahas self-trade secara langsung: trade antara dua algoritme yang tidak terkait pada satu firm tidak dengan sendirinya melanggar aturan, tetapi firm diharapkan memiliki kebijakan untuk meninjau dan menguranginya.
Bagi siapa pun yang menjalankan lebih dari satu strategi, ada dua konsekuensi. Self-cross dapat melanggar larangan tersebut di venue yang sama sekali tidak Anda beri instruksi self-match, karena aturan itu berlaku berdasarkan transaksi dan tujuan di baliknya. Sebaliknya, self-cross yang dihentikan oleh self-match prevention tidak melanggar apa pun. Memang itulah tujuan fitur tersebut.
Cara operator mengonfigurasinya: CME, ICE, LME, dan MiFID II
Di CME Globex, self-match prevention menggunakan identifier yang dikirim saat order entry. Firm mendaftarkan identifier yang akan digunakan, setiap order membawa salah satunya, dan instruksi terkait menentukan sisi mana yang dibatalkan engine ketika dua order dengan identifier tersebut bertemu. Order yang dikirim tanpa identifier akan dicocokkan secara normal. Ini adalah jebakan bagi operator baru: pengaturan default-nya adalah nonaktif.
ICE menjalankan Self-Trade Prevention Functionality yang dikonfigurasi berdasarkan identifier trading firm, bukan per order, dengan kelompok hasil pembatalan yang sama. London Metal Exchange menyediakan Self-Execution Prevention di LMEselect untuk identifier trading member. Di Eropa, MiFID II Article 17 mewajibkan investment firm yang terlibat dalam algorithmic trading untuk memiliki sistem dan kontrol yang mencakup testing, kill functionality, dan pencegahan trading yang tidak teratur. Article 48 menetapkan kewajiban serupa bagi venue, dan tools pencegahan di sisi venue menjadi perlengkapan standar yang melengkapinya.
Konfigurasi diterapkan pada level account atau firm, bukan per simbol. Besarnya option surface untuk satu underlying menjelaskan alasannya.
SQL tepat di balik setiap angka
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 datePada 2026-06-01, satu underlying memiliki 1579 kontrak yang dapat diperdagangkan secara terpisah dan memiliki volume. Kontrak tersebut tersebar di 112 strike, dan panel mencakup 21 sesi dengan karakteristik serupa. Menetapkan aturan untuk setiap kontrak tidak dapat dikelola pada jumlah sebesar itu. Identifier melekat pada account dan dibawa oleh setiap order yang dikirim account tersebut.
Mode kegagalan yang tidak akan dijelaskan oleh fill log Anda
Berikut dampaknya dalam praktik. Instruksi cancel-newest membatalkan order yang baru saja Anda kirim saat order tiba, sebelum order tersebut dapat mencocokkan order resting. Dari dalam bot, urutannya terlihat sebagai order baru yang diikuti cancel yang tidak diminta oleh siapa pun. Tidak ada fill, reject, atau error string yang menjelaskan alasannya. Karena itu, operator yang baru pertama kali mengalaminya cenderung mencari bug pada jalur cancel mereka sendiri.
Dua kebiasaan dapat membuat situasi ini lebih mudah dipahami. Catat pesan order status dari venue secara verbatim, bukan dalam ringkasan yang sudah dinormalisasi, karena alasan pencegahan biasanya dikirim sebagai field dalam pesan tersebut. Buat alert untuk setiap cancel yang tidak berasal dari kode Anda sendiri. Alert itu perlu ditempatkan bersama automated trading circuit breakers, karena jenis kegagalannya sama: venue mengubah status order Anda, sementara proses Anda tetap berjalan seolah-olah tidak terjadi apa-apa.
FAQ
Apa itu self-match prevention?
Pemeriksaan pada matching engine yang menghentikan dua order dengan firm atau account identifier yang sama agar tidak saling bertransaksi. Ketika keduanya akan match, engine membatalkan order resting, order masuk, atau keduanya, sesuai instruksi yang melekat pada order.
Apakah self-trade sama dengan wash trade?
Tidak. Self-trade adalah eksekusi antara dua order dari beneficial owner yang sama. Wash trade adalah self-trade yang dilakukan tanpa risiko pasar yang nyata dan dengan tujuan menciptakan kesan menyesatkan mengenai aktivitas pasar. Self-trade yang tidak disengaja antara algoritme yang tidak terkait diperlakukan berbeda dari self-trade yang diatur sebelumnya. Firm tetap diharapkan memantaunya.
Apakah self-match prevention bekerja di berbagai exchange?
Tidak. Setiap matching engine hanya menerapkan pemeriksaan pada order di book miliknya sendiri. Dua order dari satu firm yang resting di dua venue dapat saling bertransaksi. Pencegahan dalam situasi itu menjadi tanggung jawab pre-trade check milik firm sendiri, di atas venue.
Mengapa order saya dibatalkan tanpa fill dan tanpa alasan?
Instruksi cancel-newest untuk self-match adalah salah satu kemungkinan. Venue membatalkan order saat order tiba, sebelum order tersebut dapat mencocokkan order resting dengan identifier Anda. Alasannya biasanya muncul sebagai field pada pesan cancel dari venue, bukan sebagai rejection.
Venue mana yang mewajibkan self-match prevention identifier?
Persyaratannya berbeda menurut venue dan produk. CME meminta identifier saat order entry dan identifier tersebut harus didaftarkan terlebih dahulu. ICE dan London Metal Exchange memiliki konfigurasi masing-masing pada level firm, sementara venue Eropa memiliki kewajiban terkait sistem dan kontrol berdasarkan MiFID II. Rulebook venue untuk produk yang Anda perdagangkan adalah rujukan yang berlaku.
Setiap panel di sini menyertakan SQL yang menghasilkan datanya. Buka panel mana pun untuk membacanya. Untuk menghitung venue yang mengutip nama saham yang Anda perdagangkan, atau membagi satu sesi berdasarkan condition flag, ajukan pertanyaan dalam bahasa sehari-hari di terminal Strasmore.