9.1.2013
Kategorie: Programování AOS

Zadání pokynů typu STOP a LIMIT (díl 9.)

9.1.2013
Kategorie: Programování AOS

 

Dnes si ukážeme jak naprogramovat zadání čekajících pokynů. Opět využijeme naši pokusnou strategii. Zatím jsme vstupovali pouze za tržní cenu. Vstupovali jsme v neděli při otevření trhů a to do longu i shortu zároveň. Posleze jsme přidali filtr a pokud cena v pátek zavřela pod SMA (50), tak jsme vstupovali pouze SHORT. Pokud naopak cena v pátek zavřela nad SMA(50) šli jsme v neděli pouze LONG.

Abychom si ukázali čekající pokyny, nebudeme vstupovat do trhu v neděli hned. Pokud budeme mít signál do LONG budeme chtít vstoupit až při proražení high pátečního dne o 2 pipy. Naopak, pokud budeme mít signál do SHORTU, tak budeme chtít vstoupit až na proražení low páteční svíčky alespoň o 2 pipy.

Povězme si nyní více o definici příkazu OrderSend.

OrderSend (symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color)

Příkaz má 11 parametrů, které jsme si již popsali ve 4. díle. Pro zopakování si popíšeme všech 11 parametrů. Ty, které již známe, jsem označil kurzívou, můžete je přeskočit.

Symbol – definuje měnový pár, na kterém chceme pozici zadat. Zde jsme zadali příkaz Symbol (). Je zde možno definovat měnový pár textovým řetězcem a uvést konkrétně např. EURUSD či jiný pár. Problém je, že EA pak bude fungovat/zadávat příkazy pouze na tomto měnovém páru. Příkaz Symbol() sám přiřadí ten měnový pár z grafu, na který naši EA umístíme. Tím bude naše EA univerzální a použitelná pro libovolný měnový pár.

Cmd – definuje typ příkazu, tzn. zda půjde o příkaz typu market (okamžitý vstup do trhu), nebo o čekající pokyn typu LIMIT nebo STOP. Každý typ má svůj kód, a nebo může být vyjádřen číslicí. My používáme textové značení, lépe si ho zapamatujete. Rozeznáváme tedy:

OP_BUY (nebo číselný kód:0) pro pokyn typu MARKET a typ pozice buy (long/nákup)

OP_SELL (1) pro pokyn typu MARKET a typ pozice sell (short/prodej)

OP_BUYLIMIT (2) pro pokyn typu LIMIT a typ pozice buy (long/nákup)

OP_SELLLIMIT (3) pro pokyn typu LIMIT a typ pozice sell (short/prodej)

OP_BUYSTOP (4) pro pokyn typu STOP a typ pozice buy (long/nákup)

OP_SELLSTOP (5) pro pokyn typu STOP a typ pozice sell (short/prodej)

V našem případě chceme vstupovat při proražení high pátečního dne, zadáme tedy OP_BUYSTOP.

Volume – definuje velikost pozice. Můžeme zadat „natvrdo“ např. 0.01 lotu, tak jako jsem to udělali my. Nicméně navrhujeme to opravit, aby byla EA více „flexibilní“. Místo 0.01 zadáme proměnou „Velikost_pozice“. Tuto novou proměnnou vydefinujeme jako externí proměnou, abychom jí mohli libovolně měnit. Jelikož velikost pozice může být desetinné číslo, použijeme datový typ double.

extern double Velikost_pozice = 0.01; // definice velikosti pozice pro obchodování

Price – je cena, za kterou chceme vstoupit. Když jsme vstoupovali za MARKET volili jsme cenu Ask (pro buy/long) a nebo Bid (pro sell/short). U pokynů typu LIMIT nebo STOP zadáváme cenu v závislosti na pravidlech strategie, kterou programujeme. V našem případě pro LONG se cena definuje jako H1+2*Point pro SHORT definujeme cenu jako L1-2*Point, kde:

H1 = iHigh(NULL,PERIOD_D1,1)

L1 = iLow(NULL,PERIOD_D1,1)

neboli H1 (high o jednu svíčku zpět tzn. v pátek), stejně tak L1

Slippage – zde je možné zadat max. požadovanou odchylku při exekuci příkazu

