Zadání většího počtu pozic v AOS (EA) (díl 11.)
V dnešním díle si ukážeme, jak naprogramovat vstup více kontraktu, u kterých stanovíme různé hladiny výstupů.
Použijeme opět naší pokusnou strategii, které v současnosti vstupuje do trhu jedním příkazem. Naprogramujeme teď vstup 2 příkazů, kdy první bude vystupovat na pevném PT ve výši 100 pipů a druhý necháme trailovat podle high/low, tak jak jsme si to do naší EA naprogramovali minule. Způsoby, jak to udělat jsou dva:
1) buď zadáme dva příkazy, kdy u jednoho zadáme pevný PT (např. 50 pipů) a u druhého zadáme 0 a necháme ho trailovat, nebo
2) zadáme jen jeden příkaz, ale v dvojnásobném objemu pozice. Musíme ho zadat bez PT a při splnění podmínky PT uzavřít polovinu pozice a druhou nechat trailovat
Ukážeme si oba případy. Začneme tím prvním, tedy zadání dvou příkazů:
Vytvoříme si novou proměnnou „ticket2“ a přidáme novou textovou proměnnou „Text2“ pro odlišení popisu prvního a druhého příkazu:
… a doplníme zápis nového long a short příkazu. Nezapomeňte zadat PT=0 a příkaz označit Textem2
Ještě přepiště PT na 100 pipů a může se podívat na testr, zda se zadávají oba pokyny správně.
Výborně, vše funguje.
Teď se to pokusíme udělat pouze jednou pozicí, ale s dvojnásobným objemem.
Nejprve jednoduše upravíme zadání long a short pokynu. Zdvojnásobíme velikost pozice a vynulujeme PT
Nyní musíme naprogramovat uzavření poloviny pozice při dosažení PT. Kód bude velmi podobný, jako když jsme testovali cenu a posouvali příkaz na BE (viz. díl 7). Opět klasická smyčka for … testujeme, zda existuje pokyn s naším magic number, zda je short či long a zda aktuální Bid či Ask překročil náš profit target a pokud ano, tak uzavřeme polovinu otevřené pozice příkazem OrderClose (to již také umíme). ALE POZOR! Pokud takto uděláme, uzavře se nám polovina pozice a následně i druhá. Proč? Už jsme si několikrát říkali, že EA pracuje neustále ve smyčce, takže zjistí, že existuje pokyn s magic number, je buy či sell a ask či bid přepročil PT a provede uzavření poloviny pozice. V dalším cyklu je však podmínka splněna znovu a tak provede znovu zavření poloviny pozice … a je to! Proto do testovací podmínky vložíme ještě jednu podmínku a to:
OrderLots()==Velikost_pozice*2
Příkaz OrderLots zjistí aktuální velikost pozice. Pokud se rovná vstupnímu objemu, tak dojde k zavření poloviny pozice. Avšak v druhé a dalších smyčkách již tato podmínka nebude splněna, a tak se nám druhá polovina pozice neuzavře. Určitě to již zvládnete sami, ale pro kontrolu přikládám kód. Jak už jsme si řekli dříve, nemusíme tvořit novou smyčku for …, ale můžeme kód vložit do stávající smyčky …
A pro kontrolu koukneme, zda strategie dělá to co má …
Funguje … v čem je vlastně rozdíl mezi variantou 1 a 2. Výsledek je stejný, ale v testru budete vidět rozdílný počet pozic (viz. následující obrázek)
U varianty 2 vidíte, že v některých případech je uzavřena celá pozice najednou (někdy se uzavře polovina na PT a druhá dle trailingu). Vidíte, že testr vám ukazuje u varianty 2 velikost pozic.
A kterou variantu máte používat? Je to jedno, při testování preferujeme první variantu, neboť při běhu více strategií s více kontrakty máme lepší přehled. Viz např. následující obrázek:
Hned vidíme, že strategie Inside bar na EURUSD již zavřela první kontrakt a druhý ještě trailuje. Na strategii SDS na japoncovi ještě běží 2. a 3. kontrakt atd. Na druhou stranu, již se nám stalo, že trh byl při zadávání pokynů hodně rychlý a EA se při zadávání pokynů „zasekla“ a zadal se ze 3 kontraktů pouze jeden či dva (na demu se to nestává, ale na live to není neobvyklé). To se vám u varianty 2 nestane, neboť vstoupíme hned celým objemem. Proto pokud vstupujeme za market a EA obchodujeme live, tak používáme spíše variantu 2 (viz. na předchozím obrázku strategie 5002 + 5001 (Gapy). U stop a limit příkazů používáme variantu 1.
Doufám, že je vám princip jasný a zvládnete již sami naprogramovat strategii, pokud chci vstoupit např. se 3 či více kontrakty.
Teď již umíme sestavit vlastní EA a můžete se vrhnout na programování dalších. Samozřejmě při tvorbě EA se dost často dostaneme do situací, že vše nefunguje jak má a budeme se prát s různými errory. Proto se v příštím díle podíváme na errory v EA.