Kvalitnější optimalizace ručních backtestů
Mnoho převážně intradenních obchodníků, kteří to myslí s tradingem opravdu vážně, se již pustilo do ručních backtestů některého z obchodních systémů (například FinWin nebo jiných). V dnešním článku si povíme, jak s obchody nasbíranými v našem backtestovém Excelu pracovat o krůček efektivněji než doposud.
Účelem komplexního backtestu je nejenom ověření, že systém funguje a má potenciál do budoucna, případně skrze více backtestů ujasnění, jaký trh a časový rámec (timeframe) budeme chtít v budoucnu obchodovat, ale také stanovení optimálních hodnot stop-lossů a profit targetů, případně hodnot některých doplňkových filtrů, se kterými v Excelu pracujeme. Každý trader tedy ve svém Excelovském backtesteru nejenom vytváří historii obchodů, ale také provádí určitou jednoduchou optimalizaci. A právě optimalizace libovolných parametrů, tj. v případě většiny například stop-lossů a profit targetů bude předmětem zlepšení, které si nyní popíšeme.
Nejedná se v podstatě o nic nového: o čem chci dnes mluvit je optimalizace hodnot na in-sample datech a následné ověření na out-of-sample datech. O této metodě už jsem na Finančníkovi několikrát psal, než se tedy vrhneme do praktického postupu, krátké připomenutí:
pokud se chystáme optimalizovat jakékoliv hodnoty, tj. například stop-lossy a profit targety, měli bychom vzít veškerá data, která máme k dispozici, a rozdělit je na dvě části: prvních 70 % a 30 %. Prvních 70 % dat budeme nazývat In-Sample data (IS), zbylých 30 % budeme nazývat Out-Of-Sample data (OOS). Co nyní s těmito daty uděláme? Je to velmi jednoduché. Veškerou optimalizaci, tj. nalezení optimálních parametrů, realizujeme na IS datech. Poté parametry, které jsme shledali jako nejoptimálnější, nasadíme na OOS data. Pokud se jedná o kvalitní, robustní optimalizované hodnoty, pak stejné hodnoty nasazené na OOS datech budou vytvářet podobnou charakteristiku equity, jakou jsme vytvořili skrze optimalizaci na IS datech. Pokud equity půjde do strany, nebude vydělávat progresivně, nebo dokonce půjde dolů, pak to znamená, že jsme naše hodnoty přeoptimalizovali a hodnoty nejsou robustní. Zde jednoduchý obrázek, ze kterého by mělo být vše jasnější:
Na obrázku vidíte, že optimalizované hodnoty na IS vytvořily v podstatě velmi strmě rostoucí equity. Po nasazení těchto optimalizovaných hodnot na OOS data, tj. data, na kterých optimalizované parametry ověříme, pokračovala equity v růstu, avšak již se značně výraznějšími drawdowny a menší progresivitou. Optimalizované parametry tedy nejsou vyloženě špatné, nasazení do budoucna můžeme realizovat, ale zrovna tak může být strategie předmětem dalších úprav, neboť lehká (zřejmě ne příliš nebezpečná) přeoptimalizace může být v tomto případě patrná. Pokud by však equity na OOS datech byla o trochu horší, už bychom mohli hovořit o přeoptimalizaci a tak by úpravy systému nebo optimalizovaných hodnot byly žádoucí.
Provedení IS + OOS v Excelu
Tato technika tedy může být velmi užitečná i například, když optimalizujete hodnoty stop-lossů a profit targetů systému FinWin. Nyní se pokusím krok po kroku popsat, jak na to.
1) V prvé řadě je nutné, abyste měli dostatečný vzorek obchodů. Ideálně několik set, řekněme 300 (minimum) a více.
2) Rozdělte si data na IS a OOS. Následně si svůj backtestový deník uložte pod dvěma různými názvy: první bude mít název vašeho systému s přídavkem IS, druhý bude mít název vašeho systému s přídavkem OOS.
3) Z deníku s přídavkem IS odstraňte posledních 30 % obchodů (tj. pokud budete pracovat se vzorkem 300 obchodů, tak konkrétně posledních 90 obchodů) a tato data překopírujte do deníku s přídavkem OOS.
4) Nyní tedy deník IS bude obsahovat prvních 210 z celkem 300 nasbíraných obchodů, deník OOS bude obsahovat POUZE posledních 90 obchodů.
5) Na základě analýzy MAE/MFE proveďte optimalizaci profit targerů a stop-lossů, případně dalších filtrů (den týdne apod.) v deníku IS.
6) Až budete hotovi, veškeré optimalizované hodnoty (tj. PT, SL apod.) nastavte v OOS deníku.
7) Pokud jsou optimalizované hodnoty robustní, pak by equity na OOS měla mít podobnou charakteristiku jako IS equity. Drawdown by neměl být vyšší a ziskovost by měla být adekvátní alespoň kolem 40 % zisku, kterého jste dosáhli na IS optimalizaci.
Pokud se ukáže, že equity na OOS datech vypadá podstatně hůře, pak jsou vaše hodnoty přeoptimalizované. Vraťte se tedy zpět k IS deníku a začněte znovu. Ideálně začněte zjednodušováním. Zde několik rad:
a) zkuste stejné hodnoty SL a PT pro všechny patterny, akorát s rozdílem na stranu long a short. Tím byste měli získat robustnější hodnoty, které by měly projít i OOS daty.
b) Pokud ani to nezabere, zkuste obecně pracovat s nižšími profit targety, případně použít stejné stop-lossy a profit targety pro obě strany (tj. long i short).
c) Pokud testujete navíc nějaké filtry (den týdne, konkrétní časové období atd.), zkuste tento filtr odebrat. Ukáže se, zda to není právě ten filtr, který může způsobovat přeoptimalizaci.
Tato technika IS+OOS optimalizace v Excelu je poměrně jednoduchá, dá vám však podstatně realističtější hodnoty a bezpečnější základ pro váš živý trading, než kdybyste tuto techniku nezrealizovali.
Tomáš Nesnídal