Jump to content
Co nového? Mé kurzy
  • Amibroker: Custom backtester pohledem začátečníka

    V Techlabu se často věnujeme práci s Custom backtesterem, který nám v rámci Amibrokeru umožňuje provádět uživatelské backtesty. Jedná se však o pokročilejší přístup, který může působit trochu složitě a ve výsledku od používání odradit.
    V dnešním tutoriálu se podíváme na CBT z pozice úplného začátečníka, pokusím se ukázat, jak jsem začínal já, co vnímám jako důležité a principy, které mi pomáhají jeho funkci pochopit.


    Snímek obrazovky 2020-05-22 v 22.51.28.png

    Video naleznete v TechLabu zde.

    22.5.2020

    Bogdan Waclawik

    Bogdan, vystupující ve fóru pod nickem 4fx, poskytl v uzavřených diskuzích Finančníka již mnoho praktických Python skriptů a rad ostatním obchodníkům. Je také autorem skriptů Autotraderu předávaných a vyučovaných v rámci workshopu automatizace. Coby autor Bogdan skripty sám používá pro živé obchodování swingových obchodních strategií.


    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

    Automatizované analytické workflow s naprosto minimálními náklady? Ano je to možné.

    Za poslední měsíce jsem na Finančníkovi napsal hned několik článků týkajících se většího zapojování automatizace do svého obchodování. A jelikož postupně vše nabralo skutečně vysoké obrátky, chci dnes upozornit na některé věci, které vás možná nadchnou a posunou stejně jako mě.
       Foto (c)123rf.com   Vše se u mě dalo do pohybu někdy v průběhu loňského roku, kdy jsem začal mít potřebu více pracovat na integraci a zefektivnění svých obchodních přístupů. Je možné, že za tím stál plánovaný přírůstek do rodiny (a tudíž výrazně větší nároky na volný čas), částečně patrně i potřeba vystoupit po letech z komfortní zóny a zkusit se posunout dále. Vlastně jsem neměl konkrétní plán, jen jsem vnímal, že by šlo některé věci propojit a dělat lépe. Například do intradenního obchodování více využívat některých vstupů (a pravděpodobností) z opčních strategií a tendencí ze swingových strategií. Dlouhou dobu uvažuji nad tím více automatizovat spreadové strategie a podobně. Dlouho jsem přemýšlel, kterým směrem se vydat. Obzvlášť proto, že jsem naposledy programoval v Basicu na základní škole a nikdy jsem neměl zájem stát se programátorem. Uvědomoval jsem si možnou cestu nechat si nějaké řešení naprogramovat, ale to nebylo úplně to, co jsem hledal. Jak už z předchozích článků víte, nakonec jsem se přiklonil k používání Pythonu řekněme na „uživatelské úrovni“. A zpětně musím konstatovat, že věci se postupně začaly hýbat opravdu rychlým směrem a k mé ohromné spokojenosti.
    Ono totiž i s relativně malými programátorskými znalostmi a neustále zapnutým vyhledáváním v Google jde v dnešní době provádět na počítači neuvěřitelné věci.
    Mé ambice byly nemalé. V zásadě jsem chtěl především vytvářet řešení, která budou svým způsobem pracovat sama a šetřit mi čas. Budou efektivní.
    Pochopitelně, že už dříve jsem pracoval s různými skripty, například v Multicharts/Tradestation, ale bohužel to bylo vše hrozně fragmentované a vyžadovalo to mé neustálé zapojení. Patrně to znáte sami.
    Má představa byla zadat počítači práci typu – otestuj například různé denní profily trhů a otevírací gapy. Najdeš tam nějaké základy edge? Pokud ano – zkus funkční řešení rozšířit například o testy volatility a sezónnosti. S tím, že finální výstupy bych jako tendence používal ve svých diskréčních přístupech, případně nechal obchodovat automaticky (například ve stylu obchodování FOMC dne) a skládal je do širších portfolií.
    Samozřejmě, že i podobná řešení vyžadují čas tradera, ale především ten analytický, kdy člověk připraví ty správné otázky. Moje představa byla taková, že počítač bude poté sám dělat různé analýzy, které na sebe budou navazovat a ovlivňovat se podle předcházejících výsledků.
    Zkoušel jsem různé cesty. Nejschůdnější se mi vždy jevila TradeStation, která se ale ukázala jako hrozně uzavřená. Díky zkušenému programátorovi to sice chvíli vypadalo, že bych mohl automatizaci dotáhnout přes jejich optimization api, ale bylo to dost komplexní, vyžadující seriózní programátorskou práci, pomalé a bohužel s řadou dost zásadních limitů. Kdo zkusil, ví.
    TradeStation mám rád pro programování jednodušších skriptů a automatické obchodování, ale jako srdce mého automatického analytického workflow neobstála. Chtěl jsem něco, co bude levné, stabilní, rychlé, nabízející všechny běžné nástroje technické analýzy, disponující pokročilými genetickými optimalizacemi a především – plně externě ovladatelné mými jednoduchými skripty.
    Jak už řada z čtenářů Finančníka ví, nakonec jsem řešení objevil v Amibrokeru. Tento software, který patří k těm nejlevnějším na trhu, jsem vždy tak trochu přehlížel, ale pokud hledáte podobné řešení pro plnou automatizaci svých analytických procesů, tak doporučuji zaměřit svou pozornost tímto směrem.
    Amibroker zcela vše ukládá do textových nebo XML souborů, které lze externě editovat – tedy není problém jednoduchými kroky upravovat například backtestované studie, nastavovat trhy, rozsahy testovaných období, timeframe atd. Současně má OLE rozhraní (viz en.wikipedia.org/wiki/Object_Linking_and_Embedding ). S pomocí jednoduchých externích skriptů tak lze v programu dělat cokoliv – spustit analýzu, optimalizaci, WFO, updatovat databázi atd. Prostě cokoliv. A v neposlední řadě je ten program neuvěřitelně rychlý.
    Rychlost je dnes relativní pojem, neboť každý výrobce o svém programu píše jen samé superlativy. Pro ukázku jsem tak připravil video porovnání optimalizace použití Amibrokeru a TradeStation 9.5 (která je rychlejší než předchozí verze, protože má podporu multithreadingu). Jde o menší optimalizaci s 300 kombinacemi na minutových datech trhu ES za 3 roky. Jedná se skutečně jen o technické srovnání, které slepě optimalizuje jednoduchou Bollinger band strategii. Amibroker má práci hotovou za 32 sekund, TradeStation 9.5 má kompletní práci hotovou za 2 minuty 25 sekund. Oba testy jsem natočil a můžete si je vizuálně porovnat (běžely na stejném počítači, oba samostatně):
    -- video již není na serveru k dispozici
    Nechápejte mě špatně – nikdy jsem nebyl nějak vysazen na rychlosti optimalizace. Ale pokud enginy s podobnými rychlostmi necháte běžet dlouhodobě, tak je rozdíl odvedené práce opravdu výrazný. Jako neprogramátor se někdy nestačím divit, jak je možné, že to, co v jednom programu je samozřejmé, je u druhého takový problém.
    Jak vypadá například automatické spuštění optimalizace v Amibrokeru externím skriptem v Pythonu?
    NewA = AB.AnalysisDocs.Open(ApxToLoad);
    NewA.Run(4)
    while (NewA.IsBusy):
    time.sleep(0.5)
    NewA.Export(ResultsExportPath);
    NewA.Close()
    Tedy extrémně jednoduše i pro běžného neprogramátora, jako jsem já. Výsledky jsou přitom uloženy do csv, které je poté možné dál zpracovávat, procházet filtrovat a na jejich základě upravovat spouštěné analýzy a takto pokračovat stále dokola. Prakticky 100% automatizovaně.
    Musím se přiznat, že i samotný průběh hledání a testování různých slepých cest a nuancí představoval docela náročný proces. Pokud tedy řešíte podobné výzvy, kterými jsem procházel já, tak mohu toto řešení plně doporučit.

    Amibroker a Interactive Brokers plugin pro napojení ID dat

    V dnešním tutoriálu si ukážeme, jakým způsobem je možné napojit Amibroker na intradenní data od IB a sledovat grafy v reálném čase. 

    Video naleznete v TechLabu zde.

    Generování vstupních signálů pomocí CBT

    V dnešním videu se podrobněji zaměříme na vyhledávání signálů pomocí CBT a ukážeme si jak vytvořit plnohodnotný skener obchodních signálů. Integrace této logiky přímo do AFL kódu přináší jednu velkou výhodu, seznam signálů můžeme získat v jednom běhu zároveň s výsledky backtestu.
    V ukázce si také vystvětlíme jak používat funkce StaticVarSet() a StaticVarGet() pro práci se statickými proměnnými. 

    Video naleznete v TechLabu zde
×
×
  • Vytvořit...