Strasmore Research
Analysen Matt ConnorVon Matt Connor

Selbstmatch-Vermeidung und Wash Trades erklärt

Wie Selbstmatch-Vermeidung in der Matching Engine eigene Orders stoppt, warum sie Wash Trades nicht ersetzt und worauf Sie bei mehreren Strategien achten müssen.

Selbstmatch-Vermeidung ist eine Funktion der Matching Engine. Sie verhindert, dass zwei Orders derselben Firma miteinander handeln. Bei der Einstellung erhält jede Order eine Kennung. Wenn zwei Orders mit derselben Kennung einander kreuzen würden, löscht die Engine eine oder beide Orders, bevor ein Trade ausgeführt wird. Die Selbstmatch-Vermeidung ist eine technische Funktion des Handelsplatzes, die Sie aktivieren. Das Verbot von Wash Trades ist dagegen gesetzlich vorgeschrieben. Beides deckt nicht denselben Sachverhalt ab.

Sobald eine zweite Strategie ein Instrument quotiert, das bereits von Ihrer ersten Strategie quotiert wird, gilt diese Regel für Sie. Ein zweistufiger Grid-Bot auf einem Symbol unterliegt ihr genauso wie ein Bank-Desk.

So funktioniert die Selbstmatch-Vermeidung in der Matching Engine

Jede Order, die ein Handelsplatz erhält, enthält Felder, die die Engine vor dem Matching ausliest: Seite, Preis, Stückzahl und Gültigkeitsdauer. Die Selbstmatch-Vermeidung fügt zwei weitere Angaben hinzu. Die erste ist eine Kennung. Sie besteht aus einer Zahl oder Zeichenfolge und gibt an, zu welcher Firma, welchem Konto oder welcher Strategiefamilie die Order gehört. Die zweite ist eine Anweisung. Sie legt fest, was die Engine tun soll, wenn zwei aktive Orders mit dieser Kennung miteinander handeln würden.

Die Prüfung erfolgt in dem Moment, in dem eine aggressive Order den Preis einer ruhenden Order erreicht, mit der sie matchen würde. Vier Ergebnisse sind üblich:

  • Die ruhende Order wird gelöscht. Die eingehende Order wird weiter in das Orderbuch eingestellt und kann mit anderen Orders auf diesem Preis matchen.
  • Die eingehende Order wird gelöscht. Die ruhende Order behält ihre Position in der Warteschlange, während die aggressive Order entfällt.
  • Beide Orders werden gelöscht. Dies ist die strengste Einstellung.
  • Reduzieren und löschen. Die größere Order wird um die Stückzahl der kleineren reduziert. Die kleinere Order wird gelöscht, und der Rest der größeren Order bleibt aktiv.

In keinem der vier Fälle findet ein Trade statt. Es erscheint kein Print im Tape, es wird kein Fill-Log-Eintrag erzeugt, und stattdessen trifft eine unaufgeforderte Löschung für eine oder beide Orders ein.

Die stille Kostenkomponente ist die Position in der Warteschlange. Eine ruhende Order, die nach der Anweisung „älteste Order löschen“ entfernt wird, verliert den gesamten Vorteil ihrer bisherigen Wartezeit. Nach der Preis-Zeit-Priorität ist dieser Verlust vollständig: Beim erneuten Einstellen steht die Order hinter allen, die während ihrer Liegezeit der Warteschlange beigetreten sind. Unser Leitfaden zur Schätzung der Warteschlangenposition erläutert, welchen Wert diese Position hat.

Ein Instrument, viele Orderbücher

Die Prüfung erfolgt je Handelsplatz. Eine Engine vergleicht nur die Orders, die sie selbst verwaltet. Zwei Ihrer Orders, die in zwei verschiedenen Orderbüchern liegen, sind füreinander unsichtbar. Kein US-amerikanischer Aktienmarktmechanismus erstreckt sich über beide Bücher. Eine einzelne US-Aktie wird gleichzeitig in vielen Orderbüchern quotiert. Die folgende Grafik zählt für sechs bekannte Namen die unterschiedlichen Handelsplätze, an denen sie während eines Zeitfensters von fünfzehn Minuten am Morgen des 10. Juni 2026 quotiert und gehandelt wurden.

