Proč backtest lže: poplatky, spread a plnění
Viděli jsme mnoho „kvalitních" strategií, které po pořádném přetestování shořely jak papír. Zvonivá equity křivka, krásný počet obchodů — a pak se do testu doplní poplatky, spread a realistické plnění a z vítěze zbude přímka mířící dolů. Nejde o smůlu. Jde o to, že naivní backtest testuje jiný trh, než na kterém pak obchodujete — pohodlnější, štědřejší a neexistující. Tenhle článek je o tom, kde přesně backtest lže, proč to bolí zrovna vaše nejlepší nápady a jak se pravdě přiblížit co nejvíc.
Možná to znáte z vlastní kůže i bez řádku kódu: na demo účtu vám to šlo líp než na živém. Část toho rozdílu jsou přesně ty pasti, o kterých je tenhle článek — demo plní ideálně, jako by spread a skluz neexistovaly. Ale poctivě dodejme i druhou příčinu: demo bývá zjednodušené a někdy i marketingově přikrášlené, aby vás nalákalo vložit skutečné peníze. Obě příčiny táhnou stejným směrem — ukázat vám hezčí svět, než jaký vás naživo čeká.
Co přesně backtest zamlčuje?
Většina testerů počítá s idealizací „koupím a prodám za cenu na grafu". Mezi tou větou a skutečným obchodem je ale dlouhá cesta a na každém jejím kroku se ztrácí kus výnosu:
- Poplatky. Každý vstup a výstup něco stojí — a u častého obchodování se poplatky sčítají do částky, která sama o sobě rozhodne o ziskovosti.
- Spread. Kupujete za ask, prodáváte za bid. Ten rozdíl platíte pokaždé, i když se cena „na grafu" ani nehne.
- Slippage (skluz). Cena, za kterou se skutečně naplníte, není cena, kterou jste viděli v okamžiku rozhodnutí — obzvlášť v rychlém trhu. U většího market orderu navíc neplatí jediná cena: order se prokouše několika hladinami knihy a výsledkem je průměrná cena obchodu vážená přes množství dostupné na každé hladině. Cena „na grafu" je jen ta první úroveň; jak hluboko se prokoušete, rozhoduje objem na jednotlivých hladinách.
- Fronta na plnění. U limitního orderu stojíte v pořadí za ostatními. Jestli se na vás dostane, závisí na tom, kolik likvidity na dané ceně je a kolik lidí bylo dřív.
- Latence. Order necestuje nulový čas. Mezi rozhodnutím a burzou uplyne zpoždění, během kterého se trh hýbe.
- Částečná plnění. Objednávku vám trh nemusí naplnit celou — část zůstane viset, nebo se naplní po kouskách za různé ceny.
A pod tím vším leží past, kterou většina nástrojů vůbec nezmiňuje: v historických datech vaše objednávka není. Data zaznamenávají trh, který o vás nevěděl. Když v backtestu „koupíte", přidáváte akci do světa, který na ni nikdy nezareagoval — nezvedla se kvůli vám nabídka, nezmizela likvidita, neucukli ostatní algoritmičtí hráči. Čím menší jste, tím míň na tom záleží; čím větší pozice a čím rychlejší trh, tím víc tahle „neviditelnost" nadhodnocuje váš výsledek.
Eliminaci tohoto jevu se budeme věnovat v samostatném článku, ale ve zkratce: pokud má strategie dnes nakoupit nebo zainvestovat velký objem, není možné ho vložit do trhu najednou. Velká pozice se plní po částech — a právě tady vzniká vliv na cenu, který backtest nevidí. Tomuhle způsobu uvažování, institucionálnímu, se budeme věnovat zvlášť.
Dobrá zpráva je, že se ten jev dá výrazně potlačit rozumnou diverzifikací — rozprostřením kapitálu do rozumného počtu instrumentů a portfolií napříč segmenty a skupinami aktiv. Když žádná jednotlivá pozice není vůči trhu velká, klesá i její vliv na cenu — a s ním chyba, které se backtest dopouští, až na zanedbatelnou míru. Má to ale strop: existuje bod, za kterým další drobení přestává pomáhat a výhoda diverzifikace — ať už z pohledu teorie her, nebo prosté udržitelnosti při rostoucím počtu instrumentů — padá pod stůl. Kde přesně ten bod leží, je téma samo o sobě.
Proč „cena u mého orderu" neznamená, že jsem vyplněn
Tohle je jádro celé lži a stojí za to ho vypíchnout. To, že se cena dotkla úrovně, kde máte limitní order, ještě neznamená, že jste obchod dostali. Na téhle ceně stojí fronta a vy jste v ní zařazeni podle toho, kdy jste přišli. Aby se naplnil váš order, musí se nejdřív „vyjíst" všichni před vámi — a jestli se to stihne, než cena zase odskočí, je otázka likvidity, ne přání.
Možná si to pamatujete z vlastních začátků na burze: dali jste „buy" — a nic se nestalo. Order visel, čekal na vyplnění a vaše peníze byly jen „locked", zablokované, ale ne utracené. To je přesně ono: limitka není nákup, je to žádost o nákup, která čeká, až se na ni ve frontě dostane. Někdy se dočká, někdy cena odskočí a order zůstane viset.
Naivní backtest tuhle frontu nevidí a plní vás pokaždé, když se cena úrovně jen dotkne. To je systematická chyba ve váš prospěch: v testu naberete i obchody, které byste naživo nikdy nedostali — a bývají to zrovna ty na hraně pohybu, tedy ty nejlukrativnější. Výsledkem je equity křivka složená zčásti z obchodů, které se nikdy nestaly.
Dá se ta fronta odhadnout? Do jisté míry ano — existují predikční modely, které odhadují pozici ve frontě a pravděpodobnost vyplnění. Nejde je ale nastavit jednou provždy: musí se průběžně kalibrovat na živý trh. Princip je stejný jako u walk-forward analýzy — model se naladí na vzorku a ověří na datech, která teprve přijdou; tady konkrétně na tom, co skutečně padne v živém obchodování. Simulované plnění proto necháváme běžet vedle reálné exekuce, obě strany průběžně srovnáváme a tam, kde se rozcházejí, model doladíme. Tahle logika — ladit na minulosti, validovat na budoucnosti a pořád kalibrovat — platí napříč predikčními modely obecně, nejen u fronty.
Maker vs. taker, limit vs. market — lamácky
Typ orderu není detail, je to volba mezi dvěma druhy nákladů:
- Limitní order (maker). Přidáváte likviditu, platíte nižší poplatek — ale nemáte jistotu plnění. Cena kolem vás může proletět a nechat vás stát ve frontě.
- Market order (taker). Berete likviditu, plnění máte skoro jisté — ale platíte vyšší poplatek a hlavně slippage: vykoupíte spread a u většího objemu se prokoušete i do horších úrovní knihy.
Naivní backtest si bere z obou to nejlepší a z nákladů nic: plní jako market (vždy), účtuje jako maker (levně) a slippage neřeší. Taková strategie na papíře vydělává i tehdy, když by naživo platila víc, než vydělá. A k tomu přičtěte latenci — mezi vaším rozhodnutím a dorazením orderu na burzu se trh pohne, takže i dobře zamýšlený vstup dostanete o kus jinde.
Ostatně proto jsou maker a taker u většiny burz jinak zpoplatněné: tvůrce trhu (maker) dodává likviditu, kterou burza potřebuje, a tak ho odměňuje nižším poplatkem. Zároveň ale burza potřebuje i protistranu — hybatele, který „vystavené zboží" koupí — a ten za pohodlí okamžitého plnění zaplatí víc. Backtest, který tenhle rozdíl smázne, si maluje svět, kde vás nestojí nic: ani likvidita, ani spěch. O mechanice burzy, tvorbě ceny, zákoutích orderů i speciálních algoritmických příkazech se rozepíšeme v dalších článcích.
A pozor — nejde jen o to opravit backtest. Je to koncepce, se kterou se strategie musí navrhovat už od začátku. Existují strategie, u kterých tyhle úvahy skoro zanedbáte — dlouhé obchody držené řadu dní, málo vstupů, vyšší časové rámce. V algoritmickém obchodování jsou ale spíš výjimkou: samotná výhoda automatu je rychlé rozhodování, kvalitní vstupy a jistější zisky tam, kde by člověk otevíral pozici pod vlivem emoce, strachu nebo jiných — racionálních i iracionálních — pochodů. A čím víc téhle výhody využíváte, tím víc na nákladech a plnění záleží.
Psychologii obchodování — jednotlivce, trhu i davu — si necháme na samostatné články. Přiznejme si ale rovnou jednu pokoru: i když pochopíme roli jednoho mravence a způsob, jakým se chová, ještě to neznamená, že rozumíme mraveništi jako celku.
Proč to zabíjí zrovna vaše nejlepší strategie
Náklady nejsou konstanta, kterou stačí odečíst — škálují s tím, jak strategie obchoduje. Platí jednoduchá úměra: čím víc obchodů, čím kratší časový rámec a čím větší pozice, tím víc z výsledku ukrojí náklady a nejistota plnění. Vysokofrekvenční strategie s drobnou průměrnou výhrou je na náklady nejcitlivější — malý poplatek a pár ticků slippage stačí, aby se z kladné očekávané hodnoty stala záporná.
Zákeřné je, že nejhorší plnění dostáváte přesně tam, kde strategie nejvíc chce obchodovat: v rychlém, rozhýbaném trhu. Právě tam je spread nejširší, fronta nejméně předvídatelná a slippage největší. Idealizovaný backtest si tenhle okamžik vybarví narůžovo — a živý trh vám ho pak vyúčtuje.
Proto k obchodům přistupujeme s pokorou: když už se něco viditelně děje, bývá pozdě — a chytat rukou padající nůž není nejlepší nápad, náklady i skluz jsou přesně v té chvíli nejvyšší. A abychom nepodlehli druhé straně téže mince — FOMO (z anglického fear of missing out, strachu, že nám něco uteče) — řídíme se i starým heslem: s tradingovými příležitostmi je to jako s autobusem — když vám jeden ujede, za chvíli jede další. Trpělivost na dobrý vstup je levnější než uspěchaný skok do rozjetého trhu.
Vektorový vs. event-driven backtest
Existují dva základní přístupy k testování a liší se právě v tom, jak poctivě zacházejí s časem a plněním:
Vektorový backtest vezme celou historii jako tabulku a spočítá signály naráz. Je rychlý a pro první hrubý průzkum užitečný — ale nezná ordery, frontu ani poplatky, a protože vzorec „vidí" celý řádek dat najednou, snadno si tiše půjčí informaci, kterou byste v daný okamžik ještě neměli. Rychlost se platí přesností.
Event-driven backtest naproti tomu přehrává trh událost po události, přesně v pořadí, v jakém věci přicházely: přijde data, strategie zareaguje, odešle order, ten projde simulovanou exekucí, vrátí se plnění — a teprve pak přijde další událost. Na tom pořadí záleží: strategie v každém okamžiku ví jen to, co by věděla naživo, a plnění se odehrává v kontextu skutečné likvidity. Přesnost se platí výpočtem — ale kvalita chce kvalitu, a u testu, kterému máte věřit své peníze, je to správná investice. V praxi se obě rodiny běžně kombinují: vektorově se rychle prosejí kandidáti a to nadějné se pak dolaďuje event-driven. Náš engine je z principu event-driven; jak přesně simuluje burzu, rozebíráme v článku Backtest, který se chová jako živý trh.
Různá data pro různé strategie
Přesnost testu stojí a padá s tím, jak jemná data mu dáte — a správná volba dat se liší strategii od strategie. Platí přímá úměra: čím jemnější rozlišení dat, tím blíž je test realitě, ale tím dráž vyjdou data i výpočet. Od nejhrubších po nejpodrobnější:
- Svíčková (kline) data. Pro pomalejší, denní strategie často stačí. Uvnitř svíčky ale nevíte, v jakém pořadí cena prošla — jestli dřív na high, nebo na low. Dá se to zpřesnit: podle tvaru svíčky se s jistou pravděpodobností odhadne posloupnost open → high → low → close, nebo naopak, případně se použijí data, která skutečné pořadí znají. Svíčku tak lze obohatit o informaci o pořadí (dřív high, nebo dřív low) při zachování vysoké rychlosti — a ta je zásadní pro milionové běhy genetické optimalizace i rozsáhlý walk-forward nad obřím prostorem parametrů.
- Nižší časový rámec. Zkrácením intervalu se sekvence uvnitř původní svíčky zpřesní sama — víc svíček, míň nejasnosti o pořadí.
- Tiková data. Jednotlivé obchody a kotace tak, jak padaly. Odtud výš už testujete téměř na tom, co se skutečně dělo — vhodné pro rychlejší strategie, kde na pořadí a plnění záleží nejvíc. Replay kompletní historie obchodů na některých instrumentech je ale časově náročný a přesnost dat jde ruku v ruce s počtem testů, které stihnete: víc detailu znamená míň běhů za stejný čas. O rychlosti testů a benchmarcích se rozepíšeme v samostatném článku.
- Orderbooková data. Od nejlepší nabídky a poptávky (spread) až po plnou hloubku knihy — a dokonce indikátory postavené přímo nad orderbookem. Tady se teprve dá věrně modelovat fronta, částečná plnění a chování většího objemu. Pro drtivou většinu strategií — a i pro chytré institucionální tradery — přitom bohatě stačí zlomek knihy kolem spreadu: zhruba dvě procenta nabídek a poptávek od nejlepší ceny, podle likvidity daného instrumentu. Velké instituce sice nenechávají nic náhodě a volí širší pohled na trh, ale platí, že čím dál je objem od spreadu, tím méně na něm záleží.
Ještě zákeřnější je, co svíčka schová úplně: uvnitř jediného baru se cena může několikrát prohnat nahoru a dolů. Když má strategie na tomtéž intervalu stop-loss i cíl, rozhoduje, který se trefil dřív — a to vám svíčka neprozradí. Podle toho, jaký průběh uvnitř baru backtest předpokládá, může výsledek nadhodnotit (vezme si cíl dřív než stop), nebo naopak zkreslit v neprospěch. Tyhle rychlé pohyby jsou skryté v rozlišení datového zdroje; čím jemnější data, tím míň místa pro takovou domněnku.
Pravidlo je jednoduché: čím rychlejší kadence objednávek a čím větší jejich nominální hodnota, tím jemnější data strategie potřebuje, aby jí backtest nelhal. Pomalou denní strategii uřídíte na svíčkách; scalping na spreadu bez orderbookových dat testovat nemá smysl. Jako v každé doméně, i v algotradingu vždy záleží na kontextu.
Kolik dat a kolik obchodů
Čím víc dat na testování máte, tím líp — víc materiálu, víc odhalených zákonitostí, pevnější statistika. S jednou podmínkou: data musí být reprezentativní a přiléhat době. Těžko dnes vezmete graf akcie zpřed pětadvaceti let a prohlásíte, že když to tehdy vycházelo, zopakuje se to i teď — jiný fundament, jiný kontext, jiný příběh. Backtest na starých, dnešnímu světu vzdálených datech v tomhle smyslu lže. Když o tom ale víme, dáme starším výsledkům menší váhu — a přesto je nezahodíme, protože i stará data nesou informační hodnotu.
Druhá strana téže mince je počet obchodů. Málo uskutečněných obchodů má malou vypovídací hodnotu. Ruční trader-matador může udělat pět obchodů za rok a být úspěšný; u automatu je takové chování většinou nepřípustné, protože pět obchodů je jako pět hodů mincí — v krajním případě všechny vyhrajete, nebo všechny prohrajete, a ani jedno o kvalitě strategie nic neříká. Čím míň obchodů, tím blíž je „strategie" obyčejnému hazardu. Kolik jich už statisticky stačí, je otázka sama o sobě — souvisí s tím i Monte Carlo, které z jednoho výsledku dělá distribuci možných.
Další klamy, které o backtestu víme
Kromě nákladů a plnění číhá na backtest několik dalších pastí, které jsme se naučili rozpoznávat:
- Klam nízkoobjemových párů. Na málo likvidním instrumentu vám backtest ukáže krásná plnění za cenu na grafu — jenže tam ta likvidita ve skutečnosti není. Naživo byste větší pozici nenaplnili, nebo byste cenou pohnuli sami proti sobě. A čím tenčí trh, tím větší je propast mezi pěkným výsledkem backtestu a realitou. Nekvalitní backtest vám ta plnění ukáže; kvalitní naopak z opatrnosti před příliš dobrými výsledky pozici raději neotevře, nebo vstup a plnění záměrně zhorší tak, aby seděly na to, co by šlo naživo skutečně dostat.
- Klam přeoptimalizace (overfitting). Nejznámější past: strategii vyladíte tak dokonale na minulost, že venku, na nových datech, pak selže. Bráníme se proti ní walk-forward analýzou a analýzou přenositelnosti metrik z in-sample do out-of-sample — když výkon na neviděná data nepřejde, není co slavit: je to signál k opatrnosti, ne hotová strategie. Podrobně v článku o přeoptimalizaci.
- Klam optimalizace na jedno číslo. Kdo ladí čistě na maximální profit, vybere si nejšťastnější přeoptimalizovaný běh. Proto optimalizujeme na robustní kompozitní metriky, ne na holý zisk — rozebíráme to v článku Metriky, na které se optimalizuje.
- Klam přeživších (survivorship bias). Testujete jen na tom, co „přežilo" — na instrumentech, které dnes existují, na trzích, jež nezkrachovaly. Abraham Wald za války zkoumal vracející se bombardéry poseté dírami a doporučil vyztužit místa, kde díry nebyly — letadla zasažená tam se totiž nevrátila. Backtest vidí jen ty vrácené stroje; kdo testuje jen na dnešních vítězích, měří svět bez padlých. Víc v článku o vesmírech instrumentů.
- Klam černých labutí. Backtest umí čelit jen rizikům, která už z minulosti důvěrně známe. Extrapolovat minulá data a stavět systém, který ustojí přesně to, co se už stalo, je příprava na minulou válku — ta příští přijde jinudy. Proto systém stavíme tak, aby přežil i to, co v datech není. Rozebíráme v článku o černých labutích a tlustých koncích.
Co se o trhu nikdy nedozvíme
A teď to nejdůležitější, protože si nechceme lhát do kapsy. I ta nejvěrnější simulace naráží na hranici, kterou nejde překročit: nikdy se nedozvíme, jak by se trh zachoval, kdybychom tu pozici skutečně vystavili. Jak by se pohnula nabídka, když marketem vykoupíme spread. Jak by v tom okamžiku zareagovali ostatní algoritmičtí hráči. Jak by náš vlastní obchod změnil další chod trhu. Historická data tuhle odpověď neobsahují — zaznamenala svět, ve kterém jsme nebyli.
Tuhle nejistotu nejde odstranit. Jde ji jen zmenšovat — věrnou event-driven simulací, jemnými daty, pravděpodobnostním modelem plnění a slippage, započtenými poplatky a latencí. Každý takový krok posune výsledek testu blíž tomu, co vás naživo skutečně potká. Kompletní odpověď nikdy nemáme; ale můžeme se k pravdě přiblížit na hranu možného a přetáhnout statistiku na svoji stranu.
Testování není jen matematika
A ještě jedno přiznání, protože k poctivosti patří. Žádný backtest není stoprocentní a každý běží do konkrétního trhu s nějakým předpokladem o jeho chování — a ten předpoklad je naše rozhodnutí, ne fakt. I fundament je při stavbě strategie měkká technika: kde leží bod zlomu, jak rozdělit in-sample a out-of-sample, na co se vůbec díváme a co ještě považujeme za dost dobré — to všechno se zčásti řídí obchodní zkušeností a citem, samozřejmě až v mezích základních, nepřekročitelných indikací. Ty tvrdé mantinely platí vždy; uvnitř nich ale zůstává prostor pro úsudek.
Přiznat tenhle měkký prvek není slabina — je to přesnější popis reality než tvrzení, že testování je čistá matematika bez jediného rozhodnutí. Finální oblast parametrů, kterou pustíme do provozu, je průsečík tvrdých dat a let zkušeností s tím, jak se trhy chovají. Kdo předstírá, že v jeho procesu žádný úsudek není, si jen nevšiml vlastních předpokladů.
Jak se pravdě přiblížit — a kolik to dělá
Naše odpověď na tuhle celou kapitolu nejistot je jednoduchá zásada: v testu trh nešidíme, protože trh se ošidit nedá. Backtest u nás běží event-driven, nad daty v rozlišení, jaké strategie žádá, se simulací orderbooku, fronty, pravděpodobnosti plnění, skluzu, poplatků maker/taker, latence i částečných plnění — a protože má vlastní seed, každý běh jde přesně zopakovat. Detaily té exekuce popisujeme v článku o event-driven enginu.
Modelový příklad (ilustrace, ne naše data): vezměte strategii, která udělá 500 obchodů a na papíře — bez nákladů — vydělá 40 %. Připočtěte taker poplatek 0,075 % na obchod a průměrný skluz řekněme dva ticky. Poplatky samotné ukrojí zhruba 500 × dvojnásobek sazby (vstup i výstup) — a než se dostanete ke slippage a zmeškaným limitkám, z efektního čísla zbude zlomek, u citlivějších strategií i záporná hodnota. Přesně tenhle rozdíl mezi hrubým a čistým dělí strategie, které vydělávají, od těch, co vypadaly, že vydělávají. Na která čísla se přitom díváme, rozebíráme zvlášť.
Závěr: reklama, nebo test?
Backtest bez poplatků, spreadu a realistického plnění není test — je to reklama, kterou si strategie dělá sama sobě. Poctivý test začíná tam, kde připustíte, že v datech nejste, že se limitka nemusí naplnit a že nejhorší plnění přijde v nejrychlejším trhu. Právě tahle nepohodlná čísla oddělují nápady, které přežijí produkci, od těch, co shoří jak papír. My je nikdy neschováváme — ukazujeme trhy takové, jaké jsou, protože jedině tak má test smysl.
Chcete vidět, co vaše strategie udělá, když jí backtest přestane lichotit? Kontaktujte nás →