Testování robustnosti intradenních systémů pomocí WFO
Na Finančníkovi jsme se poslední dobou věnovali především swingovým obchodním systémům. Důvod je zřejmý. Na vyšších denních timeframe se snadněji tvoří robustní a dlouhodobě funkční strategie. Jsem přesvědčen, že každý obchodník by měl začít právě zde. Nižší timeframe jsou ale také zajímavé a dokáží přinést do portfolia další rozměr diverzifikace. Navíc i s menšími účty lze obchodovat systémy také ve futures, neboť v intradenních systémech lze používat podstatně menší stop-lossy než ve swingových strategiích.
Systematické intradenní strategie s sebou bohužel nesou nezanedbatelná „ale“. Konkrétně:
Vytvořit skutečně funkční, nepřeoptimalizovanou intradenní strategii je těžší než vytvoření swingové strategie. Hlavně proto, že v intradenních datech je mnohem více šumu a charakter trhů se hodně často mění.
Intradenní strategie jsou také náchylnější na podcenění reálných nákladů na obchodování – tj. jak komise, tak skluzy v plnění. Řada strategií bude v backtestech vypadat příliš optimisticky.
A především – v intradenních trzích je potřeba počítat s tím, že strategie mají s jedním nastavením omezenou životnost. Mohou to být možná i roky, ale obecně je nutné počítat s tím, že strategie je potřeba bedlivě sledovat a občas nahradit nebo je přenastavit na aktuální charakter trhů.
Jedna z hlavních otázek, kterou si bude pokládat jistě každý obchodník je, jak zvolit pro živé obchodování co nejrobustnější nastavení intradenní strategie. Resp. jak se ujistit, aby zvolené nastavení nebylo tzv. přeoptimalizované. „Napasované“ na historické průběhy dat, které se v intradenních trzích ale nemusí již nikdy opakovat.
Odpověď na tuto otázku vede de facto k jedinému řešení. Pro posuzování výkonnosti a robustnosti strategie musíme používat jen tzv. out of sample data. Data, která jsme nepoužili pro vytváření strategie.
Například budeme strategii vyvíjet na intradenních datech 1.1.2017 – 1.1.2018 (in sample - IS). Pro posouzení robustnosti pak použijeme data 1.1.2018 – 1.1.2019 (out of sample data - OOS). V OOS budeme chtít vidět, že strategie má do určité míry podobnou charakteristiku jako v IS. Toto je tradiční způsob vytváření strategií. V intradenních trzích ale narazíme na skutečnost, že IS a OOS periody nemohou být příliš dlouhé (protože trhy se často mění), a tak v jednom OOS budeme mít poměrně málo dat na to, abychom mohli na daném vzorku stavět nějaké hlubší závěry.
Řešením je tzv. Walk forward optimalizace (WFO), kdy máme segmentů IS a OOS v historii více. Sám používám přístup, kdy IS v historii posouvám například po dvou letech, systém optimalizuji na toto období, z IS vyberu nejvhodnějšího kandidáta na obchodování a následně otestuji nastavení na roce IS dat, který následují po OOS:
Obrázek pochází z manuálu Amibrokeru, který pro WFO sám používám.
Hlavní výhodou tohoto přístupu je skutečnost, že získáme hned několik OOS segmentů. Tedy mnohem více dat, na kterých můžeme posuzovat robustnost systémů. Realističtěji se můžeme dozvědět, jestli se systém chová na OOS tak, jak bychom očekávali na základě výsledků z IS optimalizace.
Popsaná technika je velmi základní a najdete ji dnes myslím ve všech programech umožňujících testování obchodních systémů. Již v základní podobě může ale WFO sloužit jako dobrý pomocník. Pro vytváření skutečně robustních systémů je ale potřeba na celém procesu zapracovat. Zde jsou základní principy, které používám:
1. Klíčové je dobře promyslet výběr „kandidátů“ nastavení z IS periody. V IS probíhá optimalizace, kdy systém zkouší různá nastavení systémů tak, aby vyhovovala danému období. Co ale hledáme? Nejvyšší zisk? Nejmenší drawdown? Kombinace obojího? Něco jiného? To jsou klíčové otázky. Osobně používám vlastní funkci „finscore“, která je složena z vah různých kritérií. Například chci, aby měl systém v IS určitý počet obchodů, určitý max. drawdown, určité zhodnocení. Pokud jsou parametry mimo můj zájem, tak je kandidát penalizován. Mám zájem vybírat nikoliv nejlepší, ale nejrobustnější kandidáty. Doporučuji tedy v IS neoptimalizovat na jeden jednoduchý cíl, jakým může být například zisk.
2. Potřeba je také promyslet vyhodnocení testů OOS vs. IS. Jaké parametry srovnávat, abychom se co nejvíce ujistili, že výsledky jsou robustní? Nemělo by stačit jen požadovat, aby byl IS ziskový.
3. Robustní parametry by měly snést i určitou míru náhody. Tu lze simulovat třeba tak, že v IS malinko změníme data (dodáme do nich šum), případně změníme periody IS/OOS. Drží se výsledky systémů stále v rozumných mezích? Pak je velká šance, že daný systém je skutečně připravený na nasazení live.
Co se praktické implementace výše popsaného týče. Jak vidíte, potřeba většiny traderů bude nakonec mít WFO proces co nejvíce pod vlastní kontrolou. Což bohužel není úplně možné v každém programu, který WFO poskytuje. Sám jsem zatím nevíce spokojený s Amibrokerem. Kde je jednak možné optimalizovat WFO s pomocí vlastních cílů, vše velmi jednoduše řídit přes OLE (například mnoho kroků spojovat do jednoho kompaktního workflow) a hlavně nechat program pracovat opravdu rychle (v článku Automatizované analytické workflow s naprosto minimálními náklady? je příklad, který jsem před časem na Finančníkovi publikoval). Pokud Amibroker máte (nebo jej testujete), určitě doporučuji možnosti WFO vyzkoušet. A pokud vytváříte intradenní systematické přístupy, pak testování robustnosti přes WFO by nemělo chybět ve vašem arzenálu používaných nástrojů.
Petr Podhajský
Fulltime obchodník věnující se tradingu více než 20 let. Specializace na systematické strategie obchodované na futures a akciích. Oblíbený styl obchodování: stavba automatizovaných portfolio systémů, které využívá i při správě většího externího kapitálu.