Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Warum Market Maker durch adverse Selektion verlieren

Warum verlieren Market Maker Geld? Adverse Selektion ist der Hauptgrund. Markout-Kurven messen den Effekt, ergänzt um Inventarrisiko und Kosten der Queue-Position.

Market Maker verlieren durch adverse Selektion Geld: Der Trader, der ein Verkaufsangebot aus dem Orderbuch nimmt, weiß oft bereits, dass dieses Angebot veraltet ist. Jeder Fill beginnt mit einem kleinen Ertrag von ungefähr der Hälfte des Spreads. Die folgenden Sekunden entscheiden, wie viel davon bestehen bleibt. Das Messinstrument ist der Markout: eine vorzeichenbehaftete Preisveränderung über einen festgelegten Zeitraum nach einem Fill. Die folgenden Darstellungen erstellen echte Markout-Kurven aus ausgeführten Trades und Quotes. Unser begleitender Beitrag zu wie Market Maker Geld verdienen behandelt die Ertragsseite derselben Rechnung.

Was bedeutet adverse Selektion im Trading?

Ein Market Maker stellt gleichzeitig zwei Preise: einen Geldkurs zum Kauf und einen Briefkurs zum Verkauf, jeweils für eine angegebene Stückzahl. Die Differenz zwischen beiden ist der Bid-Ask-Spread, und das Geschäftsmodell folgt einer einfachen Rechnung. Zum Geldkurs kaufen, zum Briefkurs verkaufen, dies zehntausende Male am Tag wiederholen: Im Durchschnitt ergibt sich pro Hin- und Rückgeschäft ein Ertrag nahe am Spread.

Diese Rechnung setzt voraus, dass beide Seiten gleichmäßig zum Zug kommen. Das tun sie nicht. Ein ruhender Quote ist eine permanente Option, die jeder zu einem selbst gewählten Zeitpunkt ausüben kann. Die aufmerksamsten Trader wählen dabei die besten Zeitpunkte. Ein Fonds, der eine große übergeordnete Order ausführt, kauft weiter, solange das Angebot günstig ist. Ein System, das bereits eine Bewegung in einem korrelierten Instrument erkannt hat, handelt auf der Seite, deren Preis noch nicht angepasst wurde.

Adverse Selektion bezeichnet die Verzerrung in dieser Mischung: Die Fills eines Market Makers stammen überproportional von Tradern, die diese Ausführung besonders dringend wollten. Sichtbar wird das an der Lücke zwischen dem Spread, den ein Market Maker quotiert, und dem Spread, den er tatsächlich behält.

Was ist ein Markout im Market Making?

Ein Markout beantwortet nach jedem Fill eine Frage: Wo lag der Preis eine festgelegte Zahl von Sekunden später, gemessen von der Seite, auf der ich stand? Angenommen, ein Market Maker verkauft 100 Aktien zu 50,02 USD, während der Midpoint bei 50,00 USD liegt. Dieser Fill beginnt mit einem Ertrag von zwei Cent je Aktie, also 20 Mils in den Einheiten des Desks. Ein Mil entspricht einem Zehntelcent. Steigt der Midpoint 60 Sekunden später auf 50,04 USD, beträgt der Markout nach 60 Sekunden minus 20 Mils. Der anfängliche Ertrag ist vollständig verschwunden, und derselbe Betrag noch einmal dazu.

Wird dieser Wert über alle Fills eines Zeitfensters gemittelt und gegen den jeweiligen Zeitraum aufgetragen, entsteht eine Markout-Kurve. Die folgende Darstellung erstellt eine solche Kurve für AAPL über ein dreistündiges Zeitfenster zur Mittagszeit am Donnerstag, dem 14. Mai 2026. Jeder Print erhält sein Vorzeichen relativ zum Midpoint der Sekunde, in der er ausgeführt wurde. Ein Print über dem Midpoint zählt als Kauf des Takers; der Market Maker steht damit auf der Verkaufsseite.

