Jak provést backtesting obchodní strategie (7. díl)

V minulé kapitole jsme si rozebrali nejčastější problémy, které vám může MultiCharts hlásit v případě kompilace vašeho kódu. Tyto problémy vám pokryjí okolo 90 % všech problémů při kompilaci, proto je dobré je znát. V dnešní kapitole se podíváme na to, jak provést backtesting obchodní strategie. Projdeme si to, jaký časový interval zvolit, jak rozdělit testovací fáze a podíváme se i na výsledky. Výsledky nebudeme rozebírat do detailu, na to se podíváme v následující kapitole ohledně vyhodnocení a analýzy výsledků. Stručně si řekneme, co je to backtesting.
Co je to backtesting?
Backtesting je proces, při kterém si naši obchodní strategii otestujeme na historických datech, abychom viděli, jak by se chovala v minulosti. Díky tomu můžeme zjistit, zda má strategie potenciál být zisková, jak velké ztráty mohla vytvořit a jestli její pravidla dávají smysl ještě předtím, než ji začneme používat na reálném účtu. Backtesting nám tedy pomáhá ověřit obchodní nápad, najít možné chyby a získat větší jistotu, že strategie není postavená jen na domněnkách. Důležité je ale říct, že pokud strategie vyjde zisková v rámci backtestingu ještě nutně neznamená, že bude zisková v reálném obchodování. Díky backtestingu ale můžeme získat větší jistotu toho, že pokud se jí na testovacích a validačních setech dařilo úspěšně, tak tento vývoj může pokračovat i nadále.
Co je to overfitting a underfitting?
Overfitting obchodní strategie znamená, že strategii příliš přizpůsobíme historickým datům. Na backtestu potom může vypadat velmi dobře, ale v reálném obchodování často selže, protože se nenaučila obecně fungující pravidla, ale spíše jen konkrétní pohyby z minulosti. Underfitting je opačný problém, kdy je strategie příliš jednoduchá a nedokáže zachytit důležité vzorce v trhu. V praxi to znamená, že má slabé výsledky už v backtestu, protože její pravidla nejsou dostatečně kvalitní na to, aby dokázala využít obchodní příležitosti.
Optimální bod obchodní strategie je stav, kdy strategie není ani příliš složitá, ani příliš jednoduchá. To znamená, že v backtestu nevydělává jen díky tomu, že jsme ji přesně přizpůsobili minulým datům, ale zároveň má dostatečně kvalitní pravidla, aby dokázala zachytit reálnou obchodní výhodu. Docílíme toho tak, že strategii netestujeme pouze na jedné části historických dat, ale rozdělíme si data například na trénovací a testovací období. Na první části strategii nastavíme a na druhé ověříme, jestli stále funguje. Pokud má strategie rozumné výsledky i na nových datech, má jednoduchou logiku a není postavená na příliš velkém množství pravidel a parametrů, snižujeme riziko overfittingu i underfittingu.
Nastavení může vypadat například takto:
Vezmeme 10 let historie obchodního instrumentu a rozdělíme si toto období na 3 fáze.
V první fázi používáme první část historických dat, například roky 1–6. Na těchto datech strategii vytváříme, nastavujeme její logiku a ladíme parametry. To znamená, že zde zkoušíme například délku klouzavých průměrů, velikost stop-lossu, take-profitu nebo další pravidla vstupu a výstupu. Tato fáze slouží k tomu, abychom našli obchodní strategii, která dává smysl a má na historických datech rozumné výsledky. Ve druhé fázi používáme další část dat, například roky 7–8. Tady už bychom neměli strategii znovu výrazně ladit, ale hlavně ověřujeme, jestli funguje i mimo data, na kterých byla vytvořena. Pokud strategie fungovala dobře v trénovací části, ale ve validační části se výrazně zhorší, může to znamenat overfitting. Validační fáze nám tedy pomáhá zjistit, jestli strategie není příliš přizpůsobená pouze prvnímu období. Ve třetí fázi používáme poslední část dat, například roky 9–10. Tato data bereme jako úplně nová data, na která strategie předtím „neviděla“. V této fázi už strategii neladíme ani neměníme. Pouze spustíme finální test a sledujeme, jestli má strategie stále stabilní výsledky. Pokud strategie projde i testovací fází, máme větší jistotu, že její výsledky nejsou jen náhodné nebo přeučené na minulost.
Příklad:
Nyní přejdeme na příklad. Pro tento příklad můžeme využít index S&P 500 a jeho 10letou historii na time framu 5 minut. Data budou rozdělena takto:
Roky 2015–2020 = trénovací data
Roky 2021–2022 = validační data
Roky 2023–2024 = testovací data
Tedy pro jistotu to znamená:
Roky 2015–2020 = od 1. 1. 2015 do 31. 12. 2020
Roky 2021–2022 = od 1. 1. 2021 do 31. 12. 2022
Roky 2023–2024 = od 1. 1. 2023 do 31. 12. 2024
První si do platformy zadáme období od 1.1.2015 do 31.12.2020 a vložíme do grafu náš EMA trading bot, který jsme si vytvářeli v minulých kapitolách. Je tam popsaný celý postup, jak to provést. Nyní tedy klikneme pravým tlačítkem na náš graf a dáme „Insert Study“. Poté se nám spočítá náš výsledek. Rovnou se podíváme na výsledek strategie.
Na obrázku vidíme výsledek backtestu obchodní strategie na trénovacích datech v období od 1.1.2015 do 31.12.2020. Červená křivka ukazuje vývoj equity curve, tedy vývoj hodnoty účtu v čase. Vidíme, že strategie v tomto období celkově rostla a dokázala vytvořit zisk, ale zároveň měla i několik období poklesu, kdy se hodnota účtu krátkodobě snižovala. Tento výsledek nám zatím říká pouze to, že strategie fungovala na trénovacích datech. V tuto chvíli se můžeme rozhodnout měnit inputy ve strategii, abychom se snažili maximalizovat zisk či minimalizovat drawdowny, obecně najít ten nejlepší poměr, který nám strategie může přinést. Každopádně v rámci jednoduchosti nebudeme přidávat další proměnné jako například RSI nebo další konfluence, to budeme dělat až v následujících kapitolách. Abychom zjistili, jestli nejde pouze o overfitting, musíme ji následně otestovat také na validačních a testovacích datech.
Zkusíme se podívat na to, když změníme některý z inputů, jak se strategii bude dařit. Níže máme aktuální inputy. Zkusíme změnit například profit target z 500 na 1000 a uvidíme, co se stane.
Výsledek změny je následující:
Equity curve je stále rostoucí, což znamená, že strategie na trénovacích datech dokázala i po této úpravě generovat zisk. Zároveň ale vidíme, že průběh křivky není úplně plynulý a objevují se zde větší propady, hlavně v závěrečné části testovaného období (například pro prop účet to není ideální). Tato změna nám tedy ukazuje, že vyšší take profit může zvýšit potenciální zisk z jednotlivých obchodů, ale zároveň může změnit stabilitu strategie a velikost poklesů. Proto nestačí hodnotit pouze konečný zisk, ale musíme sledovat i průběh equity curve, drawdown a následně ověřit strategii na validačních datech.
Tento postup se nazývá optimalizace, kterému se budeme věnovat v jedné z budoucích kapitol, ukážeme si, jak najít optimální nastavení inputů, díky čemuž nebudeme muset náhodně tipovat, které nastavené je ideální. V tuto chvíli necháme nastavení take profitu na 1000 a ověříme strategii na validačních a testovacích datech.
Nyní přejdeme do formátu instrumentu a změníme čas od 1.1.2021 do 31.12.2022.
Výsledky validační fáze jsou následující:
Výsledky validační fáze ukazují, že strategie po změně take profitu z 500 USD na 1000 USD už na nových datech nefunguje tak dobře jako v trénovacím období. Na začátku validačního období equity curve ještě rostla a strategie dokázala vytvořit zisk, ale následně přišel výrazný pokles a křivka začala dlouhodobě klesat. To je pro nás důležitý signál, že úprava strategie mohla být příliš přizpůsobená trénovacím datům nebo být pouze dost jednoduchá či neměla edge. Jinými slovy, v trénovací fázi vypadala strategie dobře, ale na validačních datech se její výkonnost výrazně zhoršila. To může naznačovat problém s overfittingem, a proto bychom tuto variantu strategie neměli automaticky použít pro reálné obchodování bez dalšího ověření a úprav a měli bychom se vrátit zpět do trénovací fáze a celý proces zopakovat.
Pro zajímavost v rámci tohoto článku se podíváme i na poslední testovací fázi od 1.1.2023 do 31.12.2024.
Výsledky dopadli naprosto logicky, strategie prostě není dobrá a je velmi chatrná. V dlouhodobém horizontu sice může přinést zisk, ale bude mít velmi vysoké výkyvy. Není absolutně vhodná pro prop tradingový účet a důležité je též upozornit na to, že jsme do strategie zatím nepromítly simulaci poplatků vašeho brokera/prop firmy. Z tohoto důvodu můžete počítat s trošku horšími výsledky.
Závěr
V dnešní kapitole jsme si ukázali proces, jakým budeme vždy postupovat v tvorbě obchodních robotů. Vždy budeme rozdělovat období na 3 fáze (minimálně alespoň 2), abychom nedocílili toho, že naše strategie bude vykazovat známky underfittingu nebo overfittingu. V následující kapitole se podíváme na vyhodnocení a analýzu výsledků. To znamená, že si rozebereme klíčové finanční ukazatele, Monte Carlo analýzu a analýzu distribuce výnosů. Postupně si tedy vytváříme jeden ucelený obraz tvorby obchodního robota a na konci celého seriálu si vše poskládáme dohromady.
Radek Zalubil
Tým FXstreet.cz
Související články
Čtěte více
-
Algo trading pro každého: Uvažování nad vstupními podmínkami a jejich mechanizace (2. díl)
V minulé kapitole jsme si rozebrali úvod do algoritmického obchodování, kde jsme si řekli celkový úvod do tohoto seriálu včetně toho, co vše budeme probírat v budoucnu. Dnes začneme druhou kapitolu našeho seriálu o algoritmizaci a podíváme se na uvažování nad vstupními podmínkami a jejich mechanizace, což je velmi důležité téma, které nás bude potkávat při každé tvorbě jakékoli strategie. V dnešní kapitole probereme postup, jakým způsobem uvažovat v mechanizaci vstupních a výstupních podmínek. -
Historická data, kde je získat, jak připojit svého data providera do MultiCharts a proč je budeme potřebovat? (4. díl)
V minulé kapitole jsme si rozebrali základní orientaci v platformě MultiCharts. Ukázali jsme si instalaci a základní kroky v platformě, bez kterých se neobejdeme. Dnes si ukážeme velmi důležitý další krok, a to je napojení data providera neboli poskytovatele dat, bez kterého se neobejdeme, abychom vytvořili plnohodnotného obchodního robota (AOS). První si ale v rychlosti řekneme, proč je to důležité a následně přejdeme ke konkrétnímu postupu, jak to provést. -
Jak vytvořit první kód pro AOS pomocí AI bez znalosti programování (5. díl)
V minulé jsme rozebrali to, jak stáhnout historická data a napojit je do platformy MultiCharts, což je velmi důležitý krok pro celkovou práci a tvorbu obchodní strategie. Čím delší historickou řadu budeme mít k dispozici, tím spolehlivějšího výsledku pravděpodobně dosáhneme. V dnešní kapitole se podíváme na to, jak vytvořit náš první kód pro AOS a jak ho nahrát do platformy a nadále s ním pracovat. -
Nejčastější problémy, které hlásí MultiCharts s fungováním kódu a jak je vyřešit (6. díl)
V minulé kapitole jsme si ukázali, jak vytvořit první obchodní kód pomocí AI a jak ho následně nahrát do platformy MultiCharts. Prošli jsme si celý postup od zadání strategie, přes vytvoření kódu, až po jeho vložení do platformy a základní otestování na obchodních instrumentech. -
Stáhnutí a orientace v platformě, kde budeme pracovat a tvořit obchodní roboty - Multicharts (3. díl)
V minulé kapitole jsme si rozebrali téma uvažování nad vstupními podmínkami a jejich mechanizaci. To znamená, že jsme si v ní probrali postup, jak přetransformovat náš nápad na konkrétní vstupní podmínky, které lze zapsat do kódu a budou objektivní. Objektivní pravidla znamenají, že jsou jasně definovaná, jednoznačně vyhodnotitelná a počítač je dokáže zpracovat přesně podle našeho záměru. V dnešní kapitole si rozebereme další téma, a to už více praktické, konkrétně si představíme platformu, ve které budeme tvořit naše obchodní roboty a provádět analýzy, konkrétně se bude jednat o MultiCharts. První si v rychlosti řekneme, co je to MultiCharts. -
Úvod do algoritmizace obchodních strategií (1. díl)
Vítejte u nového seriálu s názvem Algo trading pro každého, ve kterém si ukážeme spoustu užitečných věcí, jak algoritmizovat obchodní strategie bez znalosti programování od A do Z. Algoritmizace obchodních strategií už dávno není jen doménou profesionálních programátorů, kvantitativních analytiků a velkých fondů. Dnes si může vlastní automatický obchodní systém postavit prakticky každý, kdo má jasně definovanou myšlenku, disciplínu a ochotu převést své rozhodování do přesných pravidel, a to i bez znalostí programování. V tomto seriálu si postupně ukážeme, jak z obchodního nápadu vytvořit funkční AOS (Automatický Obchodní Systém), jak jej otestovat na historických datech, vyhodnotit jeho výsledky a připravit pro reálné nasazení. Zaměříme se přitom na praktickou stránku celého procesu tak, aby byl seriál srozumitelný i pro ty, kteří nemají programátorské zkušenosti, ale chtějí přestat obchodovat čistě intuitivně a začít nad strategiemi přemýšlet systematicky, objektivně a s důrazem na měřitelné výsledky.
Diskuse ke článku
| Diskuse je přístupná pouze pro registrované uživatele. |
| Přihlásit se | Nová registrace |

