AbfrageHandelsplätze mit Quotes und Ausführungen derselben Aktie in einem 15-Minuten-Fenster
Das exakte SQL hinter jeder Zahl
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

AAPL erhielt in diesem Viertelstundenintervall Gebote von 16 verschiedenen Handelsplätzen. Prints wurden an 17 dieser Plätze ausgeführt. Der am dünnsten gehandelte Name in der Grafik erhielt weiterhin Quotes von 11 Handelsplätzen. Ein Smart Order Router, der Child-Orders systematisch aufteilt, platziert Ihre beiden Strategien häufig in unterschiedlichen Orderbüchern. Dort greift keine Prüfung auf Ebene der Matching Engine. Firmen schließen diese Lücke vorgelagert in der Order-Management-Schicht, bevor eine Order das Unternehmen verlässt. Eigene Orders, die auf gegenüberliegenden Seiten zum selben Preis in zwei Orderbüchern liegen, erzeugen außerdem einen locked oder crossed market, für den eigene Regeln gelten.

Wie viele Matches ein Orderbuch in einer Sitzung erzeugt

Die Selbstmatch-Prüfung liegt im Pfad jedes Matches, das die Engine erzeugt. Bei einem liquiden Namen bleibt dieser Pfad den ganzen Tag über stark ausgelastet. Die folgende Grafik teilt eine vollständige Handelssitzung einer Aktie in Fünfzehn-Minuten-Intervalle auf und zählt die Prints in jedem Intervall. Berücksichtigt werden nur Intervalle mit mindestens 200 Prints.

AbfrageAusführungen je 15-Minuten-Intervall, eine vollständige Sitzung
Das exakte SQL hinter jeder Zahl
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

Um 04:00 ET wurden bei diesem Namen innerhalb von fünfzehn Minuten 9402 Trades ausgeführt. Um 19:45 ET waren es 1345 Trades. Insgesamt gab es 64 Intervalle, die die Schwelle von 200 Prints erreichten. Jeder Print entspricht einem Orderpaar, das die Engine zusammengeführt hat. Vor der Ausführung prüft sie die Kennungen auf beiden Seiten. Jede Order, die im Orderbuch ruht, kann später am selben Tag mit einer weiteren Order desselben Kontos zusammentreffen.

Was das Tape bei einem ausgeführten Self-Trade zeigt

Eine verhinderte Selbstübereinstimmung hinterlässt keine Spuren. Das Tape enthält nur ausgeführte Trades. Jeder Print kommt mit Condition Flags, also Codes, die der meldende Handelsplatz zur Beschreibung des Handelsablaufs anhängt. Die folgende Grafik unterteilt eine vollständige Sitzung einer Aktie nach diesen Flags.

AbfrageKennzeichnungen der Handelsbedingungen während einer vollständigen Sitzung
Das exakte SQL hinter jeder Zahl
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

Odd Lot Trade umfasst 48.34% der gekennzeichneten Prints dieser Sitzung. Die Grafik führt die 10 häufigsten Flags des Tages auf. Achten Sie beim Lesen auf das, was fehlt. Kein Code weist darauf hin, dass zwei Orders von einer Firma stammten. Ein ausgeführter Self-Trade sieht bei diesem Preis wie jeder andere Trade aus. Die Überwachung stützt sich daher auf das Tape sowie auf die Teilnehmerkennungen und Kontonummern, die der Handelsplatz zu den Orders speichert.

Wo die Selbstmatch-Vermeidung endet und das Wash-Trade-Recht beginnt