AbfrageWie viel vom Spread bleibt: AAPL-Markout-Kurve, 1 Sekunde bis 5 Minuten
Das exakte SQL hinter jeder Zahl
WITH
  qs AS (
    SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
           avg((toFloat64(bid_price) + toFloat64(ask_price)) / 2) AS mid
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'AAPL'
      AND sip_timestamp >= '2026-05-14 14:00:00'
      AND sip_timestamp <  '2026-05-14 17:06:00'
      AND bid_price > 0 AND ask_price > bid_price
    GROUP BY ts
  ),
  fills AS (
    SELECT t.ts AS ts, t.px AS px, t.shares AS shares, q.mid AS mid_at_fill,
           if(t.px > q.mid, 1, -1) AS taker_side
    FROM (
      SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
             toFloat64(price) AS px, toUInt64(size) AS shares
      FROM global_markets.stocks_trades
      WHERE ticker = 'AAPL'
        AND sip_timestamp >= '2026-05-14 14:00:00'
        AND sip_timestamp <  '2026-05-14 17:00:00'
        AND size > 0
    ) AS t
    INNER JOIN qs AS q ON q.ts = t.ts
    WHERE t.px != q.mid AND abs(t.px / q.mid - 1) < 0.02
  )
SELECT
  concat('+', toString(e.secs), 's')                          AS horizon,
  round(1000 * avg(e.taker_side * (e.px - e.mid_at_fill)), 2) AS edge_at_fill_mils,
  round(1000 * avg(e.taker_side * (e.px - f.mid)), 2)         AS edge_after_mils
FROM (
  SELECT toUInt32(ts + secs) AS future_ts, secs, px, mid_at_fill, taker_side
  FROM (SELECT *, arrayJoin([1, 5, 15, 30, 60, 300]) AS secs FROM fills)
) AS e
INNER JOIN qs AS f ON f.ts = e.future_ts
GROUP BY e.secs
ORDER BY e.secs
Run this yourself

Die erste Reihe zeigt den Ertrag im Moment des Fills, also die Distanz zwischen Print und Midpoint. Im Durchschnitt beträgt er 19.66 Mils je Aktie. Die zweite Reihe zeigt, was dieselben Fills wert sind, nachdem sich der Midpoint bewegen konnte: 20.5 Mils eine Sekunde später und 9.81 Mils fünf Minuten später. Die Differenz zwischen beiden Reihen zu jedem Zeitpunkt ist der Markout. Sie stammt aus dem Spread, den der Market Maker quotiert hat.

Eine Kurve, die schnell fällt und anschließend abflacht, zeigt, dass der Market Maker die unmittelbare Preisanpassung bezahlt, den verbleibenden Ertrag aber behält. Eine Kurve, die über jeden Zeitraum hinweg in dieselbe Richtung weiter fällt, zeigt Fills auf der falschen Seite eines Preises, der sich weiter bewegt. Die erste Form ist ein operativer Kostenfaktor. Die zweite zeigt, dass der Quote angepasst werden muss.

Welche Fills gehören zum toxischen Orderflow?

Der Begriff „toxisch“ hat hier eine technische Bedeutung. Orderflow ist toxisch, wenn seine Markout-Kurve über eine große Stichprobe und über jeden Zeitraum hinweg gegen den Market Maker verläuft, der den Fill ausgeführt hat. Desks sortieren Fills nach allen verfügbaren Merkmalen: Printgröße, Handelsplatz, Ordertyp und Identifikator der Gegenpartei. Die Größe ist das Merkmal, das im öffentlichen Tape enthalten ist.

AbfrageAAPL-Ausführungen nach Print-Größe: Gutschrift bei Ausführung und Wert 60 Sekunden später
Das exakte SQL hinter jeder Zahl
WITH
  qs AS (
    SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
           avg((toFloat64(bid_price) + toFloat64(ask_price)) / 2) AS mid
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'AAPL'
      AND sip_timestamp >= '2026-05-14 14:00:00'
      AND sip_timestamp <  '2026-05-14 17:06:00'
      AND bid_price > 0 AND ask_price > bid_price
    GROUP BY ts
  ),
  fills AS (
    SELECT t.ts AS ts, t.px AS px, t.shares AS shares, q.mid AS mid_at_fill,
           if(t.px > q.mid, 1, -1) AS taker_side
    FROM (
      SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
             toFloat64(price) AS px, toUInt64(size) AS shares
      FROM global_markets.stocks_trades
      WHERE ticker = 'AAPL'
        AND sip_timestamp >= '2026-05-14 14:00:00'
        AND sip_timestamp <  '2026-05-14 17:00:00'
        AND size > 0
    ) AS t
    INNER JOIN qs AS q ON q.ts = t.ts
    WHERE t.px != q.mid AND abs(t.px / q.mid - 1) < 0.02
  )
