Warteschlangenposition aus L2-Daten schätzen
Die Warteschlangenposition bestimmt, ob eine passive Order den Spread vereinnahmt. Erfahren Sie, wie Sie diese aus aggregierten Orderbuchdaten schätzen und wann MBO-Daten nötig sind.
Die Warteschlangenposition ist Ihr Platz in der Reihenfolge der Aufträge, die zu einem bestimmten Preis im Orderbuch liegen. Auf Handelsplätzen mit Preis-Zeit-Priorität entscheidet sie darüber, ob eine passive Order den Spread vereinnahmt oder nie ausgeführt wird. Aggregierte Marktdaten liefern diese Zahl nicht: Ein Level-2-Orderbuch zeigt zwar das Volumen an jedem Preisniveau, aber nicht, wem es gehört. Im Folgenden erfahren Sie, wie Sie die Warteschlangenposition anhand der verfügbaren Daten schätzen und wann diese Schätzungen nicht mehr ausreichen.
Warum die Warteschlangenposition der entscheidende Vorteil ist
Eine passive Order liegt im Orderbuch und wartet darauf, dass ein anderer Marktteilnehmer den Spread zu ihr hin überquert. Gemäß der Preis-Zeit-Priorität sortiert das Matching-System die vorliegenden Orders zuerst nach dem Preis und dann nach dem Zeitpunkt des Eingangs. Wenn bereits 10.000 Aktien zu 10,00 $ als Kaufauftrag vorliegen und Sie 100 Stück dahinter platzieren, müssen diese 10.000 Aktien erst gehandelt oder storniert werden, bevor Sie an der Reihe sind. Stornieren Sie und geben Sie die Order zum gleichen Preis neu ein, landen Sie wieder am Ende der Schlange.
Diese Rangfolge bestimmt die Wirtschaftlichkeit. Wenn Sie weit vorne stehen, handeln Sie häufig und vereinnahmen den Spread zuzüglich etwaiger Liquiditätsprämien, wie in Maker-Taker-Gebühren und -Rabatte beschrieben. Wenn Sie weit hinten stehen, handeln Sie erst, nachdem alle vor Ihnen zum Zug gekommen sind – was geschieht, wenn einseitiger Orderfluss in großem Umfang eintrifft. Ausführungen am Ende der Schlange häufen sich in den Momenten, bevor der Preis Ihr Niveau durchbricht. Gleicher Preis, gleiche Order, entgegengesetztes Ergebnis.
Was Level-2-Daten zeigen können und was nicht
Level 1 ist der beste Geld- und Briefkurs mit dem jeweiligen Volumen. Level 2, auch als „Market by Price“ bezeichnet, fügt Tiefe hinzu: eine Liste von Preisniveaus mit dem gesamten Volumen, das auf jeder Stufe liegt. Beides sind Aggregate; Level 1 vs. Level 2 Marktdaten vergleicht sie vollständig. Wenn das Geldvolumen bei 10,00 $ von 10.000 auf 8.500 Aktien sinkt, meldet der Feed, dass 1.500 Aktien verschwunden sind. Er sagt nicht, ob sie gehandelt wurden, ob eine oder vierzig Orders entfernt wurden oder wo in der Schlange sie standen.
Ausführungen sind die sichtbare Hälfte: Das Tape druckt jeden Trade mit Volumen, diese ziehen Sie exakt ab. Der Rest ist Stornierung, und bei Stornierungen beginnt das Raten. Die folgende Tabelle vergleicht die Nachrichten am konsolidierten Top-of-Book mit den Trades auf dem Tape für eine liquide Aktie während eines normalen Handelstages, Mittwoch, den 10. Juni 2026.
Das exakte SQL hinter jeder Zahl
SELECT
q.et_time AS et_time,
q.quote_updates AS quote_updates,
t.trades AS trades,
round(q.quote_updates / t.trades, 1) AS updates_per_trade
FROM
(
SELECT
formatDateTime(toStartOfHour(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
count() AS quote_updates
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-06-10 12:00:00'
AND sip_timestamp < '2026-06-10 20:00:00'
GROUP BY et_time
) AS q
INNER JOIN
(
SELECT
formatDateTime(toStartOfHour(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS trade_hour,
count() AS trades
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-06-10 12:00:00'
AND sip_timestamp < '2026-06-10 20:00:00'
GROUP BY trade_hour
) AS t ON q.et_time = t.trade_hour
ORDER BY et_timeDie 08:00-Stunde liegt vor der Eröffnungsglocke: Das Top-of-Book änderte sich dort 0.8-mal pro Trade, weniger Nachrichten als Trades. Innerhalb der regulären Sitzung kehrt sich das Verhältnis um. In der 15:00-Stunde änderte sich das Top-of-Book 1.6-mal pro Trade, bei insgesamt 233433 Nachrichten allein in dieser Stunde. Das meiste, was auf einem Preisniveau in einem offenen Markt passiert, sind Orders, die eintreffen und wieder gehen, ohne jemals gehandelt zu werden. Jedes dieser Ereignisse verschiebt Ihren Platz in der Schlange um einen Betrag, den kein aggregierter Feed ausweist.
Die Annahme gleichmäßiger Stornierungen und warum sie Sie täuscht
Der Standardansatz geht davon aus, dass Stornierungen gleichmäßig über die Warteschlange verteilt sind. Sei x Ihre relative Tiefe: die Anzahl der Aktien vor Ihnen geteilt durch das gesamte Volumen an Ihrem Preis. Das Modell der Gleichverteilung setzt die Wahrscheinlichkeit, dass eine stornierte Aktie vor Ihnen lag, gleich x, also p(x) = x. Wenn Sie in einer 10.000-Aktien-Schlange in der Mitte stehen und 1.000 Aktien ohne Trade storniert werden, rückt Sie das Modell um 500 Plätze vor.
Reale Warteschlangen sind jedoch verzerrt. Eine Order, die schon länger liegt, gehört meist jemandem, der bereit ist zu warten, während eine gerade erst hinzugefügte Order oft nur ein flüchtiges Angebot ist, das nach Sekunden verschwindet. Stornierungen konzentrieren sich auf das Ende der Schlange, also in Ihrer Nähe und hinter Ihnen. Von den 1.000 stornierten Aktien lagen vielleicht 200 vor Ihnen, während das Modell Ihnen 500 gutschreibt. Wiederholen Sie das den ganzen Tag, rückt die simulierte Schlange schneller vor als die reale. Der Fehler wirkt einseitig: mehr Ausführungen zu besseren Zeitpunkten, als echte Orders tatsächlich erhalten.
Wie sich die Warteschlange leert
Stornierungen verschieben Sie unsichtbar. Trades verschieben Sie sichtbar, im Umfang der ausgeführten Volumina.
Das exakte SQL hinter jeder Zahl
SELECT
multiIf(size < 100, 'under 100 shares',
size = 100, 'exactly 100 shares',
size <= 499, '101 to 499 shares',
size <= 999, '500 to 999 shares',
'1000 shares or more') AS trade_size_group,
round(100 * count() / sum(count()) OVER (), 1) AS share_of_prints_pct,
round(100 * sum(size) / sum(sum(size)) OVER (), 1) AS share_of_shares_pct
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-06-10 14:00:00'
AND sip_timestamp < '2026-06-10 20:00:00'
GROUP BY trade_size_group
ORDER BY min(size)Trades unter einem Round Lot machten 90% der Anzahl in dieser Sitzung und 42.5% des Volumens aus. Blöcke von tausend Aktien oder mehr waren 0.2% der Trades und 19.9% des Volumens. Warteschlangen leeren sich in kleinen Häppchen; der Abstand zwischen Position 2.000 und 3.500 entspricht also hunderten von wartenden Trades. Ein Simulator, der eine Ausführung nach zwei großen Trades gewährt, hat den Großteil des Tapes übersprungen.
Die Order, die Sie nicht sehen können
Depth-Feeds sind begrenzt. Wenn Sie zehn Preisniveaus empfangen und Ihre Order auf dem elften liegt, befindet sich Ihre Order außerhalb der Daten: Sie sehen weder das Volumen davor noch die Orders, die sich dahinter anstellen. An diesem Punkt erfinden Sie die Zahl, anstatt sie zu schätzen. Diese Situation ist eher gewöhnlich als exotisch, da eine Order, die dem Markt nicht folgt, schnell vom inneren Markt abfällt.
Das exakte SQL hinter jeder Zahl
SELECT
formatDateTime(toStartOfFifteenMinutes(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
round(avg(toFloat64(bid_price)), 2) AS best_bid,
uniqExact(bid_price) AS bid_levels_touched
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-06-10 14:00:00'
AND sip_timestamp < '2026-06-10 20:00:00'
AND bid_price > 0
GROUP BY et_time
ORDER BY et_timeIm 10:00-Zeitfenster lag der beste Geldkurs im Durchschnitt bei 290.29 $ und erreichte 187 verschiedene Preise innerhalb von fünfzehn Minuten. Jeder dieser Preise ist ein eigenes Niveau bei einer Aktie, die in Pennies notiert; eine Zehn-Level-Ansicht deckt also zehn Cent des Orderbuchs ab. Eine Order, die während einer solchen Sitzung auf einem Preis liegen bleibt, kann lange Zeit unterhalb des tiefsten Niveaus verbringen, das ihr Eigentümer sehen kann.
Wo die Warteschlangenposition am meisten wert ist
Die Warteschlangenposition ist dort am wertvollsten, wo eine Preisverbesserung unmöglich ist. Eine Aktie, die bei einem Spread von einem Cent feststeckt, lässt keinen Spielraum, um sich mit einem besseren Preis vorzudrängeln: Alle stapeln sich am gleichen Tick, und die Eingangszeit entscheidet. Wo der Spread mehrere Cent breit ist, kann ein Trader für einen Cent vor die gesamte Schlange treten; die Preisentscheidung sticht dann die Warteschlange aus.
Das exakte SQL hinter jeder Zahl
SELECT
ticker AS symbol,
round(avg(toFloat64(ask_price - bid_price)) * 100, 2) AS avg_spread_cents,
round(100 * countIf(round(toFloat64(ask_price - bid_price) * 100) <= 1) / count(), 1) AS one_cent_pct
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'KO', 'NVDA', 'MSFT', 'BKNG')
AND sip_timestamp >= '2026-06-10 15:00:00'
AND sip_timestamp < '2026-06-10 19:00:00'
AND bid_price > 0
AND ask_price > bid_price
GROUP BY ticker
ORDER BY avg_spread_centsÜber vier Mittagsstunden derselben Sitzung hinweg war der engste der sechs Werte, KO, im Durchschnitt 1.18 Cent breit und zeigte bei 82.5% seiner Updates einen Spread von einem Cent. Der breiteste, MSFT, lag im Schnitt bei 8.46 Cent, mit einem Ein-Cent-Spread bei 1.1% der Updates. Ein Warteschlangenmodell, das auf den ersten Wert kalibriert ist, sagt über den zweiten nichts Nützliches aus. Orders, die zwischen den Kursen liegen – behandelt in Midpoint-Peg-Orders –, bilden ihre eigene Schlange nach denselben Regeln.
Vier Diagnosen für Ihren Backtest
- Vergleichen Sie die simulierte Ausführungsrate mit Ihrer realen Ausführungsrate bei denselben Werten über dieselben Stunden. Ein Simulator, der 70 % der Orders ausführt, die in der Realität nur zu 40 % ausgeführt wurden, beschreibt Ihre Annahme, nicht den Markt.
- Teilen Sie simulierte Ausführungen in zwei Gruppen: solche, bei denen das Preisniveau danach bestehen blieb, und solche, die erst passierten, als das Niveau vollständig geräumt wurde. Eine Häufung bei der zweiten Art bedeutet, dass der Simulator Ihnen Ausführungen genau dann gibt, wenn der Preis durch Ihr Niveau handelt.
- Grenzen Sie die Annahme ein. Führen Sie den Test erneut durch, wobei alle Stornierungen vom Anfang der Schlange abgezogen werden, und dann, wobei alle Stornierungen vom Ende abgezogen werden. Diese beiden Durchläufe bilden die ehrlichen Fehlerbalken für jedes p(x), das Sie wählen.
- Messen Sie, wie oft Ihr Preis außerhalb der Tiefe lag, die Ihr Feed liefert. Ausführungen dort waren erfunden. Look-ahead-Bias im Backtesting beschreibt denselben Fehler aus einem anderen Blickwinkel: ein Ergebnis, das auf Informationen beruht, die die Strategie nie hatte.
Wann Sie das Modellieren beenden und Orderdaten kaufen sollten
Market-by-Order-Daten (MBO) enthalten eine Nachricht für jede einzelne Order, vom Moment des Eingangs bis zur Ausführung oder Stornierung, jeweils mit einer eigenen Kennung versehen. Spielen Sie diesen Feed ab, ist Ihr Platz in der Schlange eine zählbare Größe statt einer Schätzung, sobald Sie eine realistische Verzögerung für das Eintreffen Ihrer eigenen Order am Handelsplatz annehmen. Dies kostet mehr als ein Depth-Feed und erfordert deutlich mehr Speicherplatz.
Diagnose 3 ist die Entscheidungsregel. Wenn sowohl die optimistische als auch die pessimistische Annahme die Strategie profitabel lassen, reicht eine mittlere Annahme aus. Wenn die Strategie unter einer Annahme Geld verdient und unter der anderen verliert, ist das Warteschlangenmodell der Kern der Strategie – und der Kauf des Order-by-Order-Feeds ist günstiger, als eine Vermutung zu verteidigen.
Pro-rata-Handelsplätze ändern die Fragestellung
Einige Termin- und Optionsmärkte verteilen eine eingehende Order proportional zum Volumen auf die vorliegenden Orders, anstatt nach der Eingangsreihenfolge. Die Zeit spielt dort eine viel geringere Rolle, und das notierte Volumen wird zum Hebel: Eine Verdopplung Ihres Volumens verdoppelt in etwa Ihren Anteil an jeder Ausführung. Der Fehlerfaktor verschiebt sich entsprechend, hin zum Angebot von mehr Volumen, als man eigentlich halten möchte. Warum Optionsorders nicht ausgeführt werden behandelt, wie das aus der Sicht eines Privatanlegers in einem Optionsbuch aussieht.
FAQ
Was ist die Warteschlangenposition im Handel?
Die Warteschlangenposition ist Ihr Rang unter den Orders, die zum gleichen Preis auf demselben Handelsplatz liegen. In einem Orderbuch mit Preis-Zeit-Priorität müssen die Orders vor Ihnen gehandelt oder storniert werden, bevor Ihre eigene ausgeführt werden kann.
Kann man die Warteschlangenposition aus Level-2-Daten berechnen?
Nicht exakt. Level 2 zeigt das Gesamtvolumen pro Preisniveau ohne Identität der Orders. Wenn Volumen ohne Trade verschwindet, können Sie nicht feststellen, ob diese Aktien vor oder hinter Ihnen lagen. Sie können die Zahl schätzen und den Schätzwert eingrenzen. Der exakte Wert erfordert Order-by-Order-Daten.
Warum sind Backtest-Ausführungsraten meist zu hoch?
Die gängige Annahme verteilt Stornierungen gleichmäßig über die Warteschlange, während sich reale Stornierungen zum Ende hin konzentrieren. Ein Modell der Gleichverteilung lässt Ihre simulierte Order schneller vorrücken, als sich die reale Schlange bewegt, was sich in mehr und besseren Ausführungen zeigt, als der Live-Handel liefert.
Was sind MBO-Daten?
Market-by-Order-Daten liefern für jede einzelne Order eigene Nachrichten, vom Eingang bis zur Ausführung oder Stornierung. Es ist der Feed, bei dem Ihr Platz in der Schlange zählbar statt modelliert ist, was besonders für Strategien wichtig ist, die bei einem Ein-Tick-Spread operieren.
Spielt die Warteschlangenposition auf Pro-rata-Handelsplätzen eine Rolle?
Weniger. Die Pro-rata-Zuteilung verteilt eine eingehende Order nach Volumen auf die vorliegenden Orders; als Erster anzukommen bringt also wenig, und das notierte Volumen leistet die Arbeit. Die Prüfung, welches Zuteilungsmodell ein Handelsplatz verwendet, steht vor jeder Warteschlangenmodellierung.
Jedes Panel hier enthält das SQL, das es erzeugt hat. Ändern Sie den Ticker, verschieben Sie das Datum und stellen Sie dieselbe Frage zu den Werten, die Sie auf dem Strasmore-Terminal handeln.