Jump to content
Co nového? Mé kurzy
Články a tutoriály:
Archiv článků Psychologie obchodování Jak na obchodní plán Mé obchodní strategie
  • Genetické algoritmy: K čemu jsou pro trading dobré?

    Na základě článku z minulého týdne jsem obdržel několik dotazů, zda bych trochu více nepřiblížil, co jsou genetické algoritmy (GA) a jejich využití v praxi. Pokusím se dnes o trochu praktického přiblížení, které může dát pokročilejším traderům a vývojářům AOS bližší představu, zda GA mohou být právě pro ně.

    V prvé řadě bych rád uvedl, že se v dnešním článku nebudu zabývat ani tak teorií (kdo chce teorii GA, nechť si najde na internetu), ale převážně praxí - resp. tím, v čem jsem GA shledal jako praktickou pomůcku pro trading. Sám jsem ryzí praktik a zajímají mě převážně výsledky, akademické debaty tudíž přenechávám teoretikům.

    Z ryze praktického pohledu jsou GA jednoduše nástrojem, který vám pomůže mnohem rychleji a efektivněji zvládnout optimalizaci vícero proměnných v rámci vašeho obchodního systému. Díky rychlosti a efektivitě GA je však možné využití daleko širší. GA se dnes v podstatě používají dvojím způsobem: k navrhování obchodních systémů a pokročilé optimalizaci. Pokusím se obojí trochu více přiblížit.

    Navrhování systémů s pomocí GA

    Této fázi se říká také D&P process neboli Design & Prototype. Pokud jste někdy v minulosti zkoušeli stavět obchodní systémy, pak víte, jak pracné může něco takového být. Řekněme, že máte například jednoduchou ideu, že otestujete AOS s myšlenkou vstupovat long nebo short do trhu e-mini Russell vždy, když NYSE TICK překročí určitou úroveň svého klouzavého průměru. Idea jednoduchá, existuje zde ale příliš mnoho otázek k praktické realizaci:

    • Jaký typ klouzavého průměru použít (SMA, EMA, WMA, KAMA, TMA apod.)?
    • Jakou periodu klouzavého průměru použít?
    • Jaký zvolit výstup?
    • Je rozumné aplikovat posun na BE? O kolik a kdy?
    • Je rozumné aplikovat profit target? Na jaké hodnotě?
    • Měl bych aplikovat nějaký další filtr? (Mám například 3 nápady na filtry a potřebuji všechny otestovat).
    • Jaký timeframe zvolit?

    Vidíte, že už z otázek výše plyne obrovské množství možných kombinací/permutací. Přitom některé kombinace mohou být výrazně lepší než jiné (a některé kombinace nemusí fungovat vůbec), takže nemáte jinou možnost než všechny možné kombinace vyzkoušet. K tomu je třeba vyzkoušet i různé periody nastavení, takže pokud budete opravdu efektivní, máte práci minimálně na celý další týden.

    Existuje ale i jiná možnost - zapojení GA. Pokud disponujete inteligentním softwarem a trochou programátorského umu (pár tipů na software zmíním na konci), pak jednoduše nastavíte do GA softwaru veškeré potřebné idikátory, rozsah parametrů - a o zbytek už se postará počítač. GA totiž mohou pracovat s jednotlivými nástroji (indikátory) jako s takzvanými "switches" (přepínači), takže samy postupně zkoušejí kombinovat různé indikátory dohromady, dokud najdou tu pravou kombinaci, která nabízí největší potenciál. GA budou postupně zkoušet různé typy klouzavých průměrů, různé druhy výstupů, různé hodnoty nastavení a dokonce i různé timeframy, dokud nenajdou to, co po nich žádáte. A pokud GA žádné řešení nenajdou, tak jednak víte, že zkrátka a dobře vaše idea nemá potenciál a jednak jste s nefunkční ideou nestrávili více jak 2 hodiny času. Ušetřili jste tedy týden nervů a frustrace. To ale není zdaleka všechno.

    Jak už jsem naznačil, existuje v rámci možného řešení miliony možných kombinací. Řekněme, že například budete chtít otestovat celkem 5 klouzavých průměrů, každý z nich s možností 50 různých nastavení periody (např. perioda 1-50). To znamená, že už zde existuje 50x50x50x50x50 = cca 300 miliónů možností. Pokud přidáme výstupy, SL, PT apod., velmi jednoduše se dostaneme na desítky miliard možností. Jelikož tak vysoké číslo je už mimo naší běžnou představivost, zůstaňme "jen" u 300 miliónů. Pokud bych nechal stavět systém v základu na 5minutových datech, za posledních 5 let nazpět, pak s mým velmi rychlým počítačem za plného využití 12 jáder by jedna kombinace trvala cca 1 vteřinu. Klasickým procesem optimalizace (brute force) by tedy hledání možného obchodního systému trvalo zhruba 10 let, což je poměrně dlouhá doba.

    GA však fungují na zcela jiném principu, než klasická brute force metoda. V podstatě díky náhodnému samplování a následných "genetických modifikací" dokáží celý proces realizovat pouze za zlomek běžného času, takže v případě mého počítače jsem schopen u podobných experimentů vidět prvotní výsledky už do 12 hodin. GA přitom fungují a pracují velmi "inteligentně", neboť se během procesu samy "učí", takže pokud po 12 hodinách nevyprodukují GA s přednastavenými nástroji potenciálně zajímavý systém, je velmi pravděpodobné, že tudíž takový ani neexistuje.

    Aby to navíc nebylo málo, GA hledají finální řešení trochu na jiném principu, než běžná brute force metoda. U GA si totiž můžete nastavit, co chcete, aby bylo výsledkem (říká se tomu fitness function - zkráceně FF). Zatímco u klasické brute force metody se vždy optimalizuje s ohleden na Net Profit, v případě použití GA můžete počítači říci, že například chcete hledat jenom taková řešení, která nabízejí maximální profit při minimálním drawdownu (poklesu equity). Konkrétně můžete například použít FF Profit x Winners / MaxDrawdown, která se již postará o to, aby GA vybíraly a dále rozvíjely pouze taková řešení, která nabízejí "nejstabilnější" equity. Systémy, které tento požadavek nesplňují, GA jednoduše "zavrhnou" a již dále během procesu nerozvíjí.

    Optimalizace s pomocí GA

    Optimalizace s pomocí GA je opět něco úplně jiného než klasická brute force metoda. První výhodou je rychlost. Nedávno jsem například prováděl optimalizace position sizingu. Jednalo se o jednoduchý nápad mého kamaráda (jinak našeho bývalého studenta, dnes již úspěšného tradera na plný úvazek), kdy dle 20 různých scénářů systém zvolí, zda použít 0-3 kontrakty do aktuálního obchodu. Hlavním cílem mé optimalizace bylo najít pro každý ze scénářů optimální počet kontraktů, což znamená, že existovalo celkem 4 na dvacátou = 1099511627776 možností. Při testu 1 možnosti za vteřinu bych na optimalizaci čekal 35 000 let(!), s GA optimalizací většinou vše zvládnu do druhého dne (to už je opravdu pořádé ušetření času). To vše navíc s cílem maximálního profitu s minimální drawdownem (FF).

    Možná se nyní ptáte, jak je to s robustností takových výsledků a zda se nejedná o extrémní přeoptimalizaci? Správná otázka. I v tomto ohledu jsou GA mnohem dále než dnes již mimořádně zastaralá technika brute force (obzvláště, pokud jí provádíte v prehistorických programech bez podpory více jádrového výpočtu, jako například Genesis Trade Navigator). GA totiž fungují opět trochu jinak a tak namísto takzvaných "lokálních" optimálních hodnot hledají "globální" optimální hodnoty. Jinými slovy, GA už samy od sebe berou v potaz nutnost, aby fungovaly i okolní možné parametry a aby tudíž finální výsledek byl nejenom funkční, ale také robustní. Inteligentní software (viz dále) jde pak ještě dále: automaticky již rozdělí testovaná data na in-sample a out-of-sampe, optimalizaci provede na in-sample datech a funkčnost následně okamžitě ověří na out-of-sample datech. To vše zcela automaticky, takže opět máte mnoho ušetřené práce a času. Dobrý GA software tedy již v základu ošetří, abyste se vyhnuli možné přeoptimalizaci. Efektivnost GA v ohledu na možnou přeoptimalizaci je mnohem vyšší než klasická brute force metoda.

    Software

    Pokud se chcete věnovat GA na seriózní úrovni, potřebujete dobrý softwarový základ (sám vlastním několik různých programů) a také kvalitní a rychlý počítač, ideálně s SSD disky. Co se software týče, existuje určitě mnoho různých řešení, já shledal po dlouhém průzkumu jako zajímavé 3 (dvě z nich sám používám).

    O prvním řešení jsme zde již psali - jedná se o program Adaptrade Builder, který slouží převážně k navrhování strategií. Tento program je vhodný pro absolutní začátek, neboť je uživatelsky jednoduchý, intuitivní, obsahuje dobrý manuál. Navíc funguje bez nutnosti propojovat s TradeStation nebo MultiCharts, jak ještě vysvětlím dále. Nevýhodou je, že program zatím nepodporuje multi-core, takže je poměrně pomalý a výstupní kód v tento moment generuje pouze pro programy TradeStation a MultiCharts. Dobrá zpráva je, že se na obojím pracuje a v dohledné době bychom měli mít jak verzi pro multi-core, tak verzi s možností exportovat pro více programů, například Ninja Trader atd. Sám program vlastním a určitě má před sebou světlou budoucnost.

    Další možné řešení je program s názvem The Grail, což je program pro již výrazně pokročilejší uživatele s programátorskými dovednostmi. Zde je ale situace již trochu složitější. Největší výhodou tohoto programu bylo, že pokud jste ještě nedávno zakoupili stand-alone verzi, mohli jste Grail propojit s MultiCharts, který jako jeden z mála vyspělých optimalizačních programů podporuje multi-core a dokáže pracovat v podstatě s libovolným počtem jáder. Bohužel, Grail byl minulý rok zakoupen firmou TradeStation. Tím dochází přímo k implementaci do prostředí TS. A jelikož TS stále nepodporuje multi-core, vše se rázem až 10x zpomaluje oproti kombinaci Grail + MultiCharts. Tím se mnoho pozitivního vytrácí. Sám jsem naštěstí stand-alone licenci stihnul zakoupit, takže v tuto chvíli využívám zcela nejrychlejšího možného řešení, které je na trhu dostupné pro běžný retail.

    Poslední možností je program Optimax, opět řešení pro výrazně pokročilejší uživatele. Tento program opět spolupracuje s TradeStation. Nabízí několik inovativních funkcí jako například modulaci cenového grafu (tj. další způsob, jak hledat maximálně robustní řešení) nebo zajímavé uživatelské rozhraní s poměrně efektivním brouzdáním mezi jednotlivými řešeními. Nevýhodou je bohužel již zmíněná spolupráce s TS. Bez multi-core podpory je opět vše mnohem pomalejší než v případě Grail + MCH. Optimax se pronajímá a je možné vyzkoušet zdarma. Určitě bude mít nadále co nabídnout i přes implementaci Grail GA do TS.

    Závěr

    Osobně jsem býval velmi dlouho extrémně skeptický k automatickým obchodním strategiím. Má skepse v tomto ohledu zůstává, ale posunula se do roviny, kdy již vidím (i díky reálným výsledkům) směr, s jakým lze AOS inteligentně budovat. Nemluvím zde o naivních pokusech s programy typu MetaTrader apod. Hovořím zde o moderních, vyspělých a sofistikovaných postupech, které v sobě zahrnují robustnost, ochranu před přeoptimalizací, testování na out-of-sample datech, pravidelnou reoptimalizaci na základě statistických podkladů a inteligentní managování AOS jako celku s naprosto jasně definovanými úrovněmi (statisticky podloženými), kdy systém vypnout, protože docela možná jeho životnost končí, popřípadě kdy opět nasadit do trhů. To vše je možné dokázat s GA, kvalitním softwarovým a hardwarovým zázemím, již reálnými zkušeností z trhů a poměrně dlouhým studiem a experimentováním s GA.

    Musím zde ale varovat, že GA je jen nástroj, navíc ne příliš vhodný pro nováčky. Bez několika let zkušeností z diskréčního obchodování bych vůbec neměl odvahu se do podobného projektu vrhnout. Pokud pracujete s GA, je třeba neustále provádět řadu různých nastavení, předvýběrů a finálních výběrů. Potřebujete dobrý úsudek a ten není možný bez reálných zkušeností z trhů. Učení se efektivní práci s GA navíc může být stejně frustrující a zdlouhavé jako cokoliv jiného, co chceme zvládnout pořádně a do hloubky. Jinými slovy, se zkušenostmi z trhů vás čeká pořádný kus práce, bez zkušeností z trhů nekonečný kus práce. Celé téma GA navíc může vypadat ze začátku velmi složitě - k mému překvapení je ale ve skutečnosti poměrně jednoduché, jakmile začnete chápat základní principy a možnosti praktického využití. Sám jsem se do tohoto oboru pouštěl s obavami, skepsí, strachem a nejistotou (pustil jsem se do GA po úspěšném zprovoznění statistických arbitráží, po kterém jsem začal hledat další směr, jak obchodování více zautomatizovat), prošel si poměrně náročný proces učení (zhruba rok považuji jako realistický čas nutný k rozumnému zvládnutí problematiky), dnes už ale na využití GA nedám dopustit. Během svého researche jsem samozřejmě bral v potaz i neuronové sítě, ty jsem ale zavrhnul už od začátku. Největší důvod je asi ten, že jsem nedokázal najít nikoho, kdo by s využitím NN dokázal profitabilně obchodovat. V případě GA jsem dnes v kontaktu s řadou velmi úspěšných mechanických obchodníků ve světě.

    Toto byl samozřejmě pouze velmi letmý a spíše praktický úvod do GA. Pokud by obecně bylo o toto téma větší zájem, samozřejmě rád připravím na téma GA více článku s podrobnějšími informacemi a i trochou té teorie.

    17.4.2011

    Tomáš Nesnídal


    Zaměřte se na to, co přináší reálné výsledky.

    Nakopněte své obchodování
    k systematickým profitům

    (program pro začínající obchodníky, kteří se chtějí dostat ke stabilnímu obchodování bez časové náročnosti)

    Začínáme 30. 1. 2024.

    Nově s vytvořením a popisem všech pravidel mechanické obchodní strategie, ve které mám sám aktuálně otevřený profit +224 121 Kč!

    >> Workshop profitabilního obchodování od A do Z

    Další články na toto téma

    Genetické algoritmy

    Genetické algoritmy (GA) jsou inspirovány přírodní evolucí a patří do širší třídy evolučních algoritmů. V kontextu tradingu se genetické algoritmy používají k optimalizaci obchodních strategií a k modelování finančních trhů s cílem nalezení optimálního řešení pro konkrétní obchodní problém.
    Princip funkce Jako přírodní selekce, GA pracuje s populací možných řešení, provádí kombinace těchto řešení (křížení) a upravuje je (mutace), aby vytvořil novou generaci kandidátských řešení. V průběhu mnoha generací je populace postupně upravována, dokud nenajde optimální nebo dostatečně vhodné řešení.
    V obchodním kontextu může GA například testovat různé kombinace technických ukazatelů, nastavení pravidel a parametrů, aby nalezl strategii s nejvyšší pravděpodobností úspěchu nebo s nejnižším rizikem. Tímto způsobem trader může identifikovat nejefektivnější obchodní strategie, aniž by musel manuálně prověřit tisíce kombinací.
    Hlavní výhodou GA v tradingu je schopnost efektivně prozkoumat obrovský prostor možných strategií a automaticky identifikovat potenciálně výnosné kombinace. Nicméně, jako u všech modelů, je nebezpečí přizpůsobení se konkrétnímu historickému datasetu, což může vést k přeučení, špatné výkonnosti v reálném obchodování a dosáhnout tzv. přeoptimalizace.
×
×
  • Vytvořit...