Stoploss – zde zadáme cenu, na které chceme obchod ukončit, pokud se vyvíjí proti nám. Definovali jsme ho rovnicí H1+2*Point-SL. Pro pozici SHORT postupujeme stejně: L1-2*Point + SL

TakeProfit – zde zadáme cenu, na které chceme vystoupit, když jde obchod naším směrem. Do OrderSend zapíšeme výstupní cenu jako H1+2*Point+PT. U SHORTU je to L1-2*Point – PT

Comment – slouží pro zadání komentáře. Nemusí se zde nic zadávat, nicméně my to používáme, neboť tento text se tak objevuje v MT4 jako komentář k obchodu. Pokud obchodujete na jednom účtu více strategií/EA, hodně vám to usnadní orientaci, který obchod patří ke které EA. Opět využijeme definici pomocí nové proměnné, kterou pojmenujeme „Text“. Jelikož se jedná o textovou proměnnou, použijeme pro její definici datový typ string. Text musí být v uvozovkách.

string Text = „Moje první strategie“

Text „Moje první strategie“ můžeme dát přímo do OrderSend, ale zase platí, že u složitějších EA by bylo náročně text na všech místech přepisovat v případě změny …

Magic number – zde se zadává tzv. magické číslo. Nehledejte v tom nic mystického. Toto číslo pomáhá při identifikaci jednotlivých příkazů zadaných na vašem účtu, resp. k identifikace příslušnosti příkazu k dané EA. Můžeme napsat natvrdo číslo např. 1122, ale my opět použijeme zápisu přes proměnnou definovanou jako Magic_number …

Expiration – zde budeme definovat dobu platnosti pokynu. Použijeme formulaci iTime(Symbol(),PERIOD_D1,0)+86400. Příkaz iTime(Symbol(),PERIOD_D1,0) nám definuje čas, kdy započala svíčka 0. Jelikož je to denní svíčka je počáteční čas vždy 0:00 a to i u nedělní svíčky, ikdyž reálně začíná až v 23:00 SEČ. K tomuto času pak přípočteme čas v sekundách. Pokud chceme, aby příkaz trval 24 hodin = 24 * 60 * 60 = 86400.

Arrow_color – zde můžeme napsat barvu, např. „Blue“ či „Red“ atd. Pokud zde uvedeme nějakou barvu, tak když se pokyn zadá, tak se v grafu objeví šipka dle zvolené barvy. My toto použijeme a zadáme si modrou barvu pro LONG a červenou u SHORT. Je to spíše grafická pomůcka a nemá to žádný vliv na zadávaný pokyn.

 

Zapišme tedy vše do kódu:

Nezapomeňme definovat H1 a L1 a upravit příkazy OrderSend pro LONG a SHORT. Ale než se do toho pustíme, musíme si ukázat ještě jednu věc, která je odlišná od vstupu za MARKET. Když jsme vstupovali za cenu Ask (LONG) a Bid (SHORT). Teď však vstupujeme za cenu definovanou jako high a low. Ale POZOR! Jak už víme z předchozích dílů, všechny ceny, které takto vypočteme či vidíme v grafu jsou vyjádřené v ceně poptávkové (Bid). Proto musíme pro vstupy do LONGU přičíst k ceně ještě spread. Cena vstupu je tedy: H1+2*Point + Spread, kde

Spread = MarketInfo(Symbol(),MODE_SPREAD) * Point

Provedeme proto dopnění proměnných:

91

Nakonec upravíme i samotný příkaz pro vstup do LONGU a SHORTU. Provedeme ještě jednu změnu. Budeme chtít, aby příkaz zůstal aktivní až do pátka tzn. počet sekund = 86400 * 6 = 518400. (neděle, pondělí, úterý, středa, čtvrtek a pátek = celkem 6 dnů)

92

Nyní se podíváme do testeru, zda strategie dělá to co má?

93

Je to v pořádku. Je vidět, že páteční cena zavřela pod SMA (50) A nastavil se čekací pokyn pro SHORT. Ten nebyl celý týden aktivován a vypršel v pátek. Cena v druhý pátek zavřela nad SMA (50) a zadává se tedy čekající pokyn, který se v úterý aktivoval.

V příštím díle se podíváme na to, jak spustit více EA najednou.

 

Vložit komentář