Adverse Selection erkennen: Toxizität im Orderbuch.
Wenn ein Trade ausgeführt wird, gibt es zwei Möglichkeiten: Entweder die Gegenseite ist uninformiert (Liquidity-Taker, der einen Hedge braucht) oder informiert (jemand, der weiß, was Sie nicht wissen). Im ersten Fall verdienen Sie den Spread. Im zweiten Fall zahlen Sie ihn — und mehr. Die Kunst des Market-Makings besteht darin, diese beiden Fälle zu unterscheiden, bevor der Trade stattfindet.
Was Adverse Selection wirklich kostet.
Adverse Selection ist kein abstraktes Konzept. Sie können sie in Ihren P&L-Daten direkt messen, indem Sie sich anschauen, wie sich der Mittelkurs nach einem Trade entwickelt. Wird Ihr Bid gefüllt und der Mittelkurs fällt unmittelbar danach, war der Trade toxisch — die Gegenseite wusste, dass der Preis fallen würde. Steigt der Mittelkurs nach einem Bid-Fill, war der Flow benign.
In Studien zu hochfrequenten Märkten liegt der Anteil toxischer Trades typischerweise bei 20–40 %. Bei diesen Trades verlieren Sie nicht nur den Spread, sondern oft ein Mehrfaches davon. Wer Adverse Selection nicht in seine Quote-Strategie einbaut, gibt einen relevanten Teil seines Kapitals an informierte Akteure ab.
Toxizität messen: drei Signale.
Es gibt keine perfekte Toxizitätsmessung — aber drei Signale, die sich kombinieren lassen und in der Praxis robust funktionieren.
1. Order-Flow-Imbalance (OFI). Wenn signifikant mehr Volumen am Bid verschwindet (durch Aggressor-Sells oder Cancellations) als am Ask, sagt das eine unmittelbar bevorstehende Mittelkurs-Bewegung nach unten voraus. Cont, Kukanov und Stoikov haben gezeigt, dass OFI ein deutlich besserer Prädiktor für kurzfristige Preisbewegungen ist als der Volume-Imbalance allein.
2. Microprice vs. Midprice. Der Microprice ist ein volumengewichteter
Mittelkurs: microprice = (bid · ask_size + ask · bid_size) / (bid_size + ask_size).
Wenn der Microprice deutlich über dem Mittelkurs liegt, deutet das Orderbuch auf
Aufwärtsdruck hin. Ein Trade, der gegen diesen Druck geht (Bid-Fill, wenn Microprice hoch
ist), ist mit höherer Wahrscheinlichkeit toxisch.
3. VPIN (Volume-Synchronized Probability of Informed Trading). Ein Maß von Easley, López de Prado und O'Hara, das das Volumen in Buckets zerlegt und für jeden Bucket den Anteil der Buy- vs. Sell-Volumina misst. Hoher VPIN signalisiert toxische Phasen und korreliert empirisch mit Flash-Crashes.
Order-Flow-Imbalance in Code.
Hier eine kompakte Implementierung, die aus einem Strom von Orderbuch-Snapshots ein OFI-Signal berechnet:
from dataclasses import dataclass
from collections import deque
@dataclass
class BookLevel:
bid: float
bid_size: float
ask: float
ask_size: float
class OFICalculator:
def __init__(self, window: int = 50):
self.history = deque(maxlen=window)
self.last: BookLevel | None = None
def update(self, level: BookLevel) -> float:
if self.last is None:
self.last = level
return 0.0
# OFI-Komponente: Veränderung an Bid und Ask
if level.bid > self.last.bid:
bid_change = level.bid_size
elif level.bid < self.last.bid:
bid_change = -self.last.bid_size
else:
bid_change = level.bid_size - self.last.bid_size
if level.ask > self.last.ask:
ask_change = -self.last.ask_size
elif level.ask < self.last.ask:
ask_change = level.ask_size
else:
ask_change = level.ask_size - self.last.ask_size
ofi = bid_change - ask_change
self.history.append(ofi)
self.last = level
# Normalisiert auf rollendes Fenster
return sum(self.history) / max(1, len(self.history))
Der Output ist ein Signal, das positiv bei Aufwärtsdruck und negativ bei Abwärtsdruck ist. Wie stark Sie es in Ihre Quote-Berechnung einfließen lassen, hängt von Ihrer empirischen Korrelation mit der Mittelkurs-Veränderung über den nächsten Sekunden ab.
Quote-Anpassung an Toxizität.
Sobald Sie ein Toxizitätssignal haben, gibt es drei Wege, es in Ihre Quotes einzubauen:
- Bias-Verschiebung: Wenn das Signal Aufwärtsdruck zeigt, verschieben Sie Bid und Ask nach oben. Sie quoten höher als der nominelle Mittelkurs, weil Sie glauben, dass der Mittelkurs gleich steigt.
- Asymmetrische Spread-Verbreiterung: Bei Aufwärtsdruck den Ask weiter wegziehen (Sie wollen nicht zu billig verkaufen), den Bid lassen.
- Quote-Pull: Bei extrem hohem Toxizitätssignal die Quote auf einer Seite ganz zurückziehen. Sie steigen für ein paar Hundert Millisekunden aus und warten ab.
Welche Variante optimal ist, hängt davon ab, wie aggressiv Ihre Konkurrenz quotet. In sehr kompetitiven Märkten (BTC-USDT, Top-Aktien) führt das Zurückziehen oft dazu, dass Sie keinen Flow mehr abbekommen, weil andere Maker einspringen. In weniger kompetitiven Märkten ist das Zurückziehen die richtige Antwort, weil Sie nichts verlieren, indem Sie kurz pausieren.
Eine integrierte Quote-Funktion.
Wie alles zusammenspielt:
def toxic_aware_quotes(
mid: float,
inventory: int,
sigma: float,
ofi_signal: float,
microprice: float,
base_spread: float,
tox_pull_threshold: float = 2.5,
) -> tuple[float | None, float | None]:
"""
Erweitert AS-Quotes um eine Toxizitätskomponente.
Gibt None auf einer Seite zurück, wenn die Quote zurückgezogen werden soll.
"""
# Standardisierter Toxizitätsscore
micro_dev = (microprice - mid) / max(sigma, 1e-9)
tox_score = 0.6 * ofi_signal + 0.4 * micro_dev
# Bias in Richtung Toxizitätssignal
bias = tox_score * sigma * 0.1
adjusted_mid = mid + bias
# Asymmetrischer Spread
spread_bid = base_spread / 2 + max(0, -tox_score) * sigma * 0.05
spread_ask = base_spread / 2 + max(0, tox_score) * sigma * 0.05
bid = adjusted_mid - spread_bid
ask = adjusted_mid + spread_ask
# Quote-Pull bei extremem Signal
if tox_score > tox_pull_threshold:
bid = None # kein Bid, wir glauben nicht an die Long-Seite
elif tox_score < -tox_pull_threshold:
ask = None
return bid, ask
Was die Daten Ihnen verraten.
Adverse Selection ist messbar — und Sie sollten sie messen. Für jeden Trade, den Sie ausführen, loggen Sie:
- Mittelkurs zum Zeitpunkt des Fills.
- Mittelkurs 100 ms, 1 s, 10 s, 60 s nach dem Fill.
- Side (Bid-Hit oder Ask-Hit).
Aggregieren Sie die Mittelkurs-Veränderung post-Fill nach Seite. Wenn Bid-Hits im Schnitt eine negative Mittelkurs-Veränderung nach sich ziehen und Ask-Hits eine positive, haben Sie es mit toxischem Flow zu tun. Die Differenz zwischen erwartetem Spread-Ertrag und tatsächlichem Inventar-P&L 60 Sekunden später ist Ihr Adverse-Selection-Kosten-Stempel.
Diese Auswertung ist nicht optional. Wer sie nicht macht, kennt seine Edge nicht — und wer seine Edge nicht kennt, kann sie nicht optimieren.
Grenzen und ehrliche Worte.
Toxizitätssignale sind keine Wahrsagerei. Sie haben Trefferquoten im Bereich von 55–60 % über sehr kurze Zeithorizonte — das reicht, um einen Vorteil zu konstruieren, aber nicht, um jeden toxischen Trade zu vermeiden. Wer glaubt, Adverse Selection vollständig ausschalten zu können, hat das Geschäft nicht verstanden: Ein gewisser Anteil toxischer Trades ist der Preis dafür, überhaupt Liquidität bereitzustellen.
Das Ziel ist nicht null toxische Trades, sondern: Spread-Ertrag minus Adverse-Selection-Kosten ist deutlich positiv. Die Messung dieser Differenz, in Echtzeit und nach Zeitraum, ist die KPI, an der ein Market-Making-System steht oder fällt.
Sie wollen Ihre Adverse-Selection-Exposure quantifizieren oder Toxizitätsmodelle in Ihre Strategie integrieren? Erstgespräch buchen — das ist eines der Themen, an denen wir am häufigsten arbeiten.