Luni am făcut treaba responsabilă. Agentul avea o strategie de momentum pe un perpetual USDT-M mid-cap, cu clip de 25,000 USDT pe tranzacție, iar primul backtest fără filtru de volum a făcut fill pe fiecare semnal ca și cum cartea ar fi fost BTC. Așa că am adăugat poarta din manual: douăzeci de bare de 1 minut de volum în dolari trebuiau să depășească de douăzeci de ori clip-ul înainte ca un ordin să poată ieși. Douăzeci de minute, jumătate de milion de dolari de bandă. Moneda tipărea circa $40 million într-o zi aglomerată. Filtrul a păstrat majoritatea semnalelor. Curba de equity a devenit mai puțin zimțată. Am trimis-o pe paper.
Unsprezece ore mai târziu, un buy de 25,000 USDT a mâncat 8,400 din bid și s-a oprit. Volumul pe douăzeci de bare din acel minut era $1.14 million. Filtrul spusese da.
Luni: filtrul care ne-a făcut să ne simțim onești
Nota agentului pe pull request era "verificare de capacitate adăugată, noțional 20×." Am aprobat-o. Am mai aprobat propoziția asta. E genul de regulă pe care o scrii după ce cineva îți arată un backtest care a tranzacționat o monedă cu OI de $4,000 în clip-uri de $50,000, toată lumea din cameră face o grimasă, și adaugi un multiplu de volum ca să nu se mai întâmple.
Luni regula a făcut ce face întotdeauna într-un backtest. A tăiat orele moarte. A păstrat orele în care cifra de volum a bursei părea zgomotoasă. Turnover-ul a scăzut cu aproximativ o treime. Dimensiunea medie a tranzacției a rămas 25,000 pentru că modelul de fill e un laș: ia tot clip-ul la last-plus-câteva-bps oricând poarta e deschisă. Nimeni nu a întrebat cartea dacă 25,000 stăteau într-adevăr acolo.
Încă tresar când volumul pe 24h al unei monede e un număr rotund lângă un open interest subțire. E rămășiță din 2021, când boții de "market making" de pe Discord erau două subconturi care tranzacționau între ele și lipeau screenshot-ul de volum în #brag. Banda arată ca o petrecere. Cartea e carton. Mi-am spus că un filtru 20× pe bare de 1 minut e felul în care crești din treaba asta. Nu e. E felul în care bagi cartonul în medie, într-un număr mai lin.
Marți: paper, apoi un rest
Paper-ul a început blând. Primele cinci clip-uri s-au umplut în 2–4 salturi în jos pe ask. Urât, dar gata. Apoi 14:07 UTC, un semnal long, 25,000 USDT, top of book 1,100, nivelul următor 2,400, apoi aer. Am primit 8,400 filled ca taker și 16,600 resting. Patruzeci de secunde mai târziu, restul s-a anulat pe propriul nostru time-in-force. Strategia credea că e long un clip întreg. Contul era long o treime din unul.
Dar filtrul spusese da. Am scos bara. Volumul în dolari din cele douăzeci de minute până la 14:07 era $1.14 million, confortabil peste $500k. Aproximativ $380k din acel $1.14 million erau perechi de print-uri: același preț, aceeași mărime, flag-uri de aggressor opuse, la 2–8 milisecunde distanță, iar mărimea bid/ask la acel preț nu s-a clintit. Tranzacțiile alea și-au plătit fee-urile una alteia. Nu ne-au oferit o gaură de 25,000 USDT.
Miercuri: alinierea benzii la carte
Miercuri a fost ziua lentă, cea pentru care data viitoare aș aloca de două ori mai mult timp. Am luat cinci zile lucrătoare de tranzacții și snapshot-uri L2 pe același perp, fotografii de carte la 100ms, și am clasificat fiecare print față de cartea din snapshot-ul de dinainte și cel de după.
- Dacă mărimea la prețul tranzacției a scăzut cu aproximativ mărimea tranzacției, a atins cartea. Număr-o.
- Dacă un buy și un sell de mărime egală s-au printat la un preț fără schimbare în carte, numește-l wash și scoate-l din orice cifră de capacitate.
- Dacă o tranzacție a străbătut mai multe niveluri și acele niveluri au dispărut, ăsta e un taker real. Număr-o și nu te preface că poți lua și tu lichiditatea aia; cineva a luat-o deja.
- Dacă tranzacția e etichetată ca lichidare, e mărime reală, și e ultima mărime pe care vrei s-o folosești ca dovadă că tu poți clipa 25,000. Ordinul forțat aleargă împotriva ta.
Snapshot-urile mint un pic. Orice se umple și se reînnoiește în 100ms arată ca o fantomă, iar unii market-makeri genuini fac cancel-replace atât de rapid. Am eșantionat ulterior câteva minute de cărți la 10ms și ponderea de wash s-a mișcat cu câteva puncte, nu cu un factor de 2. Pot trăi cu câteva puncte. Nu pot trăi tratând ticker-ul de volum al bursei ca pe un recensământ al lichidității.
AggTrades colapsează deja un taker care lovește mai mulți makeri la un preț. Nu colapsează două subconturi care fac wash. Dacă feed-ul tău "curat" e aggregated trades, tot ai problema asta. Doar că o ai cu mai puține rânduri.
Iar volumul pe 24h de pe ticker API e aceeași sumă murdară, întârziată, de-asta îl iubesc agenții de research. Un câmp. Mereu prezent. Arată ca un feature. E o statistică de marketing care se întâmplă să fie în protobuf-ul de market-data.
Joi: săptămâna într-un tabel
Cinci sesiuni, același clip, aceeași regulă 20×, același model de fill în backtest. Raportul de fill pe paper e noționalul filled peste noționalul intenționat pentru ordinele pe care le-am trimis efectiv în sesiunea aia. Paper-ul de luni e gol pentru că eram încă în backtest.
| Sesiune | Bandă bursă | Care mișcă cartea | De tip wash | Print-uri liq. | Filtrul a zis go | Fill paper |
|---|---|---|---|---|---|---|
| Lun | $38.4m | $22.6m | $13.5m | $2.3m | 41 / 48 semnale | n/a |
| Mar | $41.1m | $24.2m | $15.2m | $1.7m | 36 / 40 | 0.61 |
| Mie | $29.6m | $20.1m | $8.1m | $1.4m | 22 / 31 | 0.77 |
| Joi | $44.8m | $25.6m | $17.4m | $1.8m | 39 / 44 | 0.54 |
| Vin | $33.2m | $22.3m | $9.4m | $1.5m | 28 / 35 | 0.71 |
Print-urile de tip wash au fost 34% din banda săptămânii. Nu au fost împrăștiate uniform. Joi, sesiunea pe care filtrul original a plăcut-o cel mai mult, a fost cea mai murdară. Ăsta e modul de eșec care mă interesează. Poarta nu doar supraestimează lichiditatea în medie. Se deschide mai larg în zilele în care boții de wash lucrează, pentru că alea sunt zilele în care cifra brută arată cel mai sănătos.
Am reluat backtest-ul doar cu volumul care mișcă cartea, același multiplu 20×. Semnalele au scăzut de la 198 în săptămână la 121. Multe dintre cele discardate stăteau în orele alea de tip joi, unde banda era zgomotoasă și top of book era 1,100 USDT. Sharpe-ul original folosea 198 de fill-uri complete. Nu voi cita noul număr ca și cum ar fi o constatare despre strategie. E o constatare despre modelul de fill: odată ce nu mai acorzi 25,000 USDT la un preț pe care cartea nu-l avea, o bucată din "edge" e doar ordine completate care ar fi fost resturi.
Vineri: ce livrăm de fapt și ce aș sări
Poarta pe care am păstrat-o e plictisitoare. Noționalul rolling care mișcă cartea, numărat doar din print-uri care au luat mărime de pe un nivel, trebuie să treacă 20× clip-ul, și îl măsurăm pe barele înaintea barei de decizie ca wash-ul minutului curent să nu poată vota. Print-urile de lichidare au un cap separat: dacă mai mult de un sfert din volumul recent care mișcă cartea sunt lichidări, strategia se retrage. Fluxul forțat e mărime reală care aleargă împotriva ta.
Impactul a primit aceeași dietă. Modelul vechi deducea un Kyle lambda din volumul bursei și clip-ul nostru. Îl hrănești cu wash și lambda scade, pentru că piața arată adâncă. Îl hrănești cu volum care mișcă cartea și același clip e o pondere mult mai mare din ce a schimbat de fapt cartea. Slippage-ul pe paper în sesiunile următoare a stat mai aproape de numărul ăla mai urât. Mai aproape, nu identic. Tot nu vedem coada, iar o fotografie de 100ms tot ratează ceva mărime genuină.
Ce aș sări data viitoare e tot primul luni. Nu porni de la ticker, nu porni de la volumul pe 24h, nu lăsa agentul să bage volumul brut în dolari în feature store și în poartă ca și cum ar fi două idei. Sunt o singură serie murdară, folosită de două ori. Construiește mai întâi banda consistentă cu cartea, chiar dacă asta înseamnă să cercetezi două zile pe un singur mid-cap înainte să ai un univers. Un univers filtrat pe wash e o listă de monede care sunt bune la a părea ocupate.
Celălalt skip: orice model de fill care tratează o verificare de volum trecută ca un fill. Restul de marți a fost strategia. Filtrul poate răspunde doar "a tranzacționat cineva." Nu poate răspunde "25,000-ul tău va rămâne resting sau va dispărea." A doua întrebare are nevoie de carte, de un remainder și de un time-in-force, care e un alt jurnal, și ăla pe care ar fi trebuit să-l scriem înaintea acestuia.
← Toate articolele