Die Selbstmatch-Vermeidung ist ein Service des Handelsplatzes. Sie entscheiden, ob Sie ihn nutzen, und konfigurieren ihn. Wenn Sie ihn nicht einrichten, wird die Engine Ihre beiden Orders ohne Weiteres miteinander matchen. Das Verbot von Wash Trades ist dagegen nicht optional und hängt von keiner Einstellung ab.

Section 9(a)(1) des Securities Exchange Act von 1934 erfasst Wertpapiertransaktionen ohne Änderung des wirtschaftlichen Eigentums, wenn sie den Anschein eines aktiven Handels irreführend erzeugen sollen. Der Commodity Exchange Act enthält die entsprechende Regel für Futures. CME Rule 534 übernimmt sie in das Regelwerk der Börse. Für Broker-Dealer gilt zusätzlich FINRA Rule 5210. Das dazugehörige ergänzende Material behandelt Selbst-Trades unmittelbar: Trades zwischen zwei voneinander unabhängigen Algorithmen einer Firma sind für sich genommen kein Regelverstoß. Die Firma muss jedoch Richtlinien unterhalten, mit denen sie solche Trades überprüft und reduziert.

Für jeden, der mehr als eine Strategie betreibt, ergeben sich daraus zwei Konsequenzen. Ein Self-Cross kann auf einem Handelsplatz gegen das Verbot verstoßen, selbst wenn Sie dort keine Selbstmatch-Anweisung eingerichtet haben. Denn die Regel knüpft an die Transaktion und die dahinterstehende Absicht an. Ein Self-Cross, den die Selbstmatch-Vermeidung verhindert hat, verstößt dagegen gegen nichts. Genau dafür ist die Funktion vorgesehen.

So konfigurieren Betreiber die Funktion: CME, ICE, LME und MiFID II

Auf CME Globex basiert die Selbstmatch-Vermeidung auf einer Kennung, die bei der Auftragseingabe übermittelt wird. Firmen registrieren die Kennungen, die sie verwenden wollen. Jede Order enthält eine solche Kennung. Eine zusätzliche Anweisung legt fest, welche Seite die Engine löscht, wenn zwei Orders mit derselben Kennung zusammentreffen. Orders ohne Kennung werden normal gematcht. Das ist die typische Falle für neue Betreiber: Standardmäßig ist die Funktion deaktiviert.

ICE betreibt die Self-Trade Prevention Functionality. Sie wird anhand einer Kennung der Handelsfirma und nicht für jede Order einzeln konfiguriert. Die möglichen Löschvarianten sind vergleichbar. Die London Metal Exchange bietet auf LMEselect die Self-Execution Prevention für Handelskennungen von Mitgliedern an. In Europa verpflichtet MiFID II Artikel 17 jedes Wertpapierunternehmen, das algorithmischen Handel betreibt, zu geeigneten Systemen und Kontrollen. Dazu gehören Tests, eine Kill-Funktion und die Vermeidung eines ungeordneten Handels. Artikel 48 auferlegt dem Handelsplatz eine entsprechende Pflicht. Funktionen zur Vermeidung von Self-Matches wurden parallel dazu zum Standard.

Die Konfiguration erfolgt auf Konto- oder Firmenebene und nicht für jedes Symbol einzeln. Die Größe der Optionsoberfläche eines einzelnen Basiswerts zeigt, warum.

AbfrageOptionskontrakte mit Volumen auf einen Basiswert, Juni 2026
Das exakte SQL hinter jeder Zahl
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

Am 2026-06-01 umfasste ein Basiswert 1579 separat handelbare Kontrakte mit Volumen. Diese verteilten sich auf 112 Ausübungspreise. Die Grafik umfasst 21 Sitzungen mit ähnlicher Struktur. Bei dieser Anzahl ist eine Konfiguration für jeden einzelnen Kontrakt nicht praktikabel. Stattdessen wird die Kennung dem Konto zugeordnet und mit jeder Order übertragen, die dieses Konto sendet.

Der Fehler, den Ihre Fill-Logs nicht erklären werden

