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
  • Testování robustnosti intradenních systémů pomocí WFO

    Na Finančníkovi jsme se poslední dobou věnovali především swingovým obchodním systémům. Důvod je zřejmý. Na vyšších denních timeframe se snadněji tvoří robustní a dlouhodobě funkční strategie. Jsem přesvědčen, že každý obchodník by měl začít právě zde. Nižší timeframe jsou ale také zajímavé a dokáží přinést do portfolia další rozměr diverzifikace. Navíc i s menšími účty lze obchodovat systémy také ve futures, neboť v intradenních systémech lze používat podstatně menší stop-lossy než ve swingových strategiích. 

    Systematické intradenní strategie s sebou bohužel nesou nezanedbatelná „ale“. Konkrétně:

    Vytvořit skutečně funkční, nepřeoptimalizovanou intradenní strategii je těžší než vytvoření swingové strategie. Hlavně proto, že v intradenních datech je mnohem více šumu a charakter trhů se hodně často mění.

    Intradenní strategie jsou také náchylnější na podcenění reálných nákladů na obchodování – tj. jak komise, tak skluzy v plnění. Řada strategií bude v backtestech vypadat příliš optimisticky.

    A především – v intradenních trzích je potřeba počítat s tím, že strategie mají s jedním nastavením omezenou životnost. Mohou to být možná i roky, ale obecně je nutné počítat s tím, že strategie je potřeba bedlivě sledovat a občas nahradit nebo je přenastavit na aktuální charakter trhů.

    Jedna z hlavních otázek, kterou si bude pokládat jistě každý obchodník je, jak zvolit pro živé obchodování co nejrobustnější nastavení intradenní strategie. Resp. jak se ujistit, aby zvolené nastavení nebylo tzv. přeoptimalizované. „Napasované“ na historické průběhy dat, které se v intradenních trzích ale nemusí již nikdy opakovat.

    Odpověď na tuto otázku vede de facto k jedinému řešení. Pro posuzování výkonnosti a robustnosti strategie musíme používat jen tzv. out of sample data. Data, která jsme nepoužili pro vytváření strategie.

    Například budeme strategii vyvíjet na intradenních datech 1.1.2017 – 1.1.2018 (in sample - IS). Pro posouzení robustnosti pak použijeme data 1.1.2018 – 1.1.2019 (out of sample data - OOS). V OOS budeme chtít vidět, že strategie má do určité míry podobnou charakteristiku jako v IS. Toto je tradiční způsob vytváření strategií. V intradenních trzích ale narazíme na skutečnost, že IS a OOS periody nemohou být příliš dlouhé (protože trhy se často mění), a tak v jednom OOS budeme mít poměrně málo dat na to, abychom mohli na daném vzorku stavět nějaké hlubší závěry.

    Řešením je tzv. Walk forward optimalizace (WFO), kdy máme segmentů IS a OOS v historii více. Sám používám přístup, kdy IS v historii posouvám například po dvou letech, systém optimalizuji na toto období, z IS vyberu nejvhodnějšího kandidáta na obchodování a následně otestuji nastavení na roce IS dat, který následují po OOS:

    walkfwd2.gif

    Obrázek pochází z manuálu Amibrokeru, který pro WFO sám používám.

    Hlavní výhodou tohoto přístupu je skutečnost, že získáme hned několik OOS segmentů. Tedy mnohem více dat, na kterých můžeme posuzovat robustnost systémů. Realističtěji se můžeme dozvědět, jestli se systém chová na OOS tak, jak bychom očekávali na základě výsledků z IS optimalizace.

    Popsaná technika je velmi základní a najdete ji dnes myslím ve všech programech umožňujících testování obchodních systémů. Již v základní podobě může ale WFO sloužit jako dobrý pomocník. Pro vytváření skutečně robustních systémů je ale potřeba na celém procesu zapracovat. Zde jsou základní principy, které používám:

    1. Klíčové je dobře promyslet výběr „kandidátů“ nastavení z IS periody. V IS probíhá optimalizace, kdy systém zkouší různá nastavení systémů tak, aby vyhovovala danému období. Co ale hledáme? Nejvyšší zisk? Nejmenší drawdown? Kombinace obojího? Něco jiného? To jsou klíčové otázky. Osobně používám vlastní funkci „finscore“, která je složena z vah různých kritérií. Například chci, aby měl systém v IS určitý počet obchodů, určitý max. drawdown, určité zhodnocení. Pokud jsou parametry mimo můj zájem, tak je kandidát penalizován. Mám zájem vybírat nikoliv nejlepší, ale nejrobustnější kandidáty. Doporučuji tedy v IS neoptimalizovat na jeden jednoduchý cíl, jakým může být například zisk.

    2. Potřeba je také promyslet vyhodnocení testů OOS vs. IS. Jaké parametry srovnávat, abychom se co nejvíce ujistili, že výsledky jsou robustní? Nemělo by stačit jen požadovat, aby byl IS ziskový.

    3.    Robustní parametry by měly snést i určitou míru náhody. Tu lze simulovat třeba tak, že v IS malinko změníme data (dodáme do nich šum), případně změníme periody IS/OOS. Drží se výsledky systémů stále v rozumných mezích? Pak je velká šance, že daný systém je skutečně připravený na nasazení live.

    Co se praktické implementace výše popsaného týče. Jak vidíte, potřeba většiny traderů bude nakonec mít WFO proces co nejvíce pod vlastní kontrolou. Což bohužel není úplně možné v každém programu, který WFO poskytuje. Sám jsem zatím nevíce spokojený s Amibrokerem. Kde je jednak možné optimalizovat WFO s pomocí vlastních cílů, vše velmi jednoduše řídit přes OLE (například mnoho kroků spojovat do jednoho kompaktního workflow) a hlavně nechat program pracovat opravdu rychle (v článku Automatizované analytické workflow s naprosto minimálními náklady?  je příklad, který jsem před časem na Finančníkovi publikoval). Pokud Amibroker máte (nebo jej testujete), určitě doporučuji možnosti WFO vyzkoušet. A pokud vytváříte intradenní systematické přístupy, pak testování robustnosti přes WFO by nemělo chybět ve vašem arzenálu používaných nástrojů.


     

    10.2.2019

    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.


    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 <<

    Další články na toto téma

    Autoadaptivní obchodní strategie (2/2)

    Minulý týden jsem se pokusil vytvořit úvod do velmi zajímavé, byť stále u nás trochu okrajové problematiky autoadaptivních strategií. Dnes se k tématu ještě jednou vrátím pohledem našeho kamaráda Martina Lembáka, který dlouhodobě žije a pracuje v srdci tradingu v Chicagu a o tomto směru má poměrně značný přehled.
    Martin mimo jiné sám vytvořil velmi sofistikovaný autoadaptivní obchodní přístup a v dnešním článku souhlasil rámcově uvést koncept tohoto přístupu, jako inspiraci, co vše je možné s dnešními technologiemi na trhu realizovat.
    Martine, jak bys definoval pojem „autoadaptivní mechanická strategie“? Co je výhodou „autoadaptivní strategie“?
    Zdravím čtenáře Finančníka. Už se zde nedávno psalo o tzv. walk-forward optimalizaci systému, kdy opakovaně, v několika krocích, optimalizujeme data na určitém vzorku dat a následně ověřujeme na tzv. out of sample datech, která systém při optimalizaci „neviděl“.
    Auto-adaptivní strategie pracují na velmi podobném principu s tím, že tento adaptivní proces je již součástí systému. Tak jak přicházejí data, resp. interval dat, tak se systém bez zásahu uživatele sám autoadaptuje pro generaci vstupních či výstupních signálů pro příchozí úsečky a takto se proces neustále v intervalech definovaných developerem systému opakuje.
    Výhodou je, že systém potenciálně dokáže reagovat a přizpůsobovat se měnícím se tržním podmínkám, avšak není zaručeno, že např. definovaný interval developerem je ten úplně správný, apod.
    Žiješ a pracuješ v samotném srdci tradingu – v Chicagu. Jsou autoadaptivní strategie novým směrem v tradingu?
    Musím říci, že trh se výrazně změnil. Já jsem začal s analyzováním, monitoringem a exekucí obchodních systémů různých developerů v r. 2003 a tak do roku 2007 nebylo v podstatě u dobrých systému potřeba strategii měnit, optimalizovat, jakkoliv do ní zasahovat. Systém se jednoduše nechal běžet několik let s minimálními úpravami a stále s velkou pravděpodobností přišly roky, kdy se realizovaly velmi slušné zisky.
    Dnes je situace jiná, změny na trhu se zrychlily, na trhu je více tzv. kvant traderů, kteří pomocí svých algoritmů (AOS) trh mnohdy „skalpují ( high frequency trading), atd. Takže autoadaptivní strategie jsou dnes již nutností, chce-li být mechanický trader úspěšný.
    Jsou auto adaptivní strategie díky náročnosti na technologie a intelektuální zdroje pouze doménou velkých hráčů, nebo pozoruješ, že se touto cestou vydávají stále více i drobní obchodníci zaměření na mechanické strategie? Co konkrétně znamená „autoadaptivní mechanická strategie“ v případě drobných obchodníků?
    Rozhodně tyto techniky už nejsou doménou jen velkých hráčů, ale na trhu jsou již programy typu MultiCharts, které se dají propojit s obchodními platformami jako zdroji dat a aplikovat walk-forward a genetické optimalizace, jež jsou podstatou adaptivních strategií. Tj. např. v praxi řada úspěšných developerů takto jako drobní hráči postupuje a jsou v reálném tradingu úspěšní. I když musím říci, že převážně na trzích, které nejsou pro ty velké tak atraktivní.
    Nedávno si se stal CTA (Commodity Trading Advisor) a založil vlastní fond, který obchoduje trhy právě s pomocí autoadaptivní strategie. Vím, že samotná strategie je tvé „tajné“ know-how, můžeš přesto alespoň prozradit, co je základem takové strategie? Jaké výsledky s takovou strategií sám dosahuješ?
    Ano, něco prozradit ze své strategie mohu, přesto v omezené míře, protože z osobní zkušenosti vím, že si každý trader, ať už menší či větší, si pečlivě hlídá své proprietární strategie.
    Takže, v našem případě se jedná o přístup, kdy sledujeme obrovské množství obchodních systémů, ale pro následující den obchodujeme pouze ten, který byl vybrán speciálním algoritmem a který určil daný systém pro následující den jako „hlavní strategii“. Dalo by se to charakteritzovat jako“ systém umocněný na druhou“.
    Náš každodenní obchodní proces má tyto 3 etapy:
    1) Z celkem asi 1200 strategií vyberme zhruba 70-74 strategií, které splňují určité podmínky – převážně v tom ohledu, že aktuálně na daném charakteru trhu velmi dobře fungují. Onen souboru 1200 strategií, které jsme si naprogramovali již dříve, čítá relativně jednodušší strategie se zabudovanou autoadaptivní složkou, které zahrnují momentum, moving average, volatility breakout, Keltner bands, a další obchodní přístupy, které jsou na trhu velice populární a mají velkou pravděpodobnost, že by na trhu v ten či onen časový interval mohly úspěšně fungovat.
    Jak taková strategie, která projde prvním „sítem“ vypadá, vidíte na následujícím obrázku. Z ukázky je patrné, že daná strategie relativně dobře funguje v aktuálních podmínkách trhu, proto je dobrým kandidátem.

    2) Na takto vybrané strategie aplikujeme náš proprietární algoritmus, který všechny vybrané strategie dále testuje a ohodnocuje. V tomto dalším testování je větší důraz na pravděpodobnost a statistiku, než na matematické vyjádření. Obě fáze jsou velice náročné na čas, takže bez pomoci softwaru ( jakými jsou MS Excel, Matlab, EViews, a další) by bylo prakticky nemožné dosáhnout požadovaných výsledků.
    3) V poslední fázi pak dochází k finálnímu výběru strategie pro příští obchodní seanci a to porovnáním jednotlivých ohodnocení v programu Excel, na základě algoritmu v předchozím bodě.
    Takže, abych to shrnul: náš proces a algoritmus má za úkol najít pro příští obchodní den takový obchod, který má velmi vysokou pravděpodobnost výhry, ale také vysoké potenciální risk-reward-ratio. Tím máme zajištěno, že i v případě nízké úspěšnosti kolem 50% realizujeme dlouhodobě profit – čehož je dosaženo vyšším profit targetem než je stop loss.
    Pro individuální i institucionální investory našeho fondu se tímto naším obchodním programem snažíme dosáhnout maximálního výnosu při minimálním drawdownu, k čemuž dále uplatňujeme striktní pravidla money managementu, tj. stanovených denních a měsíčních tzv. value at risk parametrů. Výhodou celého přístupu je, že klienti, jejichž peníze spravujeme, budou vždy jen v obchodech a trzích s vysokou pravděpodobností úspěšnosti, s pozitivním risk-reward-ratio. Tím zvyšujeme pravděpodobnost, že klientovi vyděláme peníze při minimalizaci rizika/drawdownu.
    Co bys poradil drobným mechanickým obchodníkům, kteří se chtějí vydat podobnou cestou? Jak konkrétně by měli začít?
    Já musím říci, že jsem nesmírně rád, že se dané problematice věnuje na Finančníku zvýšená pozornost, vždyť podle posledních průzkumů je pod správou v tzv. „managed futures“ průmyslu nějakých 238 z 291 mld. USD alokováno do AOS, tj. systematického obchodování. Jak jsem zmínil výše, na trhu jsou programy jako TradeStation, MultiCharts, atd., které dokáží rychle aplikovat walk-forward a genetické optimalizace a při propojení s mnoha datafeed trading platformami výrazně zvýšit „edge“ tradera, tj. potenciálně vytvořit jeho statistickou výhodu na trhu. Toto je určitě směr, jakým se prakticky okamžitě mohou vydat i drobní mechaničtí obchodníci. Walk-forward optimalizace je určitě velmi silný nástroj, se kterým i na domácím počítači můžete vytvořit strategie s mnohem lepší adaptací rychle se měnícím trhům.
    Martine, děkujeme za rozhovor.
    Také děkuji a čtenářům přeji mnoho štěstí a dobré obchody.

    WFO - Walk Forward Optimalizace

    Walk forward optimalizace (WFO) je proces, v němž je obchodní strategie nejprve optimalizována na části historických dat (tzv. "in-sample data") a poté testována na následujícím setu dat, který nebyl během optimalizace použit (tzv. "out-of-sample data").
    Hlavním důvodem použití WFO je zjistit, zda je obchodní strategie robustní a zda bude pravděpodobně výkonná v budoucnosti, nikoli jen v minulosti.
    Jak WFO funguje: V prvním kroku je strategie optimalizována na části dat. Následně se strategie "posune dopředu" a je testována na následujícím segmentu dat. Tento proces se opakuje, dokud nejsou prozkoumána všechna dostupná data.

    Bezplatné řešení získávání analytických dat (nejen) z TradeStation

    Při práci s analytickými programy také jistě často narážíte na to, že některé výstupy nejde ukládat, či je jejich ruční ukládání časově náročné. Přitom počítače dnes umožňují automatizovat prakticky jakoukoliv činnost. Buď s pomocí specializovaných komerčních programů, anebo zcela zdarma. Takové řešení vám dnes demonstruji krok za krokem na ukázce ukládání historie obchodů z WFO analýzy TradeStation, které nejsou samy o sobě k dalšímu zpracování k dispozici. Článek obsahuje i kompletní kód skriptu ke stažení.
    Využití dále popisovaného principu je velmi široké. V rámci zjednodušení se zaměřím na řešení jediného problému – jak dostat do Excelu historii obchodů z okna TradeStation Walk-Forward Optimizeru pro další zkoumání? Data jsou k dispozici v okně P/L History, ale TradeStation je „jako na potvoru“ ukládá na disk jen v binární podobě. Přitom zejména při různých analytických činnostech se seznam obchodů hodí.
    Samozřejmě – můžeme se přepnout ručně do dané záložky, zkopírovat data do schránky a pak do Excelu. Ale co když chceme data od všech běhů najednou? To už je práce na delší čas. Nebo případně, co když danou činnost chceme dělat zcela automaticky v rámci nějakého dalšího workflow? Nebo, co když potřebujeme podobným způsobem zpracovávat další data, třeba v jiných programech? Pak je čas na nějakou automatizaci.
    Osobně k podobným účelům používám bezplatný programovací jazyk Python, který už jsem na Finančníkovi několikrát zmiňoval.
    S jeho pomocí může stažení dat do Excelu (kde každá záložka bude obsahovat samostatný běh optimalizace) vypadat jako na následujícím videu, kde jsou všechny kroky prováděny samotným skriptem:

    Kód, který jsem si pro daný úkol vytvořil, jsem pro vás veřejně publikoval zde do Gitu: https://github.com/podhajsky/Tradestation-scripts
    Můžete jej použít jako hotové řešení, ale spíše k inspiraci, jak lze podobné problémy řešit. Upozorňuji, že nejsem programátor, ale o to více může být kód inspirující i pro ty, kteří se programováním také profesionálně nezabývají.
    Jakých principů kód využívá?
    Vše se točí kolem modulu pyautogui, který si můžete do Pythonu jednoduše instalovat v Shellu přes pip install pyautogui. Pyautogui pak umí ovládat klávesnici a myš stejně, jako uživatel. A dokonce má základní funkce pro porovnání obsahu obrazovky.
    Při automatizaci podobných principů pak postupuji například následovně:
    Nejprve si jako screenshot uložím nějakou část obrazovky - takto mám třeba uložené ikony pro otevření nového běhu optimalizace.
    Následně v programu zadám příkaz:
    button_loc=pyautogui.locateOnScreen("images/open-WFO-button.png")
    který mi do proměnné button_loc načte pozici dané bitmapy (pokud je okno otevřené a program bitmapu najde). Tímto se program „zkalibruje“ vůči poloze otevřeného okna a následně již není problém jej „nacvičit“ na různé sekvence klikání a mačkání kláves.
    Určitou volbu v menu mohu vyvolat například sekvencí:
    pyautogui.click(button_loc[0]+124, button_loc[1]-19)
    pyautogui.press("down")
    pyautogui.press("down")
    pyautogui.press("enter")
    která zajistí, že program klikne do určitého místa na obrazovce (odvíjející se od pozice referenčního tlačítka zjištěného v předešlém kroku), následně například stiskne na klávesnici 2x šipku dolu a poté „enter“.
    Dalšími sekvencemi (podrobně popsanými v publikovaném kódu) tak není problém například načíst určitou oblast do schránky počítače a odtud data přenést do proměnné. Proměnnou zpracovat a uložit do Excelu.
    V kódu je vidět, že se občas musíme při podobném procesu vypořádat s různými drobnými zádrhely. Například ve formátech čísel. Tradestation například (alespoň na mém počítači) zobrazuje číslice jinak, než je umí načítat Excel. Je to způsobené oddělením tisíců v číslicích pomocí čárky. To ale pro Python není vůbec žádný problém. Řetězec konvertuji na čísla ve správném formátu a uložím do Excelu. V něm pak můžeme vše podrobně analyzovat nebo graficky zpracovávat.
    Kompletní kód skriptu je tedy k dispozici na adrese: https://github.com/podhajsky/Tradestation-scripts
    Upozorňuji, že jeho smyslem je poskytnout inspiraci. Neposkytuji k němu žádnou podporu a nemusí fungovat na všech počítačích (například proto, že budete pracovat s trochu jiným formátem čísel a bude tak třeba nepatrně upravit příslušnou část kódu). Také pochopitelně vyžaduje instalovaný Python (ve verzi 3 a vyšší) a základní znalost spouštění programů. Pokud chcete do základů Pythonu proniknout, existuje na internetu mnoho bezplatných zdrojů, řada z nich i v češtině (například on-line učebnice Učíme se programovat v jazyce Python 3, Učebnice jazyka Python (aneb Létající cirkus) a mnoho dalších).
    P.S.: Jak vidíte, Pythonem lze provádět velmi efektivně ohromné množství analytických činností, které nám traderům usnadňují práci a pomáhají získávat a analyzovat informace. Pythonem lze programovat prakticky cokoliv, sám se zaměřuji zejména na analýzu finančních dat. Jelikož dostávám dotazy, jak konkrétně s Pythonem začít a analyzovat data (například i ve stylu dnešního článku), uvažuji, jestli bychom na toto téma neuspořádali na Finančníkovi kurz. Ten by mohl mít za cíl naučit neprogramátory (jako jsem já) pracovat s Pythonem na základní úrovni využitelnou pro finanční analýzu burzovních dat. Tedy zprostředkovat znalosti, které sám v dnešních trzích s tímto nástrojem používám (a nezabíhal příliš do samotného programování). Prosím napište mi na petr@financnik.cz naprosto nezávazný email, pokud byste měli o podobný kurz zájem.
×
×
  • Vytvořit...