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
  • Trading a genetické algoritmy - otázky a odpovědi

    Poslední dobou jsem dostal celou řadu dotazů na téma genetických algoritmů. I když jsem se tomuto tématu už jednou věnoval, rozhodnul jsem se dnes možnost genetických algoritmů představit trochu detailněji a názorněji - pro lepší představu a pochopení.

    Co to je

    Zjednodušeně jde o algoritmus, který umožňuje velmi rychle optimalizovat složité úlohy.

    Představte si, že máte intradenní mechanickou obchodní strategii, která má například 5 různých vstupů a každý z nich chcete optimalizovat (tj. najít ideální nastavení). Řekněme, že máte ideu, jak zkombinovat indikátor CCI, klouzavý průměr, stop-loss (SL), profit-target (PT) a posun SL na break-even (BE) do takové kombinace, aby z toho byla potenciálně zajímavá obchodní mechanická strategie. Otázka však zní, jakou periodu stop-lossu, klouzavého průměru a jaké nastavení SL, PT a BE použít. Každý z parametrů má přitom 50 různých možností nastavení - jak ukazuje souhrnný přehled zde:

    GA_FAQ_1.jpg

    Abychom věděli, které parametry pro každý ze vstupů použít, musíme takzvaně optimalizovat - tj. nechat počítač najít takové kombinace, které mohou být pro nás zajímavé.

    Vraťme se tedy k příkladu výše. I když se jedná o strategii s poměrně malým množstvím vstupních proměnných (pouze 5) a každou z proměnných chceme optimalizovat v rozumném rozsahu (50 možností), zkusme se podívat, jak dlouho by trvala optimalizace "klasickou" cestou, tj. kdy počítač zkouší všechny možné existující varianty, aby našel tu nejlepší. Následující tabulka ukazuje množství celkových možných kombinací a dále čas, který by byl potřeba k optimalizaci, pokud by náš počítač backtestoval danou strategii rychlostí 1 kombinace za vteřinu:

    GA_FAQ_2.jpg

    Jak je z tabulky patrné, tento zdánlivě jednoduchý optimalizační úkon by trval přibližně 12 let!

    Něco takového je samozřejmě v praxi nemyslitelného. Proto vědci začali uvažovat o efektivnějším způsobu optimalizace (podobné optimalizace nejsou třeba jen v tradingu, ale i v obrovském množství dalších profesí, od strojírenství, přes lékařství až po letectví), až přišli s ideou genetických algoritmů. Ty dnes optimalizaci popsanou výše dokáží vyřešit za zlomek času, v řádu jednotek, maximálně desítek hodin (což je značný rozdíl proti 12 letům).

    Jak to funguje

    Optimalizace s pomocí genetických algoritmů (GA) je velmi unikátní proces, který funguje úplně jinak, než klasická optimalizační technika. Proto je třeba naučit se při práci s GA myslet trochu "mimo rámec". GA v podstatě fungují na principu takzvaného "samplování" (vzorkování) a následné mimiky genetického vývoje, za účelem najít nejsilnější vhodnou kombinaci.

    Genetické algoritmy nejprve náhodně vygenerují určitý počet kombinací pro daný problém (několik desítek až několik tisíc kombinací). V případě popsaném výše by například GA mohly na začátek vytvořit celkem 200 různých náhodných kombinací - typu:

    GA_FAQ_3.jpg

    Těmto náhodným kombinacím se říká POPULACE. V momentě, kdy GA takto vytvoří dané množství kombinací (tj. svou první populaci), začne algoritmus zkoumat, která z kombinací se nejvíce přibližují našemu cíli (například maximalizaci profitu při minimalizaci drawdownu). V momentě, kdy v dané populaci najde takové kombinace, které mají potenciál, přejde GA k dalšímu kroku a tím je vytvoření další GENERACE. V další generaci pak GA už kombinují mezi sebou ty kandidáty, které v předešlé generaci shledali jako potenciálně nejlepší a nejsilnější a snaží se tyto kandidáty nadále vylepšit. Současně však samplují další nové kombinace, protože každá generace má stejné množství populace - pokud tedy výběrem do další generace prošlo jenom 10 kandidátů, pak GA v další generaci zároveň sampluje dalších 190 nových (doposud nepoužitých) kombinací.

    Tímto procesem se stejně jako v genetickém vývoji snaží GA hledat a vzájemně kombinovat nejsilnější jedince (tj. kombinace), až ideálně nalezne kombinaci odpovídající našim požadavků (a to za nepatrný zlomek času oproti klasické optimalizaci). Dobrý genetický algoritmus pracuje velmi rychle, spolehlivě a navíc hledá řešení, která jsou zároveň velmi robustní.

    K čemu je to dále dobré

    Nejsilnější využití GA teprve přijde.

    Jak už jsme si vysvětlili výše, GA mají možnost nesmírně rychle najít potenciální řešení i velmi složitých úloh. GA tedy mimo jiné slouží k optimalizaci času, neboť si využitím GA náš čas optimalizujeme tak, abychom mohli najít maximálně efektivní řešení za minimální čas. To je velmi silný argument, protože čas je nejdražší komodita, kterou máme.

    Proto se postupem času ukázalo, že je možné s použitím GA optimalizovat čas i jinak - přímo při vývoji nových mechanických strategií.

    Pokud si někdo vyzkoušel stavbu mechanických strategií, už zhruba tuší, jak časově náročný proces to je. Máme ideu, kterou musíme naprogramovat. Po té zjistíme, že idea nefunguje dle našich představ. Takže začneme strategii kombinovat s dalšími nejrůznějším atributy, zkoušet další možnosti, nápady.... Najednou může uplynout celý měsíc a my zjistíme, že jsme doposud žádnou funkční strategii nevytvořili.

    Naštěstí se ukázalo, že v tomto ohledu dokáží GA nesmírně pomoci. Co se stane, pokud využijeme GA tak, že místo optimalizované hodnoty (čísla) přiřadíme určitý indikátor nebo prvek technické analýzy? Pak GA začnou stavět celé nové strategie - se stejným cílem - najít takovou, která splňuje naše cíle (maximální profit při minimálním drawdownu)!

    V principu je to velmi jednoduché. Na začátku článku jsme si ukázali, jak GA hledají různé kombinace hodnot. Pokud však za každé číslo přiřadíme určitý indikátor, pak GA už nehledají pouze hodnoty, ale celé systémy. GA například vědí, že pod číslem 1 se skrývá indikátor CCI, pod číslem 2 indikátor RSI, pod číslem 3 klouzavý průměr, atd. Dále vědí, že například pod číslem 10 se skrývá stop-loss, pod číslem 11 trailing stop-loss, pod číslem 12 SAR posouvaný stop-loss, atd.

    GA tedy v momentě samplování převedou čísla na konkrétní indikátory, čímž dojde k náhodně generovanému obchodnímu systému a jeho okamžitému ověření.

    Řekněme, že například GA během první populace náhodně vygenerují čísla 1, 2 a 11. Pak GA vědí, že mají vytvořit kombinaci CCI + RSI + trailing stop-loss (každému z těchto prvků i přiřadí náhodně určitou periodu). Tato kombinace tedy vytvoří obchodní systém, který GA okamžitě otestují. Pokud má systém potenciál, nechají takový postoupit do další generace. V další generaci GA kombinují už atributy z nejlepších nasamplovaných systémů a tak pokračují, dokud na konci není ideálně konkrétní obchodní systém.

    Tento proces se prakticky v ničem neliší od běžné "ruční" stavby obchodního systému. Nemusíte nechávat hledat systémy "na slepo", můžete využít GA i k rychlejšímu ověření vaší idei. Máte například nápad, akorát nevíte, který z typu klouzavých průměrů pro něj využít a jakou zvolit výstupní strategii. Pokud byste pracovali "klasickou" cestou, pak zkoušení různých kombinací může trvat celý týden, než vyzkoušíte vše, co jste zamýšleli. S dobrým a flexibilním software pro genetické algoritmy můžete naprosto stejný výsledek znát už do hodiny. Jinými slovy, už za hodinu víte, zda vaše idea opravdu nabízí potenciál a jaké konkrétní prvky ideálně kombinovat, aby idea fungovala co nejlépe.

    Zbylých 6 dnů a 23 hodin tak máte k dobru.

    Jak je to s rizikem přeoptimalizace

    V každém optimalizačním procesu riskujeme možnost přeoptimalizace (overfitting). Proto je třeba pracovat s dalšími prvky ověřování robustnosti, jako například out-of-sample data, nebo otestování idei na více trzích.

    GA však sami o sobě již fungují tak, že riziko přeoptimalizace (na rozdíl od klasické optimalizační metody) výrazně redukují. Kvalitní GA totiž hledá takové kombinace hodnot, které fungují v širším pásmu. To znamená, že výsledkem optimalizace jsou často takové hodnoty, které i po lehké změně směrem nahoru nebo dolů stále dávají uspokojivý výsledek. Je to dáno tím, že GA hledají takzvaná "globální", nikoliv "lokální" optima.

    Kvalitní GA software navíc již automaticky ověřují strategie i na out-of-sample datech (tj. datech, která program během optimalizace nebo stavby strategie dopředu neviděl) a nabízí možnost rychlého ověření i na jiném trhu nebo timeframe.

    Jak konkrétně mohou vypadat systémy vytvořené s pomocí GA

    Tvorba obchodních strategií s pomocí GA může mít nejrůznější podobu a záleží vždy na konkrétních kritériích tvůrce/tradera. Já osobně hledám s pomocí GA pouze takové strategie, které mají minimum vstupních parametrů, fungují rámcově na dalších trzích a fungují s velkou škálou různých nastavení a parametrů.

    Zde je například equity a přehled mé poslední GA strategie, kterou budu nasazovat do živého obchodování příští týden:

    Tomnes_boss_equity.jpg

    Strategie TomNes Boss (Break-Out-Super-Simple) na trhu e-mini Russell, 15 minutový graf. Obchody zhruba od čísla 140 dále jsou out-of-sample, tj. data od obchodu 140 dále nebyla použita pro optimalizaci. Maximální drawdown strategie je 1740 USD (close-to-close drawdown).

    Tomnes_boss_table.jpg

    Výsledky jsou včetně 5 USD komise a 25 USD průměrného slipu. Strategie má pouze 3 vstupní parametry, je nesmírně jednoduchá - v podstatě logika na 2 řádky a vykazuje obrovskou robustnost v naprosto všech ohledech. Kód zde z pochopitelných důvodů ukazovat nebudu, ale abyste si udělali představu, ukážu kód jiné zajímavé strategie, která neprošla mými testy robustnosti, proto jí nebudu v reálu nasazovat. Nejprve equity dané strategie:

    Tomnes_Zurich1_equity.jpg

    TomNes Zurich1 strategie pro futures trh Swiss Franc, timeframe 60 minut. Strategie neprošla sérií mých testů robustnosti. Riziko přeoptimalizace je zde tedy pro mě příliš velké, proto strategii nenasazuji do live obchodování.

    Nyní logika strategie (uvádím záměrně pouze logiku):

    { Vstupní úroveň}
    EntryShort = XAverage(L, NBarEnS1);
    EntryLong = NextBar at Market;

    { Vstupní podmínka}
    Long = ChaikinOsc(Ticks, NL1, NL2) crosses above 0;
    Short = FastD(NS1) crosses above XS1;

    { Výstup na konci dne}
    SetExitOnClose;

    Parametry pro jednotlivé proměnné opět neuvádím záměrně - umím si představit, jak by pak byl někdo schopen jít strategii obchodovat i s mým upozorněním, že strategie neprošla tvrdými testy robustnosti. Takové riziko si na triko neberu 🙂

    Jaký software a hardware použít

    GA vyžadují kvalitní softwarové i hardwarové zázemí. S obojím jsem strávil poměrně hodně času a experimentování.

    Pro kvalitní práci s GA dnes už stačí i starší, ale výkonný CPU z řady i7. Jeden z mých počítačů běží na i7-860 (dnes již poměrně levný procesor), díky virtualizaci využívám 8 jáder. GA jsou s tímto počítačem naprosto dostatečně rychlé, i když častěji využívám počítač s procesorem i7-980x. To už je procesor z úplně jiné cenové třídy, rychlost oproti i7-860 je vyšší cca o 35-40%.

    Úžasné zrychlení je však možné dosáhnout přes SSD disk. GA pracují s velkým množstvím dat, ke kterým je třeba rychlý přístup. Ve svém i7-980x počítači mám obyčejnější, ne příliš drahý SSD disk o kapacitě 32 GB a dělá opravdu dobrou službu. Do staršího i7-860 jsem koupil nejnovější Intel X25 SSD o velikosti 16GB, který byl sice velmi drahý, ale zrychlení jinak staršího počítače je nyní díky tomuto ultra-rychlému disku opravdu značné. GA budou zřejmě docela dobře fungovat i na i5 procesorech (i na notebooku s i5), ale rychlost už bude výrazně nižší. Klasický hard-disk zpomaluje GA poměrně citelně.

    Software existuje celá řada a osobně jsem vyzkoušel snad vše, co je k mání. Dnes pro své workflow využívám dva GA programy, každý má svá pro a proti. Jeden z nich už bohužel není na trhu (navíc je značně pokročilý, pro pokročilejší uživatele), proto jméno programu ani neuvádím, druhý z nich je program Adaptrade Builder, který jsem dlouhou dobu používal spíše velmi, velmi okrajově. To se změnilo s verzí 1.2. U té došlo k tak výraznému zlepšení, že dnes tento program využívám prakticky denně. Největší benefit je neuvěřitelná rychlost - na počítači i7-980x jsem schopen vytvořit generaci s 5000 systémy na 15 minutovém trhu a opravdu dlouhé historii dat (8-10 let) za méně jak 3 minuty. Jenom si to představte - jak rychle dokážete vytvořit a otestovat 5000 různých systémů? Takovéto závratné rychlosti jsem zatím ani vzdáleně nedosáhnul s žádným jiným programem. Program Adaptrade Builder nyní dosáhnul natolik tak zásadních zlepšení a posunů vpřed, že jsem se rozhodnul novou verzi recenzovat v příštím článu (a ještě jedna dobrá zpráva - pro čtenáře našeho serveru se mně podařilo vyjednat slevu 1 000 USD).

    Opravdu je to tak snadné?

    V tradingu není nic snadné - všemu je potřeba věnovat trochu času a trpělivosti. Naučit se dobře pracovat s GA znamená pochopit problematiku více do hloubky a strávit s GA nejdříve mnoho času. Teprve testování, zkoušení a experimentování dovede člověka k tomu, jak začít GA efektivně používat. I tak zůstává stavba robustní, kvalitní strategie časově náročná. Jenom pro příklad: Nalezení strategie TomNes_Boss představené výše mně zabralo zhruba 2-3 týdny poměrně intenzivní práce. Strategie vzešla ze samplování zhruba půl milionu strategií (!).

    Nyní se ale podívejte na opačnou stranu mince: Pokud i po určité zkušenosti a půl miliónu samplovaných strategií je tak náročné najít opravdu kvalitní a robustní ideu, pak to znamená, že hledání kvalitní strategie je opravdu hledání v kupce sena. Jaké jsou tedy šance, pokud někdo začne hledat "ručně", bez použití GA? Jak dlouho může trvat "ručně" vyzkoušet půl milionu různých strategií? Jak velkou výhodu dnes mají firmy a fondy, které používají GA každý den, proti těm, kteří se věnují stavbě plně mechanické strategií "ručně"?

    Tím v žádném případě neříkám, že jsou GA Svatý grál a že bez nich to nejde. Naopak, na začátku tohoto odstavce jsem jasně uvedl, že ani s GA není hledání strategií snadné a vyžaduje stále určitý čas a trpělivost. I hledání strategií s GA může být značně frustrující. Jedno vím ale určitě - a za to dám ruku do ohně: Optimalizace času je s použitím GA enormní. Nehledě na to, že díky vzdálenému přístupu na můj velmi rychlý počítač jsem většinu času hledání poslední strategie TomNes_Boss strávil buďto na terase, nebo v přístavu, s popíjením výborné Sangrie a výhledem na moře. GA z vás jako mávnutím proutku úspěšné mechanické obchodníky neudělají, ale mohou vás k tomuto cíli dovést rychleji a příjemněji.

    P.S.

    Pokud bude zájem, v budoucnu mohu napsat pár článků ohledně GA ještě s trochu větším pohledem do hloubky.

    26.6.2011

    Tomáš Nesnídal


    Sdílíme, co nám samotným funguje.
    7 výukových lekcí.

    Jak reálně uspět v tradingu?

    Naučte se vydělávat na své sny (naše metody na Finančník.cz)

    Praktický návod, jak v trzích získat šanci vydělávat stovky tisíc až miliony dolarů ročně bez vlastního kapitálu a nutností trávit denně hodiny před počítači (bez práce to ale nepůjde).

    >> Získat kurz zdarma <<
×
×
  • Vytvořit...