15. listopadu 2026 · výzkum

Jak backtestovat krypto objem, když wash obchody nafukují pásku?

Jak backtestovat krypto objem, když wash obchody nafukují pásku?

V pondělí jsme udělali tu zodpovědnou věc. Agent měl momentum strategii na mid-cap USDT-M perpetualu, clip 25,000 USDT na obchod, a první backtest bez objemového filtru vyplnil každý signál, jako by kniha byla BTC. Přidali jsme proto učebnicovou bránu: dvacet 1-minutových barů dolarového objemu muselo překročit dvacetinásobek clipu, než mohl příkaz odejít. Dvacet minut, půl milionu dolarů pásky. Coin v rušný den tiskl zhruba $40 million. Filtr většinu signálů nechal projít. Křivka equity byla méně zubatá. Poslali jsme to na paper.

O jedenáct hodin později nákup 25,000 USDT sežral 8,400 bidu a zastavil se. Objem za dvacet barů v té minutě byl $1.14 million. Filtr řekl ano.

34%nahlášené pásky nikdy nepohnulo s úrovní knihy
11 hrspaperu před prvním zaseknutým clipem
20×pravidlo clip-k-objemu, které stejně řeklo ano

Pondělí: filtr, který nám dal pocit poctivosti

Poznámka agenta u pull requestu zněla „přidána kontrola kapacity, 20× nominálu.“ Schválil jsem to. Tu větu jsem schválil už dřív. Je to ten typ pravidla, které napíšete, když vám někdo ukáže backtest, který obchodoval coin s $4,000-OI v clipech po $50,000, všichni v místnosti udělají obličej a vy přidáte objemový násobek, aby se to už nemohlo stát.

V pondělí pravidlo udělalo to, co v backtestu dělá vždycky. Zahodilo mrtvé hodiny. Nechalo hodiny, kde vlastní objemové číslo burzy vypadalo hlasitě. Obrat klesl zhruba o třetinu. Průměrná velikost obchodu zůstala 25,000, protože fill model je zbabělec: vezme celý clip na last-plus-pár-bps, kdykoli je brána otevřená. Nikdo se knihy nezeptal, jestli tam 25,000 skutečně sedí.

Pořád sebou cuknu, když 24h objem coinu je kulaté číslo vedle tenkého open interestu. To je pozůstatek z roku 2021, kdy Discord „market making“ boti byli dva subúčty, které obchodovaly mezi sebou a vkládaly screenshot objemu do #brag. Páska vypadá jako večírek. Kniha je lepenka. Říkal jsem si, že 20× filtr na 1-minutových barech je způsob, jak z toho vyrůst. Není. Je to způsob, jak zprůměrovat lepenku do hladšího čísla.

Úterý: paper, pak zbytek

Paper začal vlídně. Prvních pět clipů se vyplnilo na 2–4 hopy dolů po asku. Ošklivé, ale hotovo. Pak 14:07 UTC, long signál, 25,000 USDT, top of book 1,100, další úroveň 2,400, pak vzduch. Dostali jsme 8,400 jako taker a 16,600 resting. O čtyřicet sekund později se zbytek zrušil na našem vlastním time-in-force. Strategie si myslela, že je long na plný clip. Účet byl long na třetinu jednoho.

Filtr ale řekl ano. Vytáhl jsem bar. Dolarový objem za dvacet minut do 14:07 byl $1.14 million, pohodlně nad $500k. Zhruba $380k z těch $1.14 million tvořily páry printů: stejná cena, stejný size, opačné aggressor flagy, 2–8 milisekund od sebe, a bid/ask size na té ceně se nehnul. Ty obchody si navzájem platily poplatky. Nenechaly nám díru 25,000 USDT.

Středa: párování pásky s knihou

Středa byla ten pomalý den, na který bych příště vyhradil dvakrát tolik času. Vzali jsme pět všedních dnů obchodů a L2 snapshotů na stejném perpu, 100ms fotky knihy, a každý print jsme klasifikovali proti knize snapshot předtím a snapshot potom.

  1. Pokud size na ceně obchodu klesl zhruba o size obchodu, dotkl se knihy. Započítat.
  2. Pokud nákup a prodej stejné velikosti vytiskly na jedné ceně bez změny knihy, nazvat to wash a vyhodit z jakéhokoli kapacitního čísla.
  3. Pokud obchod prošel několika úrovněmi a ty úrovně zmizely, to je skutečný taker. Započítat, a netvařte se, že tu likviditu můžete vzít taky; někdo už to udělal.
  4. Pokud je obchod označený jako likvidace, je to reálný size, a je to poslední size, který chcete použít jako důkaz, že vy můžete clipnout 25,000. Forced order s vámi závodí.

