Jak vypadá jádro podvodného automatického obchodního systému? Článek varující před nákupem „zaručeně výdělečných“ obchodních automatů pro obchodování na Forexu. Když něco vypadá až moc dobře, než aby to byla pravda, často to pravda není.
Honza: Potřeboval bych pomoct zbohatnout.
Lenka: Měl byste už být bohatý z obchodování s kódem, který jsem Vám naprogramovala.
Honza: Mám z toho dobrý příjem, jasně, ale nejsem bohatý. Myslím tím skutečně, nechutně bohatý. Chci mít svůj vlastní ostrov v Karibiku a k tomu potřebuji jiné metody. Takže mám nápad prodávat drahý automat na obchodování na burze. Už mám jméno: „Forex turbo růstový automat.“ Zní to dobře?
Lenka: Chcete po mě naprogramovat podvodný automat? Na obírání lidí o peníze?
Honza: Obírání lidí… To je ošklivé slovo. Chci říct, co může někdo očekávat, když si koupí automat? Jenom po Vás chci naprogramovat automat, který vypadá lépe než všechny ostatní automaty.
Lenka: A vůbec nezáleží na tom, jestli opravdu generuje zisky nebo ne?
Honza: No co, je to přece jenom automat. Samozřejmě musí vypadat, jakože sype peníze jako šílený, ale ve skutečnosti to dělat nemusí. Jinak bych ho samozřejmě používal sám a neprodával ho.
Lenka: Tak to bude jeho naprogramování o hodně jednodušší.
Honza: Už jsem si objednal reklamu: „95% úspěšnost! Roční zisk 20.000 pipů! Potvrzeno reálným obchodováním na burze!“ Váš automat musí splňovat tyto hodnoty. Graf výdělku musí mířit přímo do nebe s průkazným rokem reálného obchodování. Teoretické testy nestačí. Je to smutné, ale lidi dnes nekoupí automat, který nemá skvělou historii potvrzenou nezávislým webem myfxbook.
Lenka: Takže musím naprogramovat automat, který nevydělává, ale přesto má 95% úspěšnost obchodů a generuje 20.000 pipů ročně na reálném obchodním účtu?
Honza: Přesně tak. Zvládnete to?
Lenka: Jasná věc, to je lehké jak facka.
Zdrojový kód automatu pro obchodování na burze
Podvodný automatický obchodní systém pracuje zcela jinak než normální obchodní strategie. Nejméně důležitou částí automatu je signál pro vstup do obchodu. Automaty většinou používají nějaký jednoduchý indikátor podobný tomu, co posílají nováčci na internetová fóra o obchodování. Vývojáři automatů vědí, že takové systémy nejspíš zisky generovat nebudou, ale to nevadí. Důvody pochopíte později. Lenka se rozhodla pro nejjednodušší možný přístup a toto je její první verze robota:
function run() { if(random() > 0) enterLong(); else enterShort(); }
Tato strategie vstupuje do náhodného obchodu na jakékoli svíčce grafu. Funkce random vrací v polovině případů číslo, které je větší než nula, a pak dojde ke vstupu do dlouhé pozice (nákupu). A v polovině případů číslo, které je menší než 0 a pak dojde ke vstupu do krátké pozice (prodeji). Pokud by se obchodovalo bez poplatků, tato strategie by měla průměrný výdělek nula.
Po otestování strategie na historických datech měnového páru EUR/USD vyjde najevo průměrná ztráta 3 pipy na obchod. 3 pipy jsou simulované náklady na brokera na jeden obchod. Takže žádné překvapení.
Tento obchodní skript založený na funkci random (vygenerování náhodného čísla) evidentně nikomu prodat nepůjde. Lenka ho musí vylepšit. První krok je nastavení parametrů pro splnění Honzovy podmínky na 95% úspěšnost obchodního systému:
function run() { BarPeriod = 1440; StartDate = 2012; NumYears = 1; LookBack = 0; Stop = 200*PIP; TakeProfit = 10*PIP; if(NumOpenTotal == 0) { if(random() > 0) enterLong(); else enterShort(); } }
Automat má obchodovat jednou denně, takže Lenka potřebuje jednu svíčku o velikosti 1440 minut. Test je omezen na historická data z roku 2012 – robot musí fungovat jen jeden rok, takže delší časové období není na test nutné. Není potřeba ani nastavovat žádné minulé období, protože robot se o vstupu do obchodu nerozhoduje na základě žádného indikátoru, který by vycházel z historických dat. Takže nastavení parametrů vypadá takto:
BarPeriod = 1440;
StartDate = 2012;
NumYears = 1;
LookBack = 0;
Další řádky nastaví stop loss (úroveň pro výstup z obchodu, pokud trh půjde na „špatnou stranu“ – do ztráty) na 200 pipů ve vzdálenosti od aktuální ceny a profit target (úroveň pro výstup z obchodu, pokud trh půjde na „správnou stranu“ – do zisku) na 10 pipů od aktuální ceny:
Stop = 200*PIP;
TakeProfit = 10*PIP;
To znamená risk reward ratio RRR 20:1. Každým obchodem se riskuje 200 pipů pro potenciální zisk 10 pipů. Ale to také znamená, že profit target (zisk) bude dosažen 20 krát častěji, než ztráta (stop loss). Z 20 obchodů bude 19 ziskových a jen jeden ztrátový – tímto je dosaženo 95% úspěšnosti, které Honza potřebuje pro svůj marketing.
Nicméně Lenka se musí ujistit, že každý obchod zasáhne buď stop loss, nebo profit target. Cokoliv jiného by ohrozilo úspěšnost 95%. Další výstup z obchodu se provádí, pokud automat vstoupí do opačného obchodu, než je aktuálně otevřený – tímto vstupem se vlastně jen uzavře ten původní. Do kódu Lenka doplní podmínku, aby se toto nedělo, a automat vstoupí do obchodu jen v případě, když žádný obchod není otevřený:
if(NumOpenTotal == 0) {
if(random() > 0)
enterLong();
else
enterShort();
}
Proměnná NumOpenTotal obsahuje počet právě otevřených obchodů.
Test této strategie skutečně ukáže 95% úspěšnost. To samozřejmě nezaručí její ziskovost. 19 z 20-ti obchodů je ziskových, ale ztráta z 20. obchodu sežere všechny zisky z předchozích obchodů. Jediný efekt vysokého procenta úspěšnosti je zvláštní kaskádovitý tvar na grafu zisku:
Na grafu vidíme, že sekvence mnoha ziskových obchodů za sebou vždy tvoří lineární růst až k bodu, kdy jeden obchod neprotne profit target a dojde k protnutí stop loss bodu. Z hlediska profitu je tento systém stejný jako ten předchozí.
Ale Honza chce roční výnos 20.000 pipů – dost na to, aby uspokojil poptávku lidí po obrovském bohatství a prodal hodně automatů. Jak může Lenka upravit skript, aby generoval takový profit – skutečné peníze ze živého obchodování – a to s evidentně prodělečnou strategií?
K tomu použije magii – magii zvanou statistika.
Distribuce zisků
Průměrná ztráta náhodného obchodu je poplatek brokerovi. Takže jeden obchod za den s velikostí poplatku 3 pipy znamená 750 pipů průměrné ztráty za rok. To neznamená, že jakýkoliv náhodný obchodník bude mít ztrátu 750 pipů za rok. Někteří můžou skončit s větší ztrátou, někteří i s velkým ziskem.
Když dáme 3000 obchodníkům základní kapitál na obchodování a úkol vstoupit každý den do náhodného obchodu po dobu jednoho roku a pak dáme jejich výsledky do histogramu, bude výsledek vypadat takto:
Tento graf distribuce zisků je vygenerován simulátorem, který spustil 3000 krát jedno roční simulaci Lenčina skriptu s náhodnými vstupy do obchodů (bez stop lossu a profit targetu). Na ose x je výše zisku nebo ztráty po roce obchodování. Na ose y je počet obchodníků, kteří dosáhli daného zisku nebo ztráty. Vidíme, že nějací nešťastníci měli ztrátu více než 7000 pipů, ale na druhou stranu je zde taky pár šťastných, kteří měli zisk 7000 a více pipů! Tito obchodníci se bez debaty považují za geniální obchodníky a píšou o svém úspěchu na všechna fóra o obchodování na internetu, která znají.
Tato distribuce zisků je zvaná Gaussovo normální rozdělení – slavná „Gaussova křivka„. Vypadá trochu kostrbatě, protože 3000 spuštění testu není dost na hladký tvar zvonu. Čím víckrát bude test proveden, tím dokonalejší tvar zvonu bude dosažen. Špička zvonu je na úrovni -750 pipů – očekávaná průměrná ztráta při nákladech 3 pipů na obchod.
Zmáčknutí Gaussovy křivky
Podívejme se, co se stane, když Lenka použije svůj stop loss a profit target pro dosažení úspěšnosti 95%.
function strategy2() { Stop = 200*PIP; TakeProfit = 10*PIP; if(NumOpenTotal == 0) { if(random() < 0) enterShort(); else enterLong(); } }
Distribuce zisků teď vypadá o poznání jinak:
Vrchol zvonu je pořád na úrovni -750 pipů, ale distribuce je nyní užší a trochu zkreslená na levou stranu. Omezení obchodů stop a profit příkazy odstraní velké zisky a velké ztráty. To znamená horní a dolní omezení pro roční výsledek a tudíž „zmáčknutí“ zvonu z obou stran. S profitem nastaveným na 10 pipů na obchod žádný trader nemůže vydělat víc než 2000 pipů za rok. A to ani ve velmi nepravděpodobném případě že všechny jeho obchody budou ziskové.
Martingale systém
Nicméně Lenka potřebuje roční výnos 20.000 pipů. Nemůže dělat nic s průměrnou ztrátou 750 pipů, ale může ovlivnit křivku distribuce zisků tak, aby vysoké množství obchodníků skončilo se ziskem 20.000 pipů. Lenka přidá do kódu dva další řádky:
var ProfitGoal = 100*Bar*PIPCost;
Lots = clamp((ProfitGoal-ProfitClosed) / (7*PIPCost), 1, 200);
Toto je systém Martingale. Podobné systémy jsou používány více či méně skrytě u většiny automatů (automatických obchodních systémů čili robotů na obchodování na burze).
Lenka si nejdřív stanoví cílový výnos. Potřebuje 100 pipů každý den, aby na konci roku skončila v zisku více než 20.000 pipů. Jedna svíčka na grafu odpovídá jednomu dni, takže na jakékoliv svíčce by nahromaděný zisk měl být 100 krát číslo svíčky. Toto je vynásobeno hodnotou PIPCost, aby byl výsledek v měně účtu místo pipů a uložen v proměnné ProfitGoal.
Další řádek je martingale. Velikost obchodu závisí na tom, jak daleko jsme od optimálního (cílového) zisku v daný den. Čím dále jsme od cílové ziskové částky daný den, tím více potřebujeme z dalšího obchodu vydělat, abysme to mohli dohnat. Výše obchodu (lots) je spočítána tak, aby další ziskový obchod dohnal cílový zisk. Rozdíl mezi cílovým ziskem a aktuálním ziskem je vydělen očekávaným ziskem za jeden lot. Zisk za jeden lot z povedeného obchodu je 10 pipů profit target mínus 3 pipy poplatky. Výsledek, 7 pipů, je opět vynásoben proměnnou PIPCost pro převod částky na měnu obchodního účtu.
Funkce clamp omezuje velikost obchodu na počet lotů 1 až 200. Potřebujeme minimálně jeden lot na obchod a nechceme překročit počet 200 lotů, abychom nebyli příliš nápadní a neriskovali šílené ztráty.
Při posuzování automatických strategií se dá vypozorovat výmluvné zvyšování velikosti obchodu v závislosti na aktuální ztrátě. Z toho důvodu tvůrci robotů často zvyšují počet kontraktů a nikoliv velikost obchodu, což je méně nápadné.
Každé spuštění tohoto testovacího kódu vygeneruje jiný výsledek. Většina vypadá nějak takto:
Ale některé – překvapivě hodně z nich – vypadají takto:
Toto je perfektní graf výnosů, kterou chtěl Honza pro svůj automat. Je trochu moc pěkná – stoupá příliš perfektně lineárně nahoru, což vyplývá z přesného dopočítávání do hodnoty ProfitGoal. Aby se automat mohl skutečně úspěšně prodávat, Lenka bude muset kód upravit, aby výsledná křivka vypadala víc kostrbatě a věrohodně.
Jak nyní vypadá distribuce zisků?
Tato distribuce už nevypadá jako Gaussova křivka. I když je průměrná ztráta -750 pipů, distribuce má extrémně dlouhý levý ocas (a to většinu z něho nevidíte, protože graf je oříznut na hodnotě -100.000 pipů) a ostrý výběžek vpravo na výnosu kolem 20.000 pipů. Z našich 3000 obchodníků s tímto automatem vydělalo asi 2000 více než 20.000 pipů! Bohužel, zhruba 1000 obchodníků utrpí ztrátu, někdy až extrémní ztrátu více než 100.000 pipů. Snad je zachrání milosrdný margin call.
Graf distribuce profitů je trochu zavádějící. Ve skutečnosti na konci roku nebudeme mít 2000 šťastných obchodníků. Hodně z nich to vzdá dřív, protože jejich výnosová křivka, i když na konci končí v zisku 20.000 pipů, prošla skrz ztrátu 100% a vyluxovala jejich obchodní účet. Podívejme se, kolik obchodníků (traderů) dojde k cíli hladce a bez margin callu.
Nový zdrojový kód vypadá takto:
function strategy3() { Stop = 200*PIP; TakeProfit = 10*PIP; var ProfitGoal = 100*PIPCost*Bar; Lots = clamp((ProfitGoal-ProfitClosed)/(7*PIPCost),1,200); if(ProfitOpen+ProfitClosed < -250) { // margin call exitLong(); exitShort(); return; } if(NumOpenTotal == 0) { if(random() < 0) enterShort(); else enterLong(); } }
Každý obchodník nyní zavře svou pozici a přestane obchodovat, když jeho celková ztráta na konci dne dosáhne 250 dolarů a víc. To znatelně změní distribuci profitů:
Většina obchodníků to vzdala před koncem roku. Nicméně 500 obchodníků dosáhlo zisku 20.000 pipů a to bez fatálního propadu obchodního účtu – vše s naprosto náhodným vstupováním do obchodů!
Lenka nakonec skutečně má zdrojový kód automatu (automatického obchodního systému), který generuje zisk více než 20.000 pipů za rok. Je tu ovšem malý problém: funguje to jenom pro jednoho ze šesti „obchodníků“ (500 z 3000). Většina těch zbylých sice bude mít v prvních měsících také zisk, díky martingale systému a vysokému procentu úspěšnosti, ale před koncem roku své obchodní účty vyluxují i oni.
Honza naštěstí tento malý problém nezmíní ve svých reklamách, ale bude potřebovat něco jiného. Alespoň jeden ziskový systém musí být ověřen na nezávislém reálném účtu s veřejně přístupným záznamem. Za tímto účelem Honza investuje 10.000 dolarů. Nikoliv na uplacení nezávislého auditora. 10.000 dolarů Honza použije na něco jiného – na reálné obchodování.
Průkazný reálný zisk ze ztrátového systému
Honzovy další kroky:
- Získat zdrojový kód od Lenky. Zaplatit jí za práci.
- Otevřít 20 obchodních účtů, každý s vkladem 250 dolarů.
- Zaregistrovat obchodní účty na nezávislý záznamový web, jako myfxbook™.
- Spustit podvodný automatický skript na všech účtech.
Na financování 20-ti obchodních účtů použije Honza polovinu ze svých 10.000 dolarů. Tyto peníze nejsou úplně ztracené a část z nich může dostat Honza zpět. Ale nejdřív potřebuje silné nervy, protože vklad 250 dolarů nemá moc prostoru na dočasný propad výnosové křivky. Mnoho z těchto 20-ti účtů skončí s plnou ztrátou celého vkladu, ale to vůbec nevadí: s každým vynulovaným účtem Honza založí nový s vkladem 250 dolarů, dokud neutratí celých 10.000 dolarů.
Teď Honza musí rok počkat.
10.000 dolarů umožňuje spuštění zhruba 40 účtů současně. Pokud výnosová křivka nějakého účtu nevypadá dobře, i když je účet v zisku, Honza účet zavře a otevře nový. Po roce má Honza jenom 4 účty, ale na každém zisk 20.000 pipů. Protože tyto účty začaly s vkladem pouhých 250 dolarů, myfxbook jim dá impozantní označení „roční zhodnocení více než 1000%.“
Honza si nechá účet s nejlépe vypadající výnosovou křivkou a ostatní účty zavře. Část z investovaných 10.000 dolarů je opět zpátky na Honzově bankovním účtu.
Teď má Honza výnosovou křivku ověřenou nezávislým dohledem, přesně jak chtěl. Může začít s reklamní kampaní a prodejem svého automatu. A peníze se budou hrnout a stane se nechutně bohatým. A koupí si ostrov v Karibiku a bude šťastně žít až do smrti z peněz za svého robota. A až se jeho robot přestane prodávat, protože příliš mnoho obchodníků na něm ztratí peníze, bude mít připraveno dalších 10 robotů, na kterých mezi tím pracoval.
Graf výše byl vygenerován typickým komerčním automatem, který byl svého času velmi populární. Netvrdíme, že je to podvod. Může to být příklad skutečně kvalitního robota. Je jenom trochu podezřelé, že účet byl otevřen s vkladem pouhých 250 dolarů. Nebo že velikost lotu – to jsou ty zelené sloupečky – se zvětšil pokaždé, když výnosová křivka padala dolů, přesně jako je tomu u systému martingale. Nebo že výnosová křivka krásně stoupala ve své první části, ale najednou – ihned poté, co se systém začal prodávat – začala padat jako kámen pod vodu, ztrácejíc všechny předchozí „zisky“. Opravdu divné.
Co jsme se dozvěděli?
- funkce random (náhoda) udělá nejeden skript šťastným.
- Nastavení Stop a Profit hodnot je dostačující k dosažení auditovaného vysokého procenta úspěšnosti systému (až 100%).
- Náhodné obchodování generuje distribuci profitů ve tvaru Gaussovy křivky.
- Geniální obchodníci nemusí být vůbec geniální, jen mají štěstí.
- Výsledkem nastavení velikosti obchodu v závislosti na velikosti profitu je systém martingale.
- Je relativně snadné vygenerovat podvodné křivky výnosu na nezávislé záznamové weby, jako je myfxbook™.
- Prodej automatických obchodních systémů může být o hodně výnosnější než skutečné obchodování.
Tento článek zde není proto, aby Vás naučil, jak obrat ostatní obchodníky. Článek Vás má upozornit na typický fenomén v obchodování na burze. Jsou všechny komerční automaty podvod? To je těžké říct. Skutečně dobrý automat je teoreticky možné naprogramovat, ale nebude se dobře prodávat: kupující dychtí po vysoké úspěšnosti obchodů a rovné výnosové křivce. Toho nelze dosáhnout se skutečným obchodním systémem. Prodejci systémů tak nemají zájem na prodeji robotů, které opravdu fungují, i když vědí, jak je naprogramovat. Mají o mnoho lepší recenze a víc prodejů s podvodnými systémy. Pokud víte, jak podobné roboty fungují, budete schopni identifikovat podezřelé ukazatele. Pár robotů je ovšem naprogramovaných tak dobře, že nelze na první pohled rozpoznat, že jde o podvod.
Nekupujte roboty a nenásledujte slepě prodejce signálů. Používejte své vlastní myšlenky. Nespoléhejte se na jednu jedinou obchodní metodu, ale zaútočte na burzu tolika způsoby, kolika je to možné.
—
Článek byl přeložen do češtiny z anglického originálu Workshop 8: Anatomy of a Scam Robot (ze seriálu Strategy Coding Tutorial) s laskavým svolením autora. Článek byl mírně zkrácen, plnou verzi najdete pod odkazem na originál. Pokud Vás zajímá více o autorovi, navštivte web Zorro project.