Je pro systematické obchodování potřeba programování?
Otázka, kterou dostávám dost často. Hodně obchodníků by rádo obchodovalo systematicky a automatizovaně, ale mají pocit, že to není pro ně. Že je to příliš složité a programování se nikdy nenaučí. Tohle je bohužel omyl v myšlení, který stojí většinu začátečníků neuvěřitelné množství ztraceného času a peněz.
Obchodníci si sice chtějí dělat trading jednoduchý, ale přesto jdou od začátku těmi nejsložitějšími cestami. Tedy hlavně těmi, kde trader pracuje určitým způsobem pocitově. Bez možnosti nějak rychle ověřit funkčnost myšlenky na delší historii dat, otestovat její robustnost – třeba během několika desítek minut či hodin.
Celkem tomu rozumím, protože dělat věci impulzivně a intuitivně je vždy z počátku výrazně jednodušší a zábavnější, než se snažit postupovat systematicky. A třeba s nástroji, které je nutné nejprve více ovládnout a svým způsobem jsou nudné. Bohužel to vede k tomu, že podle mého názoru tak 80 % začínajících traderů nakonec pracuje s úplně nefunkčními přístupy.
Otázka, do jaké míry obchodovat diskréčně (tedy částečně intuitivně) a do jaké systematicky (bez intuitivní složky, tedy vesměs mechanické přístupy), je určitě individuální. Jsem ale přesvědčený, že začínající obchodník nedokáže prvních několik let studia trhů správně posoudit všechny argumenty, a zbytečně tak ztrácí opravdu hodně času. Bohužel i proto, že často nemá pro rozhodování aktuální informace a starší mohou být ve finančních trzích dost mimo. Ostatně i můj pohled na tuto oblast se hodně vyvinul. Mimo jiné i z důvodu změn, které se odehrály v samotných trzích a nutnosti neustálé průběžné adaptace a širší diverzifikace. Což se prostě dělá mnohem, mnohem jednodušeji systematickými cestami. A o to více, když třeba obchodník začíná.
Absolutně každému bych tak od začátku dnes v trzích doporučil stavět základ vlastního tradingu na myšlenkách, které lze alespoň nahrubo mechanicky otestovat. Ověřit si je na dlouhé historii dat, pochopit tak, v jakém kontextu systém vydělává a kdy nikoliv (protože těžko lze doufat v objevení jednoho principu vydělávajícího neustále). Vyzkoušet, jak se systém chová na dalších trzích atd.
Je třeba pro hrubé testování myšlenek programování?
Je a není. Dnešní programy (které jsou k dispozici i zdarma) jsou tak předpřipravené, že otestování myšlenky je často otázkou jednoho nebo dvou řádků jednoduchého kódu. Tedy je třeba pracovat s určitou předpřipravenou syntaxí, což ale rozhodně nepředstavuje potřebu nějakého komplexnějšího programování.
A upřímně, pokud je z počátku tradingu váš kód delší než několik příkazů, je vaše myšlení zbytečně složité a příliš si věci komplikujete. Třeba i samotný kód minule publikovaného momentum portfolia, se v Amibrokeru nakliká pomocí cca deseti řádků kódu. Tedy nakonec samozřejmě vše opět záleží na určité invenci tradera (jak pojme obchodní myšlenku), než na nějaké znalosti programování. A věřte mi jedno – jakmile začnete v trzích vydělávat i s podobnými jednoduššími systematickými modely, dostanete se reálně před 90 % traderů, kteří v trzích nakonec neuspějí. Už jen proto, že vaše přístupy budou testovatelné, bude možné ověřit mechanicky jejich robustnost, a to jsou principy, pro které lze poměrně snadno získat i externí kapitál (se kterým se pak vydělávají opravdu zajímavé peníze).
Diskréční a systematické obchodování se přitom tolik neliší. Pořád je třeba přemýšlet o trzích a možných edge. V systematickém obchodování je ale nutné myšlenku skutečně dotáhnout, což samozřejmě není tak vzrušující jako diskréční klikání myší a doufání v „homerun“. Je to ale mnohem, mnohem efektivnější.
Jak náročný celý proces je?
Důležité je uvědomit si, že systematické obchodování nemusí mít hned podobu plné automatizace (tedy aby počítač obchodoval za nás). To je určitě již náročnější proces. Systematické strategie lze obchodovat i ručně. Tedy tak, že například použijeme software jako „skener“ pro obchodní příležitosti, které zadáme do brokerské platformy ručně (podrobněji jsem o tom psal nedávno v článku Proč obchodovat raději algoritmicky a jak jednoduše na to? [2]).
Pokud bych začínal, orientoval bych se zprvu na mechanické testování trhů.
Vezměme si například jednoduchou myšlenku.
Opravdu hodně obchodníků i v různých fondech posuzuje dlouhodobý trend pomocí klouzavého průměru s periodou 200. Trh má tak na tento průměr tendenci reagovat. A pokud se například akciový index dostane pod tuto úroveň, velmi často to obchodníci začnou považovat za počátek možného medvědího trendu, prodávají své pozice, a tak propad trhů zrychlují. V rámci testování určitého dlouhodobého tržního filtru jsem proto zkoumal jak samotný průměr s periodou 200, tak jeho „okolí“ – například pomocí indikátoru Bollinger Bands, který kolem klouzavého průměru zobrazuje „obálky“ vzdálené o definovanou volatilitu.
Takto například vypadá akciový trh S&P 500 (vykreslený pomocí trhu SPY) s aplikovaným indikátorem Bollinger Bands (perioda 200, 1 standardní odchylka):
Na první pohled to vypadá, že pokud je trh nad horní hranou obálky, má tendenci dál růst. Pokud se etabluje pod spodní hranou obálky, často se rozjede downtrend.
Jak by vypadal kód systému, kdy bychom nakupovali SPY v momentě, kdy bude nad horní hranou obálky a prodali jej, pokud klesne pod spodní hranu?
Buy=C>BBandTop( C, 200, 1 );
Sell=C<BBandBot( C, 200, 1 );
Toť vše! To je celá definice systému v programu Amibroker, který pro podobné testy hodně používám. C představuje „uzavírací cenu trhu“ (pracujeme se SPY). BBandTop je zkratka pro horní obálku indikátoru Bollinger Bands, který už je v programu připraven (a stačí ji jen vyhledat mezi seznamem poskytovaných indikátorů). Kód tak říká:
- Nakupuj, pokud je uzavírací cena trhu výše než horní obálka indikátoru Bollinger Bands (počítaného z posledních 200 uzavíracích cen a 1 standardní odchylky).
- Prodávej, pokud je uzavírací cena trhu níže než spodní obálka inidkátoru Bollinger Bands.
Tedy reálně práce na cca 1 minutu a v programu okamžitě vidím výsledek.
Jak v podobě equity křivky:
Tak v podobě statistik:
V těch na první pohled vidím, že přístup generuje za sledované období průběžné zhodnocení 13,05 % ročně při max. drawdownu 27,5 %. Což je výrazně lepší výsledek než samotné držení trhu SPY (zhodnocení 5,5 % při drawdownu 55 %). Jistě, není to nic, co bych v podobné podobě obchodoval, ale na rovinu – i toto by byl patrně smysluplnější a profitabilnější přístup, než se kterým prodělává na trzích většina diskréčních začínajících obchodníků. My jsme dostali konkrétní parametry tohoto filtru a lze jej dál kombinovat s několika dalšími řádky podobně „náročných“ vstupních podmínek.
Výše uvedený „skript“ představuje běžný rozsah, ve kterém programuji své základní systematické strategie (ostatně ani ty, které mi obchodují živě, nemají výrazněji komplexnější logiku). Samozřejmě, je třeba se naučit základní ovládání programu – kam kódy vkládat, jak tahat data, jak spustit backtest. A pak se orientovat v manuálu, abychom si našli indikátor nebo funkci, kterou chceme použít. Ale upřímně – vážně si může v dnešní době někdo myslet, že by se někde generovaly peníze úplně bez práce?
Když můj pohled na systematické vytváření strategií shrnu. Můj názor je jednoznačně ten, že je to cesta dostupná každému – i neprogramátorům, jako jsem já. Hlavní důraz práce v konečném důsledku stejně spočívá v přemýšlení o trzích a formulování sledovaných principů do opravdu triviálních kódů. A pokud vás zatím napadají pouze komplikované myšlenky, které nedokážete naprogramovat, je potřeba formulace myšlenek výrazně zjednodušit.
Petr Podhajský
Fulltime obchodník věnující se tradingu více než 20 let. Specializace na systematické strategie obchodované na futures a akciích. Oblíbený styl obchodování: stavba automatizovaných portfolio systémů, které využívá i při správě většího externího kapitálu.