Snapshoty trochu lžou. Cokoli, co se vyplní a doplní uvnitř 100ms, vypadá jako duch, a někteří skuteční market-makeři dělají cancel-replace tak rychle. Později jsme vzorkovali pár minut 10ms knih a podíl washe se pohnul o pár bodů, ne o faktor dvou. S pár body dokážu žít. Nedokážu žít s tím, že ticker burzovního objemu beru jako sčítání likvidity.

AggTrades už slučují jednoho takera, který trefí několik makerů na jedné ceně. Neslučují dva subúčty, které dělají wash. Pokud je váš „čistý“ feed agregované obchody, tenhle problém pořád máte. Jen ho máte s menším počtem řádků.

A 24h objem na ticker API je stejný špinavý součet, zpožděný, proto ho research agenti milují. Jedno pole. Vždycky přítomné. Vypadá jako feature. Je to marketingová statistika, která se náhodou ocitla v market-data protobufu.

Pokud objemové číslo nelze sladit se změnou v knize, nepatří do kontroly kapacity, impact modelu ani universe filtru. 24h ticker je nejhorší kopie toho čísla, protože už bylo sečteno, zaokrouhleno a zbaveno času.

Čtvrtek: týden v jedné tabulce

Pět seancí, stejný clip, stejné 20× pravidlo, stejný fill model v backtestu. Paper fill ratio je vyplněný nominál ku zamýšlenému nominálu u příkazů, které jsme v té seanci skutečně poslali. Pondělní paper je prázdný, protože jsme ještě byli v backtestu.

SeanceBurzovní páskaPohyb knihyWashovéLiq. printyFiltr pustilPaper fill
Po$38.4m$22.6m$13.5m$2.3m41 / 48 signálůn/a
Út$41.1m$24.2m$15.2m$1.7m36 / 400.61
St$29.6m$20.1m$8.1m$1.4m22 / 310.77
Čt$44.8m$25.6m$17.4m$1.8m39 / 440.54
Pá$33.2m$22.3m$9.4m$1.5m28 / 350.71

Washové printy tvořily 34% týdenní pásky. Nebyly rozložené rovnoměrně. Čtvrtek, seance, kterou původní filtr miloval nejvíc, byl nejšpinavější. To je ten způsob selhání, který mě zajímá. Brána nejen přeceňuje likviditu v průměru. Otevírá se šířeji ve dnech, kdy jedou wash boti, protože právě ty dny surové číslo vypadá nejzdravěji.

Backtest jsme přepočítali jen s objemem hýbajícím knihou, stejný 20× násobek. Signály klesly z 198 za týden na 121. Spousta vyřazených seděla v těch čtvrtečních hodinách, kde páska řvala a top of book byl 1,100 USDT. Původní Sharpe používal 198 plných fillů. Nový nebudu citovat, jako by to byl závěr o strategii. Je to závěr o fill modelu: jakmile přestanete přidělovat 25,000 USDT na ceně, kterou kniha neměla, kus toho „edge“ jsou jen dokončené příkazy, které by byly zbytky.

Pátek: co skutečně pouštíme ven, a co bych přeskočil

Brána, kterou jsme nechali, je nuda. Rolling nominál hýbající knihou, počítaný jen z printů, které sundaly size z úrovně, musí překonat 20× clip, a měříme ho na barech před rozhodovacím barem, aby wash aktuální minuty nemohl hlasovat. Likvidační printy mají zvlášť cap: pokud víc než čtvrtina nedávného objemu hýbajícího knihou jsou likvidace, strategie stojí. Forced flow je reálný size, který s vámi závodí.

Impact dostal stejnou dietu. Starý model odvozoval Kyle lambdu z burzovního objemu a našeho clipu. Nakrmíte ho washem a lambda klesne, protože trh vypadá hluboký. Nakrmíte ho objemem hýbajícím knihou a stejný clip je mnohem větší podíl toho, co knihu skutečně změnilo. Paper slippage na dalších několika seancích seděl blíž k tomu ošklivějšímu číslu. Blíž, ne identicky. Pořád nevidíme frontu a 100ms fotka pořád mine nějaký skutečný size.

Co bych příště přeskočil, je celé první pondělí. Nezačínat od tickeru, nezačínat od 24h objemu, nenechat agenta strčit surový dolarový objem do feature storu i do brány, jako by to byly dvě myšlenky. Je to jedna špinavá řada, použitá dvakrát. Nejdřív postavit pásku konzistentní s knihou, i kdyby to znamenalo dva dny research na jediném mid-capu, než máte universe. Universe filtrované podle washe je seznam coinů, které umí vypadat rušně.

Druhý skip: jakýkoli fill model, který bere splněnou objemovou kontrolu jako fill. Úterní zbytek byla strategie. Filtr umí odpovědět jen „obchodoval vůbec někdo.“ Nedokáže odpovědět „bude vašich 25,000 resting, nebo zmizí.“ Ta druhá otázka potřebuje knihu, remainder a time-in-force, což je jiný deník, a ten, který jsme měli napsat před tímhle.

wash tradingobjemkryptobacktestingmikrostruktura trhu
← Všechny články