Strasmore Research

Self-Match Prevention at Wash Trades

Pinipigilan ng self-match prevention ang pag-trade ng sarili mong orders. Alamin kung paano ito gumagana sa matching engine at kailan nagsisimula ang batas laban sa wash trades.

Ang self-match prevention ay isang feature ng matching engine na pumipigil sa dalawang order mula sa iisang firm na mag-trade sa isa’t isa. May identifier ang mga order sa pagpasok, at kapag magka-cross ang dalawang order na may parehong identifier, kinakansela ng engine ang isa sa mga ito, o pareho, bago magkaroon ng trade print. Ang self-match prevention ay venue plumbing na kailangan mong i-on. Samantala, ang pagbabawal sa wash trades ay batas. Hindi pareho ang saklaw ng dalawang ito.

Kapag nag-quote ang ikalawang strategy sa isang instrument na bina-quote na ng una mong strategy, umiiral na ang rule na ito para sa iyo. Ang two-ladder grid bot sa isang symbol ay sakop nito sa parehong paraan tulad ng isang bank desk.

Paano gumagana ang self-match prevention sa matching engine

Bawat order na natatanggap ng isang venue ay may mga field na binabasa ng engine bago mag-match: side, presyo, size, at time in force. Nagdadagdag ang self-match prevention ng dalawa pa. Ang una ay identifier, isang number o string na nagsasaad kung saang firm, account, o strategy group kabilang ang order. Ang ikalawa ay instruction kung ano ang gagawin ng engine kapag ang dalawang live order na may identifier na iyon ay malapit nang mag-trade sa isa’t isa.

Isinasagawa ang check sa mismong sandali na maabot ng aggressing order ang presyo ng resting order na maaari nitong i-match. Apat ang karaniwang outcome:

  • Kanselahin ang resting order. Magpapatuloy ang incoming order sa order book at maaari nitong i-match ang anumang order na nasa likod nito sa presyong iyon.
  • Kanselahin ang incoming order. Nananatili ang resting order sa queue position nito at inaalis ang aggressor.
  • Kanselahin ang parehong order. Ito ang pinakamahigpit na setting.
  • Decrement and cancel. Binabawasan ang mas malaking order ayon sa size ng mas maliit na order, kinakansela ang mas maliit, at nananatiling live ang natitirang bahagi.

Walang trade sa alinman sa apat. Walang lumalabas na print sa tape, walang napupunta sa fill log, at may unsolicited cancel na dumarating sa isang leg o sa dalawang leg.

Ang queue position ang tahimik na gastos. Kapag kinansela ang resting order sa ilalim ng cancel-oldest instruction, nawawala ang lahat ng napala nito sa paghihintay. Sa ilalim ng price-time priority, buo ang pagkawala: kapag muling pumasok ang order, mapupunta ito sa likod ng lahat ng sumali sa queue habang naghihintay ito. Ipinapaliwanag ng aming guide sa pagtatantiya ng queue position kung magkano ang halaga ng puwestong iyon sa pila.

Isang instrument, maraming order book

Per venue ang check. Inihahambing lamang ng engine ang mga order na hawak nito. Hindi nakikita ng isa’t isa ang dalawang order mo na nakapuwesto sa dalawang magkaibang book, at walang US equities mechanism na tumatawid sa pagitan ng mga ito. Ang isang US stock ay maaaring mag-quote nang sabay-sabay sa maraming book. Binibilang ng panel sa ibaba ang magkakaibang quoting at printing venue para sa anim na kilalang pangalan sa loob ng isang fifteen minute window noong umaga ng June 10, 2026.

QueryMga venue na nagko-quote at nagpi-print ng parehong stock sa loob ng 15-minutong window
Ang eksaktong SQL sa likod ng bawat numero
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
Run this yourself

Ang AAPL ay nakakuha ng bids mula sa 16 magkakahiwalay na venue sa loob ng quarter hour na iyon, at nagkaroon ng prints sa 17 sa mga ito. Kahit ang pinakamanipis ang trading na pangalan sa panel ay nakakuha pa rin ng 11 quoting venue. Ang smart order router na sadyang naghahati ng child orders ay madalas maglalagay sa dalawang strategy mo sa magkaibang book, kung saan walang engine-level check. Isinasara ng mga firm ang puwang na iyon upstream, sa order management layer, bago lumabas ang anumang order sa building. Ang sarili mong mga order na nakapuwesto sa magkabilang side sa parehong presyo sa dalawang book ay lumilikha rin ng locked o crossed market, na may sarili nitong mga rule.

Ilang match ang ginagawa ng isang book sa isang session

