Montag haben wir das Vernünftige gemacht. Der Agent hatte eine Momentum-Strategie auf einem Mid-Cap-USDT-M-Perpetual, mit 25,000 USDT Clip pro Trade, und der erste Backtest ohne Volumenfilter hat jedes Signal so gefüllt, als wäre das Orderbuch BTC. Also haben wir das Gate aus dem Lehrbuch eingebaut: zwanzig 1-Minuten-Bars Dollar-Volumen mussten das Zwanzigfache des Clips überschreiten, bevor eine Order rausgehen durfte. Zwanzig Minuten, eine halbe Million Dollar Tape. Der Coin hat an einem belebten Tag rund $40 Millionen gedruckt. Der Filter hat die meisten Signale durchgelassen. Die Equity-Kurve wurde weniger zackig. Wir haben es auf Paper geschickt.
Elf Stunden später hat ein 25,000-USDT-Kauf 8,400 vom Bid gefressen und ist stecken geblieben. Das Zwanzig-Bar-Volumen in dieser Minute lag bei $1.14 Millionen. Der Filter hatte Ja gesagt.
Montag: der Filter, der uns ehrlich vorkommen ließ
Die Notiz des Agenten zum Pull Request lautete „Kapazitätscheck hinzugefügt, 20× Notional.“ Ich habe sie genehmigt. Ich habe diesen Satz schon einmal genehmigt. Das ist die Sorte Regel, die man schreibt, nachdem einem jemand einen Backtest zeigt, der einen $4,000-OI-Coin in $50,000-Clips gehandelt hat, und alle im Raum ein Gesicht ziehen, und man ein Volumen-Multiple dazusetzt, damit das nicht noch einmal passiert.
Am Montag hat die Regel getan, was sie in einem Backtest immer tut. Sie hat die toten Stunden rausgeworfen. Sie hat die Stunden behalten, in denen die eigene Volumenzahl der Börse laut wirkte. Der Turnover ist um etwa ein Drittel gefallen. Die durchschnittliche Trade-Größe blieb 25,000, weil das Fill-Modell ein Feigling ist: es nimmt den ganzen Clip bei Last-plus-ein-paar-bps, sobald das Gate offen ist. Niemand hat das Orderbuch gefragt, ob 25,000 tatsächlich dort lagen.
Ich zucke immer noch zusammen, wenn das 24h-Volumen eines Coins eine runde Zahl neben dünnem Open Interest ist. Das ist ein Überbleibsel aus 2021, als Discord-„Market-Making“-Bots zwei Subaccounts waren, die miteinander gehandelt und den Volumen-Screenshot in #brag gepostet haben. Das Tape sieht aus wie eine Party. Das Orderbuch ist Pappe. Ich habe mir eingeredet, ein 20×-Filter auf 1-Minuten-Bars sei der Weg, daraus herauszuwachsen. Ist er nicht. Es ist der Weg, die Pappe zu einer glatteren Zahl zu mitteln.
Dienstag: Paper, dann ein Rest
Paper fing freundlich an. Die ersten fünf Clips wurden in 2–4 Hops die Ask hinunter gefüllt. Hässlich, aber durch. Dann 14:07 UTC, ein Long-Signal, 25,000 USDT, Top of Book 1,100, nächstes Level 2,400, dann Luft. Wir haben 8,400 als Taker gefüllt bekommen und 16,600 Resting. Vierzig Sekunden später wurde der Rest über unsere eigene Time-in-Force storniert. Die Strategie glaubte, sie sei einen vollen Clip long. Das Konto war ein Drittel von einem long.
Aber der Filter hatte Ja gesagt. Ich habe mir die Bar geholt. Das Dollar-Volumen in den zwanzig Minuten bis 14:07 lag bei $1.14 Millionen, bequem über $500k. Rund $380k von diesen $1.14 Millionen waren Print-Paare: gleicher Preis, gleiche Size, entgegengesetzte Aggressor-Flags, 2–8 Millisekunden auseinander, und die Bid/Ask-Size an diesem Preis hat sich nicht gerührt. Diese Trades haben sich gegenseitig Gebühren bezahlt. Sie haben uns kein 25,000-USDT-Loch angeboten.
Mittwoch: das Tape mit dem Orderbuch abgleichen
Mittwoch war der langsame Tag, für den ich nächstes Mal doppelt so viel Zeit einplanen würde. Wir haben fünf Wochentage Trades und L2-Snapshots desselben Perps genommen, 100ms-Orderbuchfotos, und jeden Print gegen das Orderbuch ein Snapshot davor und ein Snapshot danach klassifiziert.
- Wenn die Size am Trade-Preis um etwa die Trade-Size gefallen ist, hat er das Orderbuch berührt. Zählen.
- Wenn ein Buy und ein Sell gleicher Size zu einem Preis gedruckt haben ohne Orderbuch-Änderung, nenne es Wash und streiche es aus jeder Kapazitätszahl.
- Wenn ein Trade durch mehrere Levels gelaufen ist und diese Levels verschwunden sind, ist das ein echter Taker. Zählen, und tu nicht so, als könntest du diese Liquidität auch noch nehmen; jemand hat sie schon genommen.
- Wenn der Trade als Liquidation getaggt ist, ist das echte Size, und es ist die letzte Size, die du als Beweis verwenden willst, dass du 25,000 clippen kannst. Die Zwangsorder läuft gegen dich um die Wette.
Die Snapshots lügen ein bisschen. Alles, was innerhalb von 100ms füllt und nachfüllt, sieht aus wie ein Geist, und manche echten Market-Maker machen Cancel-Replace so schnell. Wir haben später ein paar Minuten 10ms-Orderbücher gesampelt, und der Wash-Anteil hat sich um ein paar Punkte bewegt, nicht um den Faktor zwei. Mit ein paar Punkten kann ich leben. Ich kann nicht damit leben, den Volumen-Ticker der Börse als Liquiditätszensus zu behandeln.
AggTrades fassen bereits einen Taker zusammen, der mehrere Maker zu einem Preis trifft. Sie fassen nicht zwei Subaccounts zusammen, die washen. Wenn dein „sauberer“ Feed aggregierte Trades sind, hast du dieses Problem trotzdem. Du hast es nur mit weniger Zeilen.
Und das 24h-Volumen auf der Ticker-API ist dieselbe schmutzige Summe, verzögert, deshalb lieben Research-Agenten es. Ein Feld. Immer da. Sieht aus wie ein Feature. Es ist eine Marketingstatistik, die zufällig im Market-Data-Protobuf liegt.
Donnerstag: die Woche in einer Tabelle
Fünf Sessions, derselbe Clip, dieselbe 20×-Regel, dasselbe Fill-Modell im Backtest. Die Paper-Fill-Ratio ist gefülltes Notional geteilt durch intendiertes Notional für die Orders, die wir in dieser Session tatsächlich geschickt haben. Montag-Paper ist leer, weil wir noch im Backtest waren.
| Session | Börsen-Tape | Orderbuch-bewegend | Wash-artig | Liq.-Prints | Filter sagte Go | Paper-Fill |
|---|---|---|---|---|---|---|
| Mo | $38.4m | $22.6m | $13.5m | $2.3m | 41 / 48 Signale | n/a |
| Di | $41.1m | $24.2m | $15.2m | $1.7m | 36 / 40 | 0.61 |
| Mi | $29.6m | $20.1m | $8.1m | $1.4m | 22 / 31 | 0.77 |
| Do | $44.8m | $25.6m | $17.4m | $1.8m | 39 / 44 | 0.54 |
| Fr | $33.2m | $22.3m | $9.4m | $1.5m | 28 / 35 | 0.71 |
Wash-artige Prints waren 34% des Wochen-Tapes. Sie waren nicht gleichmäßig verteilt. Donnerstag, die Session, die der ursprüngliche Filter am liebsten hatte, war die schmutzigste. Das ist der Fehlermodus, der mich interessiert. Das Gate überschätzt Liquidität nicht nur im Durchschnitt. Es öffnet sich weiter an den Tagen, an denen die Wash-Bots arbeiten, weil das die Tage sind, an denen die Rohzahl am gesündesten aussieht.
Wir haben den Backtest nur mit orderbuch-bewegendem Volumen neu laufen lassen, dasselbe 20×-Multiple. Die Signale sind von 198 in der Woche auf 121 gefallen. Viele der verworfenen saßen in diesen donnerstäglichen Stunden, in denen das Tape laut war und das Top of Book 1,100 USDT hatte. Der ursprüngliche Sharpe hat 198 volle Fills verwendet. Ich werde den neuen nicht so zitieren, als wäre das ein Finding über die Strategie. Es ist ein Finding über das Fill-Modell: sobald man aufhört, 25,000 USDT zu einem Preis zu gewähren, den das Orderbuch nicht hatte, ist ein Brocken der „Edge“ einfach nur vollständig ausgeführte Orders, die Reste gewesen wären.
Freitag: was wir wirklich ausliefern, und was ich überspringen würde
Das Gate, das wir behalten haben, ist langweilig. Rollierendes orderbuch-bewegendes Notional, nur aus Prints gezählt, die Size von einem Level genommen haben, muss 20× den Clip schaffen, und wir messen es auf den Bars vor der Decision-Bar, damit der Wash der aktuellen Minute nicht mitstimmen kann. Liquidations-Prints bekommen ein separates Cap: wenn mehr als ein Viertel des jüngsten orderbuch-bewegenden Volumens Liquidationen sind, setzt die Strategie aus. Forced Flow ist echte Size, die gegen dich um die Wette läuft.
Impact hat dieselbe Diät bekommen. Das alte Modell hat ein Kyle-Lambda aus Börsenvolumen und unserem Clip abgeleitet. Fütterst du es mit Wash, sinkt Lambda, weil der Markt tief wirkt. Fütterst du es mit orderbuch-bewegendem Volumen, ist derselbe Clip ein deutlich größerer Anteil dessen, was das Orderbuch tatsächlich verändert hat. Die Paper-Slippage der nächsten Sessions lag näher an dieser hässlicheren Zahl. Näher, nicht identisch. Wir sehen immer noch keine Queue, und ein 100ms-Foto verpasst immer noch etwas echte Size.
Was ich nächstes Mal überspringen würde, ist der ganze erste Montag. Nicht beim Ticker anfangen, nicht beim 24h-Volumen anfangen, den Agenten nicht rohes Dollar-Volumen in den Feature Store und ins Gate legen lassen, als wären das zwei Ideen. Es ist eine schmutzige Serie, zweimal verwendet. Bau zuerst das orderbuch-konsistente Tape, auch wenn das heißt, dass du zwei Tage an einem einzelnen Mid-Cap recherchierst, bevor du ein Universe hast. Ein nach Wash gefiltertes Universe ist eine Liste von Coins, die gut darin sind, beschäftigt auszusehen.
Der andere Skip: jedes Fill-Modell, das einen bestandenen Volumen-Check als Fill behandelt. Der Rest vom Dienstag war die Strategie. Der Filter kann nur antworten „hat überhaupt jemand gehandelt.“ Er kann nicht antworten „wird deine 25,000 liegen bleiben oder verschwinden.“ Diese zweite Frage braucht das Orderbuch, einen Rest und eine Time-in-Force, und das ist ein anderes Tagebuch, nämlich das, das wir vor diesem hier hätten schreiben sollen.
← Alle Beiträge


