Diverzifikace v algoritmickém investování /obchodování
Jedna ze zásadních výhod algoritmických přístupů k trhům, je možnost silné diverzifikace. Ta může mít řadu podob. Dneska chci ukázat praktický dopad diverzifikace „v čase“.
Článek volně navazuje na text „Mé přístupy k algoritmickému investování“, který jsem publikoval koncem minulého roku. Jak jsem již psal, v mém přístupu k algoritmickému obchodování nekladu moc velký důraz na vyladěné výsledky obchodního systému na jednom trhu. Tedy na nějaký soubor vstupních pravidel, které by dokázaly trhy obchodovat lépe než jiná pravidla. Vnímám, že v trzích lze z pohledu trochu delších časových rámců vydělávat několika základními způsoby – obchodování momenta, obchodování návratu k meanu a obchodování změny volatility (v opcích pak ještě rozpad časového prémia). Tyto obchody mají určitou obecnou základní kostru a pokud k ní začnu přidávat další a další podmínky a laditelné proměnné, tak ji sice mohu vyladit pro určitý trh, ale mám obavy o zachování celkové a dlouhodobé robustnosti. Tedy bližší je mi pracovat s hrubšími a velmi jednoduchými pravidly, které jsou tím pádem velmi robustní.
Pokud neovlivňuji vstupní pravidla, jak mohu přizpůsobovat systémy svým očekáváním a účtům? Překvapivě je toho stále velmi mnoho. Například:
- Přiřazování vah jednotlivým základním typům přístupů.
- Přiřazování vah jednotlivým typům trhů.
- Práce s různými frekvencemi vstupů.
- A pochopitelně i různé typy diverzifikací. Těm se chci věnovat dnes trochu podrobněji.
Diverzifikace je totiž v rámci tradingu jeden ze skutečně trvale platných svatých grálů. A nejde jen o obchodování více trhů najednou. Dobrou službu může udělat například i diverzifikace „v čase“ – tedy neotevírání všech signálů najednou.
Pro inspiraci a motivaci se pojďme podívat na aplikaci jednoho jednoduchého principu obchodování návratu k meanu na denních grafech (jde o swingové obchodování). Na jediném trhu tento princip nefunguje „nic moc“, nicméně pokud jej aplikuji na více trhů, například 500 akcií, dostanu i po odečtení komisí následující equity křivku:
Konkrétní podrobnosti equity nejsou zase tak podstatné. Jde navíc jen o ukázku aplikace jednoho z mnoha potenciálních principů. Pro mě je podstatné, že equity křivka není dosažena žádnou optimalizací. Jde o výsledek aplikace velmi jednoduchého modelu na definovaný koš trhů s tím, že se otevírá maximálně 10 pozic (každá v jiném trhu). Přičemž pozice se mohou otevírat najednou.
Pojďme se podívat na aplikaci „diverzifikaci v čase“ – tedy pokud omezím počet pozic otevíraných daný den na jednu:
Vidím, že mi sice klesl profit (z 256 000 USD na 148 000 USD), ale současně se mi snížil DD (z cca 36 % na 11 %). A to je velmi slušné – v posuzování výkonnosti systémů mě osobně zajímá (zjednodušeně řečeno) dosažený zisk na potřebný DD. Neorientuji se jen na „profity“, ale právě spíše na risk. První přístup má poměr 7,1 a druhý 13,45. Velký rozdíl.
Tedy toto byla další konkrétní ukázka a praktický tip, jak lze ovlivňovat výkonnost obecně platných přístupů bez toho, aniž by bylo potřeba zasahovat do logiky kódu.
Na závěr ještě odpovím na dotazy, jak si vytvářím podobné testy. Je to pomocí programovacího jazyka Python. Jde o opensource – tedy bezplatné řešení, které je ale hodně používané ve finančním „quant“ světě. To znamená, že pro něj existuje mnoho zajímavých a hotových knihoven právě pro analýzy datových řad. Hlavní výhodou používání podobného řešení je totální flexibilita v tom, co testuji. Komerční retailové platformy jsou fajn, ale spíše pro jednodušší aplikace. Pokud se rozhodnete například řídit risk větších portfolií nebo je jen komplexněji testovat, začnete narážet na limity. A pak zbývá buď komerční platformy rozšiřovat o vlastní udělátka, nebo vzít nějaký modernější a flexibilnější nástroj a v něm věci testovat. Osobně jsem byl totální neprogramátor a s Pythonem jsem začínal poměrně nedávno. A tuto cestu mohu jen doporučit. Jazyk je opravdu hodně intuitivní a s pomocí modulů typu Pandas lze po pár týdnech velmi sofistikovaně analyzovat trhy třeba tak, jak to ukazuji na výše uvedených screenshotech. Existují i knihovny pro navázání Pythonu například na InteractiveBrokers, a tak mám dnes exekuční část systému běžící na serveru postavenou také na tomto řešení (sám jsem ji však pochopitelně nedělal, je to dílem šikovného kamaráda, který je hodně zkušeným programátorem).
Ovšem středně šikovným traderům mohu tuto cestu jednoznačně doporučit. Už jen pro možnosti analýzy dat – osobně například zkoumám mnoho různých pravděpodobností i v intradenním obchodování a stále dokola jen používám principy, které jsem se v Pythonu naučil na začátku seznamování s tímto programovacím jazykem (byť se je snažím pochopitelně stále zdokonalovat).
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.