Nasa daanan ng bawat match na ginagawa ng engine ang self-match check. Sa isang liquid na pangalan, abala ang daanang iyon buong araw. Hinahati ng panel sa ibaba ang isang buong session ng isang stock sa fifteen minute slice at binibilang ang mga print sa bawat isa. Pinananatili lamang nito ang mga slice na may hindi bababa sa 200.

QueryMga print bawat 15-minutong bucket, isang buong session
Ang eksaktong SQL sa likod ng bawat numero
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
Run this yourself

Noong 04:00 ET, nag-print ang pangalang iyon ng 9402 trade sa loob ng fifteen minutes. Noong 19:45 ET naman, nag-print ito ng 1345, sa kabuuang 64 bucket na umabot sa 200-print floor. Bawat print ay isang pares ng order na pinagtagpo ng engine. Binabasa ng check ang identifier sa magkabilang side bago nito payagang magtagpo ang mga ito. Bawat order na nananatili sa book ay maaaring makipagtagpo sa isa pang order mula sa parehong account sa susunod na bahagi ng araw.

Ano ang ipinapakita ng tape kapag nag-print ang isang self-trade

Walang naiiwan kapag napigilan ang isang self-match. Ang tape ay naglalaman lamang ng mga na-execute, at bawat print ay may condition flag: mga code na ikinakabit ng reporting venue upang ilarawan kung paano naganap ang trade. Hinahati ng panel sa ibaba ang isang buong session ng isang stock ayon sa mga flag na ito.

QueryMga trade condition flag sa isang buong session
Ang eksaktong SQL sa likod ng bawat numero
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 10
Run this yourself

Saklaw ng Odd Lot Trade ang 48.34% ng mga flagged print sa session na iyon, at inililista ng panel ang 10 pinakakaraniwang flag ng araw. Basahin ang listahan at pansinin kung ano ang wala. Walang code na nagsasabing nagmula sa isang firm ang dalawang order. Ang self-trade na nag-print ay mukhang ordinaryong trade sa presyong iyon. Kaya gumagamit ang surveillance ng tape, participant identifiers na hawak ng venue, at mga account number na dala ng mga order.

Kung saan nagtatapos ang self-match prevention at nagsisimula ang wash trade law

Ang self-match prevention ay isang venue service. Nag-o-opt in ka rito, kino-configure ito, at masayang i-ma-match ng engine ang dalawang order mo kung hindi mo ito ise-set up. Hindi optional ang wash trade prohibition at hindi ito nakadepende sa anumang setting.

Saklaw ng Section 9(a)(1) ng Securities Exchange Act of 1934 ang mga transaction sa securities na walang pagbabago sa beneficial ownership at ipinasok upang lumikha ng mapanlinlang na anyo ng aktibong trading. May katumbas na probisyon para sa futures sa Commodity Exchange Act, at inuulit ito ng CME Rule 534 sa exchange rulebook. Nasa ilalim ng dalawang ito ang FINRA Rule 5210 para sa broker-dealers, at direktang tinatalakay ng supplementary material nito ang self-trades: ang mga trade sa pagitan ng dalawang unrelated algorithm sa isang firm ay hindi awtomatikong paglabag, ngunit inaasahang may policies ang firm upang i-review at bawasan ang mga ito.

Dalawang consequence ang mahalaga para sa sinumang nagpapatakbo ng higit sa isang strategy. Maaaring lumabag sa prohibition ang isang self-cross sa venue kung saan wala kang itinakdang self-match instruction, dahil nakabatay ang rule sa transaction at sa layunin sa likod nito. Walang nilalabag ang self-cross na napigilan ng self-match prevention. Iyan mismo ang layunin ng mekanismo.

Paano ito kino-configure ng mga operator: CME, ICE, LME, at MiFID II

Sa CME Globex, nakabatay ang self-match prevention sa identifier na isinusumite sa order entry. Nirerehistro ng mga firm ang mga identifier na gagamitin nila, may tig-iisang identifier ang bawat order, at may paired instruction na nagsasaad kung aling side ang kakanselahin ng engine kapag nagtagpo ang dalawang order na may identifier na iyon. Karaniwang nagma-match ang mga order na ipinadala nang walang identifier. Ito ang karaniwang patibong para sa bagong operator: naka-off ang default.

