Mé workflow vývoje intradenních systémů
S tím, jak postupně do svého automatizovaného portfolia nasazuji i intradenní systémy, jsem si pro sebe definoval určité „workflow“, s nímž systémy tvořím. Zde jsou tipy, které mohou pomoci i vám.
Obsah článku:
Jak na intradenní obchodní systémy?
Vývoj systémů na denních datech
Intradenní stop-lossy na denních datech
Prototypování systémů vs. jemné testování
Ukázka workflow
Závěr
K příspěvku mě dovedl tento dotaz v Trading Room:
Jak na intradenní obchodní systémy?
Předně žádná cesta v rámci intradenního obchodování nebude bez práce. Tedy samozřejmě kromě té, kdy si koupíte nějaký zázračný software, kde vám po stisknutí tlačítka začne sám připravovat zaručeně robustní AOS.
Sám na podobné zázraky nevěřím, a tak nezbývá než investovat čas do ručního testování různých nápadů, ze kterých následně tvořím reálné „idea first“ obchodní systémy.
Potíž s intradenními systémy je především v tom, že pracujeme s ohromným množstvím dat. Bez ohledu na zvolený software je vše výrazně pomalejší, náročnější na hardware a do velké míry i na know-how. S jemnými intradenními daty lze vymýšlet násobně více taktik než na denních datech, což s sebou přináší i výrazně vyšší riziko přeoptimalizace, chyb v kódech či v následném automatizovaném obchodování.
Osobně se mi tak osvědčilo vyvíjet intradenní systémy na denních datech.
Vývoj systémů na denních datech
Denní data obsahují informace o otevírací a uzavírací ceně, denní minimální ceně a denní maximální ceně. S denními daty se proto pracuje velmi efektivně – za rok máme přibližně 250 úseček. Pracovat pak lze v programech, jejichž ovládání známe ze swingového obchodování (např. Amibroker).
Ovšem jak na denních datech vyvíjet intradenní systémy? Tím, že nevidíme „dovnitř“ denních úseček, tak pochopitelně můžeme vyvíjet jen určité typy intradenních systémů. Například jednoduché breakout či mean reversion systémy vycházející z denní otevírací ceny či jiného fixního bodu denních grafů.
Nemůžeme tak například vytvářet obchodní systém obchodující průlom např. 5minutového otevírací rozpětí popisovaného v článku Jak na první daytrading autotrader [včetně funkční strategie a kódu]. Z mé zkušenosti to ale tolik nevadí. Protože i jen na denních datech lze najít mnoho funkčních intradenních přístupů (sám jsem takto dříve vyvinul Finwin, který dnes obchoduji řadu let).
Intradenní stop-lossy na denních datech
Největším úskalím při vývoji intradenních obchodních systémů na denních datech jsou stop-lossy. Na denních datech nevidíme „dovnitř“ úseček a jen těžko se odhaduje, jestli byla u obchodu dříve zasažena úroveň stop-lossu, vstupu či výstupu.
Osobně tak začínám s vývojem strategií s velmi vzdáleným, nebo žádným stop-lossem. Ve svých systémech často pracuji s indikátorem ATR a jedním z typických příkladů vzdáleného stop-lossu je 1xATR. Takový už bývá spolehlivě identifikovatelný i na denních grafech.
Ve svých testech tak chci nacházet strategie, které relativně stabilně fungují i s velkými stop-lossy. A teprve až takovou strategii objevím, otestuji ji na intradenních datech.
Prototypování systémů vs. jemné testování
Svou práci tak můžu rozdělit do dvou základních kroků:
Prototypování systému na denních datech
Finální backtest hotového prototypu na intradenních datech
Pokud jste vývoj intradenního systému nikdy nezkoušeli, možná nevidíte v rozdělení práce do zmíněných bodů žádný zásadní benefit.
Pro mě tam rozdíl je – především v efektivitě. Nejsem programátor a s jakýmkoliv skriptováním bojuji. A skriptování na intradenních datech je pro mě násobně náročnější než na denních. Při hledání nových obchodních přístupů testuji průběžně řadu různých myšlenek. Mohu například zkoumat signály vycházející z korelace či divergencí trhů, sezonality, market internals a podobně. Podobné testy mám na denních grafech hotové velmi rychle.
A pokud vypadá nějaká myšlenka nadějně, tak teprve potom věnuji pozornost přípravě intradenního kódu, pro který nejčastěji používám TradeStation či Python. V momentě, kdy vím, co přesně potřebuji naskriptovat, už to nemusí být tolik složité.
Ve finálních testech s intradenními daty navíc první backtesty provádím se vzdáleným stop-lossem podobně, jako jsem to dělal ve fázi prototypování. A logicky bych měl dostávat podobné výsledky, čímž si ověřuji funkčnost svých kódů.
Ukázka workflow
Na denních datech testuji různé myšlenky. Jedním z dobrých směrů může být například intradenní breakout na akciovém indexu. Např. Nasdaq 100. Breakout systém má v principu jednoduchou konstrukci. Vezmeme nějaký počáteční bod – např. denní open, poslední close, nejvyšší high za posledních x dnů a podobně, přidáme k bodu určitou vzdálenost (sám rád pracuji s násobkem ATR), a pokud trh tuto úroveň překoná, zaznamenáme long breakout a držíme pozici do dosažení profitargetu či do konce dne. Pokud se trh obrátí, vystoupíme na stop-lossu. Jak jsem zmínil, u prototypů podobných systémů na denních grafech používám vzdálený stop-loss (např. 1xATR).
Testy na uvedené úrovni jsou např. v Amibrokeru velmi jednoduché s tím, že do popsané kostry systému budete chtít zakomponovat pravděpodobně ještě nějaký „filtr“. Bez toho nebude systém reálně obchodovatelný.
A takto může vypadat výsledek prototypu:
Pro ilustraci jsem zobrazil equity křivku prototypu „long intradenní breakout v Nasdaq 100“ vytvořenou pouze z denních úseček (modrá barva) vs. finální backtest s využitím intradenních dat (oranžová barva).
Equity křivky nejsou úplně stejné zejména proto, že v tomto případě intradenní backtest probíhal v Pythonu, kde se mi trochu jinak počítá ATR než v Amibrokeru. Podobné detaily nejsou z mé zkušenosti podstatné, protože ve finálním živém obchodování se do procesu živého obchodování na burze stejně dostává určitý prvek náhody.
Ale to podstatné je jistě patrné – prototyp se vzdáleným stop-lossem (1xATR) odpovídá finálnímu intradennímu backtestu.
Funguje to samozřejmě i na delší historii dat:
Finální myšlenku pak už ladím v samotném intradenním backtesteru. Zde zejména testuji jemnější práci s bližšími stop-lossy. Protože ty z mé zkušenosti nelze na denních datech používat – vedou k příliš optimistickým závěrům.
Dobře je to patrné na tomto screenshotu:
Zde jsem v prototypu na denních datech snížil stop-loss na 0,4x ATR (modrá linka) a následně provedl stejný backtest na intradenních datech (oranžová linka). Je zde patrné, že pokud bychom malý stop-loss použily už v prototypu pracujícím s denními daty, budou naše závěry z backtestu příliš optimistické.
Závěr
Dnešní tip ukazuje, že pokud budete určitý typ intradenních systémů prototypovat na denních datech, můžete se poměrně dobře na výsledky spolehnout za předpokladu, že budete pracovat se vzdálenějšími stop-lossy (např. 1xATR).
Pokud se tak chcete do vývoje intradenních systému pustit, můžete začít právě na denních datech. A teprve až budete mít hotový funkční prototyp (jakože najít obchodní systém trvá určitě týdny až měsíce), pak už není zas takový problém konkrétní jednu finální myšlenku převést do příslušného intradenního backtesteru (např. s použitím TradeStation).
Jinými slovy – není třeba se od počátku stresovat z potřeby ovládnutí dalšího softwaru. Ale je možné začít na stejném softwaru, který používáte pro analýzy denních grafů a teprve, až budete mít jasnou představu o potenciálním intradenním obchodním systému (podloženou funkčním prototypem) tak řešit, jak systém finálně otestovat na intradenních datech.
Zkušenosti s vývojem jednoduchého, ale profitabilního AOS – cesta tradera Mirka
Po čase se vrátíme opět ke zkušenostem traderů, kteří dokázali proměnit touhu po úspěchu až do konkrétního profitabilního tradingu. V článku naleznete zkušenosti tradera, diskutujícím pod nickem Mirek77, který se s ostatními pravidelně dělí o zkušenosti s více než 1,5 lety ostrého provozu svého poměrně jednoduchého AOS na forexu, založeného na známých patternech Larryho Williamse.
Článek je rozdělen do dvou dílů. Pokračovaní naleznete na Finančníkovi za týden.
Mirku, můžete stručně představit svůj vývoj z pohledu tradera? Jak dlouho se tradingu věnujete, jaké cesty jste zkoušel a jak dlouho vám trvalo, než jste objevil svoji cestu profitabilního obchodování?
Tradingem jsem se začal zabývat asi před třemi lety. Když jsem hledal způsoby, jak se naučit seriózně investovat, narazil jsem na pojem „trading“ jako takový a především na váš server Finančník.cz. Necelý rok jsem jen studoval, hledal inspiraci a cestu, jak nejlépe celou tuto problematiku pojmout. Zúčastnil jsem se vašeho spreadového workshopu, což mě opět posunulo hodně kupředu. Nicméně u spreadů jsem nezůstal, jako vhodnější se mi jevil Forex díky nižší kapitálové náročnosti a velké podobnosti s futures. Když jsem objevil platformu MetaTrader a možnost používat automatické strategie, tak jsem, zřejmě jako každý nováček, vyzkoušel snad všechny Expert Advisors (EA), co se daly sehnat. Výsledky byly samozřejmě naprosto nepoužitelné. Byl jsem z toho docela zdrcený.
Na druhou stranu jsem ale věděl, že existují tradeři (např. Woodie), kteří profitabilní jsou. Dal jsem si tedy závazek, že do toho budu „bušit“, dokud bude potřeba. Studoval jsem tudíž kódy strategií a přístupy jejich autorů, četl knihy o tradingu a osobním rozvoji a úspěchy se pomaličku začaly dostavovat. Výsledky backtestů už nebyly katastrofální, pouze velice špatné. V průběhu studia dále špatné, nic moc, „nalej-vylej“, později i nějaká naděje na zisk. Zjistil jsem, že nemá cenu se honit za spoustou obchodů na nízkých timeframes, že denní a hodinové grafy mi dělají mnohem lepší službu, dosáhnout na nich dobrých výsledků je mnohem, mnohem jednodušší. Jak jsem se dozvídal nové věci, hned jsem se je snažil naprogramovat a otestovat.
Zde bych rád podotknul, že programátorem jsem se nenarodil, ale musel jsem postupně zjistit (např. na fórech), jak nejlépe jednotlivé části strategie vyřešit technicky a vychytat hodně chyb (především vlastních). Postupem času přestávalo být udržitelné, abych měl pro každou strategii vlastní kód. Vytvořil jsem tedy univerzální EA a zavedl parametry pro výběr vstupů, výstupů, řízení pozice a filtry signálů. Sady (sety) těchto parametrů ve spojení s kódem samotným tvoří jednotlivé strategie systému All2Gather.
Když už byly mé kódy na slušné úrovni, bylo třeba řešit overfitting. Výsledky backtestů vypadaly výborně, ale na nezávislém vzorku dat strategie prodělávala. S těžkým srdcem jsem musel „zahodit“ většinu svých tak pracně (pře)optimalizovaných vstupů a snažil jsem se o co nejmenší počet faktorů, které strategii mohou ovlivňovat. Tehdy mi hodně pomohlo studium přístupu a patternů Larryho Williamse.
Zároveň jsem zkusil použít určité procento průměrné volatility trhu pro stanovení velikosti StopLossu, Profit Targetu a Trailing SL. Dále jsem zjistil, že je potřeba hledat takové oblasti nastavení parametrů strategií, kde i při jejich mírné změně nedochází k velkému zhoršení výsledků. Toto je samozřejmě časově náročné, ale MetaTrader mi umožnil udělat takových backtestů tisíce. Ověřil jsem si, že i v tradingu vede správná cesta přes spoustu neúspěchů a malých pokroků.
Většina začínajících obchodníků má pocit, že svůj přístup musí postavit na nějakém velmi jemném a „tajném“ edge, nejlépe koupeném za velké peníze. Vy jste svůj plně automatizovaný systém založil na patternech Larryho Wiliamse, které jsou všem k dispozici v jeho knihách. Do jaké míry používáte pro vstup patterny v jejich základní podobě?
Jsem silným zastáncem price action. Po této stránce mi patterny Larryho Williamse velmi vyhovují. Pokusím se tedy stručně popsat ty, se kterými dosahuji nejlepších výsledků.
Reverzní den (Reversal day)
Jak píše Larry ve své knize „Kompletní průvodce obchodováním komodit [1]” na straně 190: “Co když ale trh zavře níže než předchozího dne a zároveň níže než byla jeho otevírací cena?”... Jedná se podle něj o jeden z nejsilnějších býčích patternů.
Open a Close jsou na Forexu dost relativní hodnoty, můj broker neobchoduje pouze přes víkend. Musel jsem si jej pro Forex tedy trochu upravit, protože jsem dostával příliš mnoho falešných signálů. Moje pravidlo pro nákup je následující:
Místo Open a Close používám hodnoty Low z předchozích dvou dnů. Druhá část pravidla se snaží o vstup v souladu s trendem.
Pravidlo pro prodej je opačné, s využitím hodnot High.
Obvykle požaduji, aby byl vstupní signál potvrzen určitou „Tolerancí“ – cena se ještě musí pohnout ve směru zamýšleného obchodu. Vystupuji na prvním profitabilním Open (Bailout Exit), na základním StopLossu či ProfitTargetu.
Ukázka vstupů na základě tohoto patternu:
Léčka specialistů (Specialist’s Trap)
Tento pattern jsem objevil v knize “Dlouhodobá tajemství krátkodobých obchodů”.
Vezměme maximální a minimální cenu za předchozích 20 dnů. Pokud půjde cena pod toto rozpětí, situace se nazývá “range breakout”. Nazvěme čárku, která udělala tento breakout “čárka B”. Pokud druhá až sedmá čárka (já používám pouze třetí) po čárce B překročí High čárky B, jedná se o nákupní signál. Prodejní signál funguje opačně.
Selhání “range breakout” je tedy originální Williamsovo pravidlo, x-tá čárka, při které selhání nastane, už však můj přídavný filtr či optimalizace.
Vystupuji opět na prvním profitabilním Open (Bailout Exit), na základním StopLossu či ProfitTargetu.
Breakout volatility (Volatility Breakout)
Tento pattern označuje Larry Williams jako svůj vůbec nejsilnější.
50% včerejšího range (High – Low) se přičte k dnešnímu Open. Pokud cena překročí tuto hodnotu, strategie vstoupí do dlouhé pozice. Analogicky pro prodejní signál - tatáž hodnota se odečte od dnešního Open. Pokud cena klesne pod tuto hodnotu, strategie vstoupí do krátké pozice.
Stop Loss se nastaví taktéž na 50% včerejšího range (tj. teoreticky na hodnotu dnešního Open).
Strategie vystupuje z pozice buď na tomto základním StopLossu nebo na prvním profitabilním Open, resp. až v 7h ráno – moje pojetí Bailout Exit.
50% range je výchozí hodnota. Pro jednotlivé trhy je možno ji mírně upravit (např. na EURUSD funguje dobře 60% pro vstup a 40% pro StopLoss).
Ukázka vstupů na základě tohoto patternu:
Všechny zmíněné strategie obchoduji na denním timeframe.
Pro filtrování vstupů dále používám Larryho koncept TDW (Trade Day of Week) – např. pro pattern Reverzní den na GBPUSD jsou to pondělí, úterý a pátek.
Pro příklad - skutečná equity křivka strategie „Reverzní den“ od začátku obchodování:
Předpokládám, že hlavní své know-how vidíte tedy nikoliv ve vstupu, ale v řízení pozice, risku, money-managementu a diverzifikaci. Můžete se s ostatními podělit o základní poznatky, které jste v této oblasti v souvislosti s obchodováním svého systému získal?
Rozhodně. Nesnažím se hledat nějaké hodně velké „edge“, které by správně predikovalo směr trhu. Snažím se mnoho maličkých „edge“ spojit do jednoho systému. Začal jsem být úspěšný, když jsem pochopil, že nemám šanci uhodnout, kudy se trh v danou chvíli vydá. Naprosto nekompromisně musím dodržovat svůj systém a nechat se „volně unášet“ v rámci nastavených mantinelů.
Nutnost použít základní StopLoss při vstupu do každé pozice, myslím, nemusím rozebírat.
Pro řízení pozice používám u dvou ze čtyř strategií Trailing StopLoss (posun SL pod předchozí Low nebo nad předchozí High).
Velice se mi rovněž osvědčil Williamsův Bailout, tj. výstup na prvním profitabilním Open. Jelikož můj broker umožňuje obchodování od 7h ráno, aplikuji ho v tuto dobu.
Co se týká řízení rizika, pro každou pozici riskuji fixní procento zůstatku na účtu. Podle průměrné volatility stanovím velikost základního StopLossu a podle nastaveného rizika spočítám maximální počet lotů, které mohu v danou chvíli otevřít.
Snažím se pravidla svých strategií co nejvíce zobecnit a relativizovat. Některé parametry sice nastavuji fixně, v dlouhodobém měřítku a v kombinaci s ostatními faktory to však není na závadu.
Když při vývoji strategie váhám, pro kterou kombinaci parametrů se rozhodnout, preferuji tu, která dělá raději méně obchodů, abych se zbytečně nevystavoval riziku zůstávání v trhu. Ve chvíli, kdy mé „edge“ ztrácejí svůj potenciál, nezůstávám v trhu déle, než je nutné.
Sleduji, jestli je strategie úspěšná díky náhodě (pár velmi ziskových obchodů za testované období) nebo zda zisku dosahuje pravidelně. Vyhýbám se přístupům s nízkým Risk-Reward Ratio. Strategie, které mají obrovský StopLoss, maličký ProfitTaking a tím vysokou úspěšnost, jsem už dávno opustil.
Portfolio strategií se snažím sestavovat tak, aby výsledky obchodů jednotlivých strategií byly mezi sebou pokud možno aspoň trochu negativně korelované. Při sestavování strategií nehledám kombinaci, která maximalizuje zisk, spíše přihlížím k ukazatelům jako Sharpe Ratio, Sortino Ratio, standardní odchylce, zešikmení a špičatosti rozdělení výsledků obchodů, případně k dalším robustním metrikám.
Pokračování rozhovoru naleznete na Finančníkovi v článku https://www.financnik.cz/clanky/serialy/live-trading/zkusenosti-s-vyvojem-jednoducheho-ale-profitabilniho-aos---cesta-tradera-mirka-dokonceni-r984/.
AOS (automatizovaný obchodní systém)
AOS (Automatické Obchodní Systémy) trading zahrnuje použití počítačových programů a algoritmů pro obchodování na finančních trzích. Tyto systémy jsou navrženy tak, aby automaticky generovaly obchodní příkazy na základě předem definovaných pravidel a strategií.
Automatizované obchodní systémy (AOS) obvykle zahrnují sledování trhu, analýzu dat, výpočet indikátorů a spouštění obchodů bez nutnosti manuálního zásahu. Tyto systémy mohou být jednoduché nebo velmi složité v závislosti na použité strategii a tržních podmínkách.
Principy vytváření AOS
Vytváření funkčních AOS vyžaduje hlubší pochopení trhů, formulování edge do podoby mechanických plánů, jejich naskriptování a otestování na historických datech. Popis vzniku intradenního AOS "Finwin" tak, jak jsme jej vyvíjeli na Finančníkovi, můžete vidět v tomto videu:
Důležitost AOS tradingu v současných trzích
V dnešním rychlém světě poskytuje AOS trading výhodu v podobě rychlosti, přesnosti a dlouhodobé systematičnosti, které jsou pro manuální trading obtížně dosažitelné.
AOS trading také eliminuje emocionální aspekt obchodování, což vede ke konzistentnějšímu rozhodování založenému na logice a datových analýzách.
AOS umožňují obchodníkům provádět backtest (tj. testování obchodních strategií) na ohromném množství historických dat, což je neocenitelný nástroj pro hodnocení a optimalizaci obchodních systémů před jejich nasazením v reálném čase.
Dostupnost AOS tradingu
S rostoucí dostupností technologií a vzdělávacích zdrojů se AOS trading stává přístupnější i pro menší investory a retailové obchodníky, kteří dříve neměli možnost konkurovat velkým institucionálním hráčům.
Na Finančníkovi používáme pro AOS trading autotrader vytvářený ve skriptovacím jazyce Python. Použít lze ale i specializované brokerské platformy jako je TradeStation.