Automatizace obchodování - jak se zbavit rutiny se zadáváním příkazů
Řada obchodníků řeší způsob, jak získat při obchodování co nejvíce času a předat práci počítači. Zde je popis našeho řešení, které je poměrně jednoduché a současně solidně modulární.
Automatizace obchodování v zásadě není složitá. Existuje řada programů, do kterých stačí nadefinovat podmínky obchodního systému a program sám umí příkazy předávat na burzu. Mezi nejznámější patří patrně TradeStation, NinjaTrader, SierraChart a další. Limity nicméně bývají v tom, že jednoduchost mizí v okamžiku, kdy začneme obchodovat portfolia obchodních systémů. Na to nebývají běžné retailové programy stavěné, a pokud je technicky možné funkcionalitu zvládnout, vyžaduje to již dost programování.
Jak řeším automatizaci portfolio obchodování?
V případě pomalejších swingových strategií (které neobchoduji intradenně) používám jednoduché Python kódy, které načítají obchodní příkazy z csv souborů. Získávám tak řešení, které není závislé na jediném softwaru, neboť obchodní příkazy mohu generovat řadou nástrojů. Nicméně dnes používám pro generování seznamu příkazů nejčastěji Amibroker.
Jak konkrétně na podobné řešení?
Základem řešení je API brokera. Sám používám IB API provozované pod TradeStation Global. API je rozhraní poskytované brokerem, se kterým je možné programově komunikovat. Ovšem řešit vše vlastním kódem není zas tak úplně jednoduché. Naštěstí existují hotové frameworky, se kterými jde práce mnohem snáze. Osobně používám ib_insync pracující v Pythonu, který v obchodování hodně používám. Mimochodem studium Pythonu vnímám zpětně jako jedno z nejlepších rozhodnutí, které jsem udělal. Coby totálního neprogramátora, který si neuměl vytvořit ani makro v Excelu, mě to sice stálo pár měsíců úsilí, ale dnes mi tento jazyk šetří v tradingu čas neuvěřitelně. Vytvořit pomocí ib_insync jednoduchý autotrader je pak skutečně jednoduché. Na triviální odesílání příkazů stačí pár řádků kódu, byť pochopitelně nad pokročilým autotraderem je třeba strávit mnohem více času, neboť patrně budete chtít obchody logovat do databáze atd.
Schematicky vypadá autotrader takto:
Python skript spouštím automaticky pomocí plánovače úloh. Ráno před začátkem obchodní seance si skript načte csv soubory s obchodními příkazy (včetně stop-lossů a profit targetů) a zadá je do API brokera. Večer ještě soubor používám pro uzavírání pozic (hodně systémů ukončuje obchodní pozice na close dne).
Samotné csv soubory lze vytvářet nejrůznějšími cestami (mohu si takto připravovat i ruční příkazy). Dnes nejčastěji používám tzv. dávky v Amibrokeru. Jde o způsob, jak automaticky projet připravené obchodní systémy a například vygenerovat signály do textových souborů.
Proč si myslím, že může být zajímavé se pustit do algoritmického obchodování touto cestou?
Podobná automatizace je relativně bezpečná na testování a následné obchodování. Přenos příkazů do IB nemusí probíhat automatizovaně, ale dávky lze spouštět ručně a dohlížet přitom na to, co se reálně na obchodním účtu děje.
Pro mě samotného byla práce na řešení i způsob, jak se konkrétně učit pracovat s Pythonem a řešit praktické výzvy.
Dnes pak hlavní benefit vnímám v tom, že není problém mezi csv a autotrader vkládat další vrstvu kódu, která se stará o řízení celého portfolia. Mohu například kontrolovat korelace mezi otevíranými systémy a například některé signály neotevírat. Sám toto dělám opět pomocí Pythonu a kódy opět nemusí být složité.
Pokud se v programování alespoň minimálně orientujete, tak rozhodně doporučuji ib_insync vyzkoušet (nebo jiný framework).
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.
- 1