Pinapatakbo ng ICE ang Self-Trade Prevention Functionality, na kino-configure laban sa trading firm identifier sa halip na order by order, at may parehong uri ng cancel outcome. Nag-aalok ang London Metal Exchange ng Self-Execution Prevention sa LMEselect para sa member trading identifiers. Sa Europe, inaatasan ng MiFID II Article 17 ang bawat investment firm na sangkot sa algorithmic trading na magkaroon ng systems and controls, kabilang ang testing, kill functionality, at pag-iwas sa disorderly trading. Naglalagay ang Article 48 ng katumbas na obligasyon sa venue mismo, at naging standard equipment ang venue-side prevention tools kasabay nito.

Nasa account o firm level ang configuration, hindi symbol by symbol. Ipinapakita ng laki ng option surface ng isang underlying kung bakit.

QueryMga option contract na may volume sa iisang underlying, June 2026
Ang eksaktong SQL sa likod ng bawat numero
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
Run this yourself

Noong 2026-06-01, may 1579 separately tradable contract na may volume ang isang underlying, na nakakalat sa 112 strike. Saklaw ng panel ang 21 session na may katulad na anyo. Hindi praktikal ang pag-set ng rule contract by contract sa ganitong dami. Sa halip, ikinakabit ang identifier sa account at kasama ito sa bawat order na ipinapadala ng account na iyon.

Ang failure mode na hindi ipapaliwanag ng fill logs mo

Ganito ito lumalabas sa aktuwal na operasyon. Sa cancel-newest instruction, kinakansela agad ang order na ipinadala mo pagdating nito, bago ito makapag-match. Mula sa loob ng bot, mababasa ang sequence bilang bagong order na sinundan ng cancel na hindi naman hiningi ng code. Walang fill, reject, o error string na nagsasaad ng dahilan. Kaya kapag unang naranasan ito ng mga operator, karaniwan nilang hinahanap ang bug sa sarili nilang cancel path.

Dalawang habit ang makatutulong para maging malinaw ito. I-log nang verbatim ang order status message ng venue sa halip na normalized summary, dahil karaniwang nasa isang field ng message na iyon ang prevention reason. Maglagay ng alert sa anumang cancel na hindi nagmula sa sarili mong code. Dapat kabilang ang alert na iyon sa automated trading circuit breakers mo, dahil pareho ang klase ng failure: binago ng venue ang order state mo, ngunit nagpatuloy ang process na parang walang nangyari.

FAQ

Ano ang self-match prevention?

Isa itong matching engine check na pumipigil sa dalawang order na may parehong firm o account identifier na mag-trade sa isa’t isa. Kapag dapat silang mag-match, kinakansela ng engine ang resting order, ang incoming order, o pareho, ayon sa instruction na nakakabit sa order.

Pareho ba ang self-trade at wash trade?

Hindi. Ang self-trade ay anumang execution sa pagitan ng dalawang order mula sa parehong beneficial owner. Ang wash trade ay isang self-trade na ipinasok nang walang tunay na market risk at may layuning lumikha ng mapanlinlang na anyo ng market activity. Iba ang pagtrato sa hindi sinasadyang self-trade sa pagitan ng unrelated algorithm kumpara sa sinadyang inayos na self-trade, ngunit inaasahan pa rin ang mga firm na i-monitor ang mga ito.

Gumagana ba ang self-match prevention sa iba’t ibang exchange?

Hindi. Inilalapat ng bawat matching engine ang check lamang sa mga order sa sarili nitong book. Maaaring mag-trade sa isa’t isa ang dalawang order mula sa isang firm na nakapuwesto sa dalawang venue. Ang sariling pre-trade check ng firm sa itaas ng mga venue ang kailangang humawak sa sitwasyong iyon.

Bakit nakansela ang order ko nang walang fill at walang dahilan?

Isang posibleng dahilan ang cancel-newest self-match instruction. Kinansela ng venue ang order pagdating nito, bago ito makapag-match sa resting order na may identifier mo. Karaniwang lumalabas ang dahilan bilang field sa cancel message ng venue, hindi bilang rejection.

Aling mga venue ang nangangailangan ng self-match prevention identifier?

Nagkakaiba ang requirements ayon sa venue at product. Nangangailangan ang CME ng identifier sa order entry na dapat munang mairehistro. May sarili namang firm-level configuration ang ICE at London Metal Exchange, habang may systems and controls duties ang European venues sa ilalim ng MiFID II. Ang venue rulebook para sa product na tina-trade mo ang pangunahing sanggunian.


May SQL ang bawat panel dito na siyang gumawa sa data nito, kaya maaari mong i-expand ang alinman at basahin ito. Para bilangin ang mga venue na nag-quote sa pangalang tina-trade mo, o hatiin ang isang session ayon sa condition flag, itanong ito sa plain English sa Strasmore terminal.

#market structure#matching engine#wash trades#trading bots#exchange rules