SELECT
  multiIf(s.shares < 100, 'under 100 shares',
          s.shares < 500, '100 to 499',
          s.shares < 1000, '500 to 999',
          '1,000 or more')                                    AS size_bucket,
  count()                                                     AS fills_count,
  round(1000 * avg(s.taker_side * (s.px - s.mid_at_fill)), 2) AS edge_at_fill_mils,
  round(1000 * avg(s.taker_side * (s.px - f.mid)), 2)         AS edge_after_60s_mils
FROM (SELECT *, toUInt32(ts + 60) AS future_ts FROM fills) AS s
INNER JOIN qs AS f ON f.ts = s.future_ts
GROUP BY size_bucket
ORDER BY min(s.shares)
Run this yourself

Fills unter 100 Aktien beginnen mit 19.47 Mils je Aktie und sind eine Minute später noch 15.22 Mils wert. Prints von 1.000 Aktien oder mehr beginnen mit 36.26 Mils und sind über denselben Zeitraum noch 21.34 Mils wert. Dasselbe Instrument, dieselben drei Stunden, aber eine andere Wirtschaftlichkeit je Aktie. Die größten Orders umgehen die öffentliche Warteschlange oft vollständig. Genau dafür wird ein Block Trade arrangiert.

Bestandsrisiko: Die Position, die nicht rechtzeitig abgesichert werden kann

Ein Markout-Zeitraum ist zugleich eine Uhr. Kauft ein Market Maker 5.000 Aktien zum Geldkurs, hält er 5.000 Aktien. Bis die Position abgesichert oder verkauft ist, bleibt sie der nächsten Preisbewegung ausgesetzt. Hedging erfolgt selten sofort. Eine einzelne Aktienposition kann mit einem korrelierten ETF oder einer Optionsposition ausgeglichen werden. Beide Geschäfte haben jedoch ihren eigenen zu überquerenden Spread. Das Bestandsrisiko entspricht der Größe der Bewegung, die in dieses Zeitfenster fällt. Es wird für jeden Wert auf dieselbe Weise gemessen: Wie weit bewegt sich der Preis typischerweise in der nächsten Minute und in der nächsten Stunde?

AbfrageWie weit sich der Preis bewegt, während eine Position wartet: SPY und NVDA, Mai 2026
Das exakte SQL hinter jeder Zahl
WITH
  bars AS (
    SELECT ticker, window_start,
           toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
           toFloat64(close) AS px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'NVDA')
      AND window_start >= '2026-05-01 00:00:00'
      AND window_start <  '2026-06-01 00:00:00'
      AND transactions >= 50
      AND close > 0
  ),
  starts AS (
    SELECT ticker, et_date, px, mins,
           window_start + toIntervalMinute(mins) AS future_start
    FROM (SELECT *, arrayJoin([1, 2, 5, 15, 30, 60]) AS mins FROM bars)
  )
SELECT
  concat(toString(s.mins), ' min')                                AS hold_horizon,
  round(avgIf(abs(f.px / s.px - 1) * 10000, s.ticker = 'SPY'), 1)  AS spy_drift_bps,
  round(avgIf(abs(f.px / s.px - 1) * 10000, s.ticker = 'NVDA'), 1) AS nvda_drift_bps
FROM starts AS s
INNER JOIN bars AS f
  ON f.ticker = s.ticker AND f.et_date = s.et_date AND f.window_start = s.future_start
GROUP BY s.mins
HAVING countIf(s.ticker = 'SPY') > 0 AND countIf(s.ticker = 'NVDA') > 0
ORDER BY s.mins
Run this yourself

Im Mai 2026 betrug die durchschnittliche absolute Bewegung von SPY über eine Minute 1.9 Basispunkte. Ein Basispunkt entspricht einem Hundertstelprozent. Bei NVDA waren es über denselben Zeitraum 5.5. Wird das Zeitfenster auf eine Stunde verlängert, steigen die beiden Werte auf 14.1 und 40.4. Ein Market Maker, der innerhalb einer Minute glattstellen kann, lebt mit dem ersten Wertepaar. Wer eine Stunde hält, lebt mit dem zweiten. Der beim Fill vereinnahmte Ertrag ist in beiden Fällen identisch.

Warum Market Maker am Ende der Warteschlange Geld verlieren

Börsen führen ruhende Orders zu einem Preis in der Reihenfolge ihres Eingangs zusammen: zuerst der Preis, dann die Zeit. Eine Order am Ende einer Warteschlange von 40.000 Aktien auf der Geldseite wartet, bis die 40.000 davor liegenden Aktien abgearbeitet sind. Das Schätzen der Queue-Position ist eine eigene Disziplin.

