Programujeme trailing stop v MQL4 (díl 8.)

V dnešním dílu se pokusíme naprogramovat jednoduchý trailing stop. Trailovat můžeme podle různých pravidel. My se pokusíme naprogramovat trailing v následující podobě:

V minulém díle jsme si naprogramovali posunutí SL na BE v okamžiku, kdy pokyn dosáhne zisku + 100 pipů. Trh se pak může vyvíjet dále v náš prospěch např. na + 150 pipů, pak se však může otočit a jít proti nám až zasáhne SL, který je na BE tzn. 0 pipů pro nás. Naprogramujeme tedy trailing stop tak, že jakmile poroste trh nad + 100 pipů budeme posouvat SL tak, aby byl 100 pipů od nejvyššího dosaženého high tzn. pokud dosáhne v čase náš obchod zisku +150 pipů měl by se SL posunout na úroveň + 50 pipů.

Zápis kódu bude opět velmi podobný již předchozím zápisům. Opět budeme potřebovat počítadlo a budeme testovat každý pokyn, který vyfiltrujeme pomocí magic number a u něhož chceme zjistit, zda patří k naší EA. Počítadlo použijeme opět to původní a vložíme kód pro trailing stop a pouze posuneme závorku.

Změnu SL provedeme pomocí příkazu OrderModify a to úplně stejně, jako jsme to dělali u posunutí na BE v minulém díle. Je to vlastně úplně stejné. Jediné v čem se zápis liší, je definice podmínek, kdy má ke změně SL dojít.

Ty budeme definovat takto:

Nadefinujeme proměnnou H a L jako High a Low aktuální svíčky a budeme testovat pro long okamžik, kdy H mínus cena vstupu bude větší než BE. BE jsme definovali v minulém díle jako zisk v pipech, při kterém převedeme posun SL na cenu vstupu. Tato podmínka zabezpečí, že příkaz OrderModify se uskuteční, pouze pokud zisk našeho obchodu překročí hodnotu BE, tedy 100 pipů. Pokud je méně než 100 pipů, nechceme SL posouvat! Na druhou stranu zisk může být nad 100 pipy zisku poměrně dlouhou dobu a pokyn by se stále dokola modifikoval a to také nechceme, proto vložíme ještě jednu podmínku, která porovná jaký SL máme u příkazu zadán a pokud bude odpovídat naším požadavkům, nebudeme ho již znovu zbytečně modifikovat. Podmínku definujeme takto H-SL > než aktuální zadaný SL příkazu. Pokud bude H – SL (v našem případu High mínus 100 pipů) větší než nastavený SL příkazu provedeme modifikaci tak, že SL nastavíme ve výši H-SL. Tím zabráníme cyklickému znovunastavování SL a to do doby, než trh dosáhne nového H.

Nevím, zda je to naprosto zřejmé a tak si to ukážeme ještě jednou na následujícím obrázku.

Vstoupíme a nastavíme SL na úrovni 100 pipů. Trh se vyvíjí a až do bodu A nedosáhne zisku 100 pipů. V bodě A dosahuje zisku + 100 pipů a dojde k posunu SL na BE. Od bodu A až do bodu B platí, že H-SL (tedy High – 100 pipů) je vyšší než aktuální zadaný SL příkazu a dojde tedy k jeho modifikaci a SL až do bodu B roste. Od bodu B do bodu C není H-SL vyšší než zadaný SL a proto nedochází k jeho modifikaci. Od bodu C až do bodu D opět platí, že H-SL je vyšší než zadaný SL a dochází tedy k jeho modifikaci. Od bodu D opět nedochází k modifikaci SL.

Pro short stanovíme podmínky obdobně, akorát vše odvíjíme od Low.

Zápis kódu bude tedy vypadat následovně:

Jen připomínáme, že definujeme dvě nové proměnné H a L, dále vkládáme kód pro trailing. Využíváme stávající počítadlo (for …{… }) Musíme tedy posunout poslední závorku za vkládaný kód. Provedli jsme ještě drobnou změnu v kódu pro „Posun na BE“, ale důvod si řekneme později.

Teď se podíváme, zda EA dělá to, co si přejeme a posouvá SL dle našeho požadavku. Spustíme testr a otevřeme si graf. Vidíme, že EA pracuje, jak má.

Ten se jen krátce vrátíme k tomu, proč jsme provedli ještě drobnou korekci v kódu pro „Posun na BE“. Tato část ztratila opodstatnění, a pokud ji celou smažete, EA bude fungovat stejně. Naše podmínka H-SL v trailing stopu totiž způsobí, že když bude High +100 pipů od našeho vstupu, SL se zadá ve výši H-SL tedy 100 – 100 tedy 0 pipů. My jsme však část „Posun na BE“ v EA nechali, ale při spuštění testeru se EA zacyklovala. V době, kdy byl náš příkaz v zisku více než 100 pipů docházelo k tomu, že SL se posunul dle kódu „Posun na BE“ na cenu vstupu, protože byl však trh výše než + 100 pipů zisku zafungoval i kód pro „traling stop“ a SL se posunul ještě výše. Víme, že EA funguje v cyklu stále dokola a tak v další smyčce opět „Posun na BE“ posunul SL zpět na vstupní cenu a kód pro „trailing stop“ opět výše dle dosaženého High. Tento problém jsme tedy vyřešili úpravou podmínky v kódu pro „Posun na BE“, kde jsem stanovili, že modifikace SL se má provést pouze pokud je SL příkazu menší než vstupní cena. Tím jsem zajistili, že posun na vstupní cenu dle kódu „Posun na BE“ se posunu pouze při prvním dosažení zisku + 100 pipů a pak již ne.

Vraťme se však ještě k trailing stopu. Vyzkoušejme si, jak funguje v případě, že PT zadáme hodně vysoký např. 1.000 pipů. Dáme tak prostor obchodu růst mnohem významněji. Podívejme se na graf z testeru:

Na grafu je vidět pěkný trade z počátku ledna 2010. Zde je vidět, jak trailing pěkně zafungoval. Obchod hned vyrazil naším směrem. Nedosáhl však hranice zisku + 100 pipů a neposunul se tak na BE. Pak se trh otočil a jen o chlup nebyl zasažen náš SL. Pak už se trh utrhl a šel pouze naším směrem. Obchod byl ukončen v pátek před zavřením trhů, tak jak je v EA naprogramováno. Tento pěkný trade nakonec skončil v zisku + 426 pipů. V grafu je naznačen vývoj SL v čase a je vidět, že po celou dobu nebyl zasažen.

Samozřejmě trailing stop můžeme konstruovat i jinak. Je důležité si pamatovat, že potřebujeme počítadlo a příkaz OrderModify a pak už je to jen o tom stanovit si podmínky, kdy má k posunu SL dojít.

Tím jsme si ukázali ty nejzákladnější věci, které můžeme při tvorbě vlastní EA potřebovat. Troufáme si říct, že teď již každý z vás zvládne nějakou vlastní jednoduchou EA naprogramovat. Je tu však ještě jedna věc, ke které bychom se chtěli v příštím díle vrátit a to jsou čekající pokyny. Zatím jsme si ukazovali vstupy pouze za aktuální tržní cenu a příště si ukážeme, jak zadat čekací pokyn typu STOP a LIMIT.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *