Jak na robustní testování
Jak je našim čtenářům známo, doposud jsem se primárně věnoval diskrečnímu obchodování. Tento směr u mě stále zůstává preferencí číslo jedna, neboť je třeba porozumět trhům a využít možnosti drobných nuancí, které počítačovými kódy nelze nahradit (hovořím o citu pro trh). Přesto jsem se posledních pár měsíců věnoval procesům, které byly částečně asistovány počítačem (proto tento proces nazývám CAT - Computer Asisted Trading) a o některé zkušenosti bych se nyní rád podělil.
Po pravdě řečeno, k výraznějšímu využití počítače v rámci tradingu jsem se dostal v souvislosti se strategií akciových spreadů (nebo-li statistické arbitráže), u kterých jde převážně o matematické modely, s nízkou nutností hlubšího diskrečního (subjektivního) úsudku. To však neznamená, že by nebyl subjektivní úsudek v určitých částech potřeba! Právě naopak - proto také proces obchodování statistických arbitráží nazývám CAT, nikoliv FAT (Full-Auto-Trading), ani AOS. Diskreční úsudek využívám jak v rámci samotného obchodování - hlavně v oblasti rozhodnutí o tom, kdy a proč přerušit obchodování, nebo modifikovat portfolio párů. Diskreční úsudek však výrazně využívám už v samotném procesu výběrů párů k obchodování, ve které aktuálně přenechávám opravdu velký kus práce počítači - přesto finální rozhodnutí jaký pár "nasadit" zůstává čistě diskreční. Celou tuto zkušenost maximálního využití počítače v kombinaci s diskrečním posouzením, získanou za posledních 6 měsíců tvrdé práce na párovém obchodování, jsem shledal jako velmi pozoruhodnou, pomohla mě stanovit několik nových postupů a procesů pro další budoucí vývoj strategií, a dnes bych rád shrnul několik nejdůležitějších bodů, ke kterých jsem ryzí praxí došel jako k nutnosti, chcete-li stavět systémy CAT, nebo AOS (čisté AOS jsou však skutečně zcela mimo můj zájem).
1. výběr období k backtestování
V prvé řadě je skutečně kriticky důležité, jaké období backtestujeme. Platí totiž jediné pravidlo: vybrané období by mělo zahrnovat co nejširší škálu chování trhu, aby výsledky odrážely skutečně většinu možných situací. Osobně jsem pro proces testování párů vybral období posledních 5ti let. Proč toto období? U většiny akcií je snadné získat historická data za 5 let nazpět a zároveň toto období vystihuje velmi silnou škálu scénářů. Stačí pohled na graf indexu S&P za posledních 5 let:
Pojďme se kouknout, jaké scénáře v sobě obecně backtestování na datech za posledních 5 let zahrnuje:
1. velmi nízká volatilita
2. střední volatilita
3. velmi vysoká volatilita
4. období růstu
5. období volatilní stagnace
6. období krize a velmi silných poklesů
7. období velmi silných růstů se zvýšenou volatilitou
Naprosto široká a dostatečná škála pro potřebný backtest. Nic méně, v žádném případě bych neakceptoval dobu kratší, neboť by pak hrozilo, že jednu z kriticky důležitých period chování trhu vynecháme. Z tohoto důvodu jsem musel opustit testování řady akciových titulů - jednalo se totiž většinou o novější tituly, pro které neexistovala data 5 let nazpět. Pamatujte: účelem backtestu je dosáhnout řešení, které bude co nejvíce robustní. V případě mého projektu akciových spreadů šlo o nalezení co nejrobustnějších párů a proto jsem s robustností začal už při výběru období, v rámci kterého jsem dále vyhledával a backtestoval jednotlivé páry. Tento princip je však univerzální: ať budete chtít backtestovat cokoliv, musíte se v prvé řadě zcela ubezpečit, že vaše data pokrývají co nejširší spektrum možných scénářů a chování trhů.
2. WalkForward & StressTest (Robustness Matrix)
Nyní, naprosto nejzásadnější a nejdůležitější část, kterou jsem se během stavby strategie akciových spreadů naučil a v rámci které jsem si následně definoval a stanovil postupy pro vývoj dalších systémů, je WalkForward analýza a StressTest (WF/ST).
WalkForward analýza je proces, při kterém testujete systém na historických datech, část dat si však necháte "v zásobě" jako neodkrytá. Na této "neodkryté" části pak testujete nejvhodnější nalezené parametry daného systému. Samozřejmě, předpokladem je, že se systém bude chovat na "neodkrytých" datech stejně, jako na těch, na kterých jsme testovali. Pokud tomu tak není, můžete rovnou zapomenout na nasazení systémů do živých trhů.
Osobně jsem tento postup trochu modifikoval a spojil s takzvaným Stress Testem. Takto totiž nazývám test, kdy testuji systém v daném období na několik blízkých parametrů s očekáváním, že systém se bude chovat velmi podobně na různých parametrech. Řekněme, že testujete systém, u kterého se nastavuje perioda některého ze vstupních indikátorů. Jako nejoptimálnější se ukáže perioda 15. Stress Test je v mém podání proces, kdy testujete také periodu 10 a periodu 20 a ověřím si, že při těchto periodách se chová systém stále velmi podobně: pouze tak docílíte robustnosti! Jak jsem tedy naznačil, skombinoval jsem tyto dvě metody dohromady a vytvořil něco, čemu říkám Robustness Matrix. O co se jedná?
V prvé řadě jsem vytvořil ve svém testovacím Excelu speciální makro, které testuje ve 4 různých časových sériích, s posunem začátku po 1 roku a délkou trvání testované série 2 roky. Jinými slovy, rozdělil jsem oněch 5 let vybraných pro backtest na 4 stejně dlouhé dílky, s tím, že každý začíná a končí v jiný okamžik. Tím mohu nahlédnout na chování systémů v různých rozdílných úsecích dané periody. Názorně testování 4 sérii vypadá takto:
Pokud bych chtěl aktuálně začít testovat nějaký konkrétní pár, pak bych s využitím dat 5 let nazpět testoval tyto konkrétní časové úseky (série):
Nyní, takto modifikovanou WalkForward analýzu skombinuji s tím, že v každém testovaném rámci (okně) budu testovat zároveň i 3 různé periody vstupního parametru systému, například periodu 10, 15 a 20. Tím vytvořím Robustness Matrix, jehož finální podoba po úspěšném spuštění testu může vypadat například takto (má konkrétní podoba Robustness Matrixu):
Test v tomto příkladu proběhnul na akciovém páru, který jsem záhy vyhodnotil jako velmi nadějný, podrobil dalšímu testování a nakonec vyhodnotil jako vhodný k živému obchodování. Proč?
Podívejte se dobře na to, co nám tabulka říká. Dozvíme se totiž z ní následující:
- Ať byste začali daný pár obchodovat v roce 2005, 2006, 2007, 2008, 2009 nebo 2010, byl by vždy ziskový!
- Ať byste v daném období začali obchodovat s periodou výpočtu potřebných kalkulací 10, 15, nebo 20, byl by pár vždy ziskový!
- Pokud se kouknete na všechny případy výše - ve všech pár prokazuje velmi vysokou stabilitu WIN%, tj. téměř v každém testovaném časovém rámci a s téměř každou z testovaných period by se obchodoval s úspěšností kolem 70%!
Existuje snad lepší důkaz, jak se přesvědčit, zda-li je pár skutečně robustní? Jenom se na to podívejte z praktického pohledu: je prakticky jedno, v jaké době za posledních 5 let byste začali pár obchodovat, je naprosto jedno, s jakou z period potřebných ke kalkulacím v rozmezí 10-20 byste začali obchodovat - a přesto byste stále dosáhli zisku a velmi vysoké úspěšnosti! To vše s ohledem na fakt, že procházíme obdobími naprosto veškerých charakteristik trhu, tj. od malé, přes střední až po velmi vysokou volatilitu a také od růstu, přes stagnaci až po výrazný pád!
Robustness Matrix jsem tedy shledal jako naprosto klíčový prvek pro backtestování a výběr finálních párů a po pravdě řečeno, tato metoda se mě osvědčila tak dobře, že jsem si stanovil velmi přesné postupy, jak s jejím využitím v budoucnu nadále testovat jakékoliv další poziční, intradenní, nebo i opční systémy. Posouzení Robustness Matrixu je pak jeden z těch prvků, který je stále diskreční: je velmi vzácné, aby tabulka vypadala tak, jako tato na ukázce. Většinou budou alespoň 1-3 buňky vykazovat ztrátu. Nedá se však jednoznačně říci, zda-li kvůli tomu danou strategii vypustit, nebo s ní pracovat dále. K tomu je potřeba další studium testovaných parametrů a pohled na equity křivku - vše z diskrečního pohledu, který je v tradingu nezastupitelný.
Robustness Matrix je další klíčový prvek, bez kterého bych se dnes už nepouštěl do stavby jakéhokoliv obchodního systému.
Finální kontrola stability equity křivky
Nyní, pokud najdu strategii nebo pár, který projde vysoce náročným filtrem Robustness Matrixu, podrobím takový poslednímu testování, ve kterém chci vidět jediné: stabilní equity křivky. Ta by měla být strmě rostoucí, s minimem draw-downů - a to na 3-4 různých rozdílných periodách vstupního parametru systému. V tomto případě již testuji jednorázově na celém období 5ti let, ve kterém chci vidět, jak stabilní byla distribuce zisků v jednotlivých fázích velmi rozdílného chování trhu. Pokud mám štěstí a narazím na opravdu dobrý pár (nebo strategii, pokud využijete podobný postup k testování obchodních strategií), vypadají srovnávací equity zhruba takto:
Jak vidíte, za celých 5 let, tj. ve všech rozdílných fází chování trhu jako celku, by velmi dobře fungovala perioda 10, 15, 20 i 25 (v tomto případě při alokaci vstupního kapitálu 10,000 USD). Neumím si představit, co více ještě udělat, abychom se přesvědčili o absolutní robustnosti takového páru. Finálně bych pak vybral periodou 15 nebo 20 - chci mít jistotu, že jak směrem dolů, tak směrem nahoru, mám ještě značný prostor, ve kterém se strategie stále chová spolehlivě.
Opět naprosto klíčové - finální rozhodnutí je zde diskreční. Je to sám trader a jeho diskreční pohled, který rozhodne, zda-li systém/pár nasadit do živého prostředí trhů. Celkový pohled na kvalitu equity křivky stavím často nad různé čistě počítačové ukazatele daného páru/systému - a zároveň vím, že můj cit pro "dobré" equity křivky je něco, co prostě naprogramovat nelze.
Závěrem
Toto je tedy ukázka mého CAT - práce, kdy kombinuji v maximální míře počítač a diskreční posouzení. Je tento proces zdlouhavý a náročný? Ano, velmi. Je to ale také jediný postup, který jsem shledal, že dokáže skutečně najít pouze ta nejrobustnější řešení, která mají největší šanci přežít a fungovat v budoucnu. Žádná přeoptimalizace, žádné vratké systémy nebo páry - pouze velmi robustní řešení, u kterého je skutečně značně nízká šance, že by v budoucnu systém nebo pár nepřinášel peníze. Stát se to může, ale z portfolia párů nebo systémů bych toto nečekal u více, jak 20%. Pro mě je to také jediný způsob, jak udělat celou přípravu skutečně precizně a zodpovědně a připravit se tak s dostatečnou sebedůvěrou na obchodování nemalého kapitálu. A pokud se ptáte, kolik tímto způsobem a postupem budete nuceni vyřadit párů / systémů jako nevyhovujících, zde je letmá představa: na začátku jsem stavěl páry z cca 4000 akcií, řekněme tedy, že 2000 párů. Z těch jsem shledal velmi hrubou selekcí zhruba 300 jako vhodných pro další testování. Ty jsem dále eliminoval skrze visual score rating na dalších 170. Těchto 170 jsem podrobil Robustness Matrix analýze a dalšímu testování. Výsledkem je cca 20 obchodovatelných párů, s tím, že portfolio sestavím jen z 8mi zcela nejlepších a zbytek dám na "waiting list". Dá se tedy říci, že pouze 1% splní veškerá velmi náročná kritéria. Toto 1% však stojí za to - je to to nejlepší z nejlepšího, nejrobustnější z nejrobustnějšího. Je to jako hledání jehly v kupě sena, stojí však za to. Apropos, pokud vás zajímá, zda-li budu prezentovat nějaký top-list zajímavých párů na našem kurzu, pak samozřejmě ano.
Tomáš Nesnídal