So zeigt sich das in der Praxis. Eine Anweisung zum Löschen der neuesten Order entfernt die soeben gesendete Order unmittelbar nach ihrem Eingang, bevor sie matchen kann. Im Bot erscheint die Abfolge als neue Order und anschließende Löschung, die von keiner eigenen Komponente angefordert wurde. Es gibt keinen Fill, keine Ablehnung und keine Fehlermeldung mit dem entsprechenden Grund. Betreiber, die dieses Verhalten zum ersten Mal sehen, suchen daher häufig nach einem Fehler in ihrer eigenen Löschlogik.

Zwei Gewohnheiten machen den Vorgang nachvollziehbar. Protokollieren Sie die Statusmeldungen des Handelsplatzes wörtlich und nicht als normalisierte Zusammenfassung. Der Grund für die Verhinderung wird meist als Feld in dieser Meldung übertragen. Lösen Sie einen Alarm für jede Löschung aus, die nicht von Ihrem eigenen Code stammt. Dieser Alarm gehört zu Ihren Schutzschaltern für den automatisierten Handel, weil es sich um dieselbe Fehlerklasse handelt: Der Handelsplatz hat den Status Ihrer Order geändert, während Ihr Prozess so weiterlief, als wäre nichts geschehen.

FAQ

Was ist Selbstmatch-Vermeidung?

Eine Prüfung der Matching Engine, die verhindert, dass zwei Orders mit derselben Firmen- oder Kontokennung miteinander handeln. Wenn sie matchen würden, löscht die Engine je nach Anweisung die ruhende Order, die eingehende Order oder beide.

Ist ein Self-Trade dasselbe wie ein Wash Trade?

Nein. Ein Self-Trade ist jede Ausführung zwischen zwei Orders desselben wirtschaftlich Berechtigten. Ein Wash Trade ist ein Self-Trade, der ohne echtes Marktrisiko und mit der Absicht eingegangen wird, einen irreführenden Eindruck von Handelsaktivität zu erzeugen. Unbeabsichtigte Self-Trades zwischen voneinander unabhängigen Algorithmen werden anders behandelt als arrangierte Trades. Firmen müssen sie dennoch überwachen.

Funktioniert die Selbstmatch-Vermeidung über verschiedene Börsen hinweg?

Nein. Jede Matching Engine wendet die Prüfung nur auf Orders in ihrem eigenen Orderbuch an. Zwei Orders einer Firma, die auf zwei Handelsplätzen liegen, können miteinander handeln. Für diese Prüfung ist die Firma selbst mit ihren Pre-Trade-Kontrollen oberhalb der Handelsplätze zuständig.

Warum wurde meine Order ohne Fill und ohne Begründung gelöscht?

Eine Anweisung zum Löschen der neuesten Order bei einem Self-Match ist eine mögliche Ursache. Der Handelsplatz löscht die Order bei ihrem Eingang, bevor sie mit einer ruhenden Order mit Ihrer Kennung matchen kann. Der Grund steht meist als Feld in der Löschmeldung des Handelsplatzes und nicht in einer Ablehnung.

Welche Handelsplätze verlangen eine Kennung zur Selbstmatch-Vermeidung?

Die Anforderungen unterscheiden sich je nach Handelsplatz und Produkt. CME verlangt bei der Auftragseingabe eine zuvor registrierte Kennung. ICE und die London Metal Exchange bieten eigene Konfigurationen auf Firmenebene an. Europäische Handelsplätze unterliegen den Pflichten zu Systemen und Kontrollen nach MiFID II. Maßgeblich ist das Regelwerk des Handelsplatzes für das von Ihnen gehandelte Produkt.


Jede Grafik enthält das SQL, mit dem sie erzeugt wurde. Öffnen Sie eine beliebige Grafik und lesen Sie die Abfrage. Wenn Sie die Handelsplätze zählen wollen, an denen ein von Ihnen gehandelter Name quotiert wird, oder eine Sitzung nach Condition Flags aufschlüsseln möchten, stellen Sie die Frage auf Deutsch im Strasmore-Terminal.

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