Der schwierige Punkt ist die Bedeutung von „abgearbeitet“. Eine Warteschlange leert sich auf zwei Arten. Verkäufer verkaufen weiter zum Geldkurs, bis das Niveau ausgeschöpft ist. Oder der Preis fällt durch dieses Niveau und lässt es hinter sich. Eine Order weit vorne nimmt an beiden Abläufen teil. Eine Order am Ende wird meist auf dem zweiten Weg ausgeführt, genau in dem Moment, in dem das Niveau zum alten Preis wird. Zwei Market Maker können dasselbe Instrument zum selben Preis handeln und unterschiedliche Erträge behalten. Die Position in der Warteschlange erscheint nicht im quotierten Spread, weil beide Market Maker denselben Preis gestellt haben. Sie erscheint in der Markout-Kurve.

Warum eine Ausweitung des Quotes keine kostenlose Lösung ist

Die naheliegende Antwort auf eine schlechte Markout-Kurve lautet, den Quote weiter zu stellen. Ein weiterer Quote bringt je Fill mehr Ertrag, erreicht aber weniger Fills. Beide Seiten dieses Tauschs finden sich in den Prints desselben Tages wieder, sortiert nach der Entfernung jedes Prints vom Midpoint.

AbfrageAAPL-Prints nach Abstand zum Midpoint: Volumenanteil und 60-Sekunden-Markout
Das exakte SQL hinter jeder Zahl
WITH
  qs AS (
    SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
           avg((toFloat64(bid_price) + toFloat64(ask_price)) / 2) AS mid
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'AAPL'
      AND sip_timestamp >= '2026-05-14 14:00:00'
      AND sip_timestamp <  '2026-05-14 17:06:00'
      AND bid_price > 0 AND ask_price > bid_price
    GROUP BY ts
  ),
  fills AS (
    SELECT t.ts AS ts, t.px AS px, t.shares AS shares, q.mid AS mid_at_fill,
           if(t.px > q.mid, 1, -1) AS taker_side
    FROM (
      SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
             toFloat64(price) AS px, toUInt64(size) AS shares
      FROM global_markets.stocks_trades
      WHERE ticker = 'AAPL'
        AND sip_timestamp >= '2026-05-14 14:00:00'
        AND sip_timestamp <  '2026-05-14 17:00:00'
        AND size > 0
    ) AS t
    INNER JOIN qs AS q ON q.ts = t.ts
    WHERE t.px != q.mid AND abs(t.px / q.mid - 1) < 0.02
  )
SELECT
  multiIf(s.cents <= 0.5, '0.5 cents or less',
          s.cents <= 1.0, '0.5 to 1 cent',
          s.cents <= 2.0, '1 to 2 cents',
          'over 2 cents')                                  AS distance_from_mid,
  round(100 * sum(s.shares) / sum(sum(s.shares)) OVER (), 2) AS share_of_volume_pct,
  round(1000 * avg(s.taker_side * (s.px - f.mid)), 2)        AS edge_after_60s_mils
FROM (
  SELECT *, toUInt32(ts + 60) AS future_ts, abs(px - mid_at_fill) * 100 AS cents
  FROM fills
) AS s
INNER JOIN qs AS f ON f.ts = s.future_ts
GROUP BY distance_from_mid
ORDER BY min(s.cents)
Run this yourself

Prints innerhalb eines halben Cents vom Midpoint machten 27.58 Prozent der Aktien im Zeitfenster aus. Eine Minute später waren sie 0.95 Mils je Aktie wert. Prints mit einer Entfernung von mehr als zwei Cents machten 33.19 Prozent der Aktien aus und lagen bei 46.86 Mils. Ein weiter vom Midpoint entfernter Quote wird von einem kleineren Anteil des Tagesvolumens erreicht.

Die Fill-Rate ist der erste Kostenfaktor eines Rückzugs. Börsenrebates sind der zweite. Viele Handelsplätze zahlen Market Makern für ausgeführte Aktien einen Rabatt. Diese Einnahmen skalieren mit der Zahl der Aktien, nicht mit der Breite des Quotes. Die Volumenstufen, die den Rebate-Satz bestimmen, werden monatlich gezählt. Ein schwacher Monat verändert daher die Vergütung jedes Fills im Folgemonat. Der Verzicht auf den Platz in der Warteschlange ist der letzte Kostenfaktor. Er fällt beim Herausnehmen an und erneut, wenn man beim Wiedereinstieg am Ende der Schlange steht. Jeder Market Maker befindet sich irgendwo auf dieser Kurve. Wer die eigenen Markouts am präzisesten misst, kann nahe am besten Quote bleiben und den Ertrag dennoch behalten. Diese Messung ist der Vorteil, den die größten Market Maker verteidigen.

FAQ

Verlieren Market Maker bei einzelnen Trades Geld?

Regelmäßig. Ein Market-Making-Buch besteht aus einer Verteilung kleiner Gewinne und kleiner Verluste. Die Verlust-Fills häufen sich in den Momenten unmittelbar vor einer Preisbewegung. Das Geschäftsmodell beruht auf dem Durchschnitt über Millionen von Fills.

Was ist ein Markout im Trading?

Ein Markout ist die Veränderung des Marktpreises über einen festgelegten Zeitraum nach einem Fill. Das Vorzeichen wird aus der Perspektive einer Seite vergeben. Eine positive Zahl bedeutet, dass diese Seite gewonnen hat. Aktiendesks geben Markouts in Mils je Aktie an, Optionsdesks in Ticks je Kontrakt.

Was bedeutet toxischer Orderflow?

Damit wird Orderflow bezeichnet, dessen Markout-Kurve dauerhaft gegen den Market Maker verläuft, der ihn ausführt. Der Preis bewegt sich nach jedem Fill weiter vom Market Maker weg. Der Begriff beschreibt eine statistische Eigenschaft eines Orderstroms. Er enthält keine Bewertung eines einzelnen Traders.

Warum weiten Market Maker Spreads aus, statt ihre Quotes zurückzuziehen?

Ein weiterer Quote hält den Market Maker im Markt, und der Preis kompensiert eine schlechtere Markout-Kurve. Das Zurückziehen des Quotes bringt keinen Ertrag und kostet zusätzlich die Position in der Warteschlange. Desks nutzen beide Maßnahmen. Die Entscheidung hängt davon ab, wie lange der Quote voraussichtlich veraltet bleibt.

Wie wird adverse Selektion gemessen?

Mit Markouts. Jeder Fill erhält das Vorzeichen der Seite, auf der der Market Maker stand. Anschließend wird die Veränderung des Midpoints über festgelegte Zeiträume gemittelt. Die Differenz zwischen dem Ertrag beim Fill und dem Wert zu jedem späteren Zeitpunkt ist die Kosten der adversen Selektion, gemessen in denselben Einheiten wie der Spread.

So wurden diese Zahlen erstellt

Jede AAPL-Darstellung verwendet zwei öffentliche Datensätze: das Trade-Tape und das Quote-Tape. Jeder Print zwischen 14:00 und 17:00 UTC am 14. Mai 2026 wird dem durchschnittlichen nationalen besten Geld- und Briefkurs-Midpoint der Sekunde zugeordnet, in der er ausgeführt wurde, und erhält ein Vorzeichen. Ein Print über diesem Midpoint zählt als Kauf des Takers und stellt den Market Maker damit auf die Verkaufsseite. Prints genau am Midpoint erhalten keine Seitenzuordnung und werden entfernt. Gleiches gilt für Prints, die mehr als zwei Prozent vom Midpoint entfernt liegen. Quotes, bei denen der Geldkurs den Briefkurs erreicht oder überschreitet, werden ausgeschlossen, weil ein locked oder crossed market keinen nutzbaren Midpoint hat.

Das Matching auf der zweiten Zeitebene nähert den Quote an, der zum Zeitpunkt des Fills auf Mikrosekundenebene galt, und glättet die schnellsten Aktualisierungen. Die Preise für die einzelnen Zeiträume stammen aus denselben Midpoints auf Sekundenebene. Für die Bestandsdarstellung werden Ein-Minuten-Balken verwendet. Berücksichtigt werden nur Balken mit mindestens 50 Prints. Dadurch konzentriert sich die Stichprobe auf die umsatzstärksten Stunden des Tages.

Jede Darstellung enthält das SQL, mit dem sie erstellt wurde. Die Berechnung des Markouts kann daher Zeile für Zeile geprüft werden. Um die Kurve für einen anderen Wert oder einen anderen Tag nachzubauen, formulieren Sie die Anfrage in einfachem Englisch im Strasmore-Terminal.