Zadání tvrdí, že chceme do obchodu vstoupit, jakmile cena poklesne o 1 % a současně se nachází nad úrovní 100denního klouzavého průměru. Obě úrovně jsme si již spočítali, proto je nyní stačí pouze správně zapsat do podmínky za pomoci If-Else, což již umíme. Obecná podoba podmínky je následovná:
if(podmínka)
{
// kód, který se vykoná v případě splnění podmínky
}
else
{
// kód, který se vykoná v opačném případě
}
Nejprve tedy k první části podmínky. Ta bude v našem případě vypadat takto:
if(Close[0]<uroven_vstupu && Close[0]>hodnota_MA)
V závorce jsou obsaženy 2 podmínky, jež jsou odděleny symboly &&, které slouží jako logická operace and (a).
První podmínka: Close[0] < uroven_vstupu
Porovnává, zdali je uzavírací cena poslední svíčky (Close[0]) menší, než hodnota proměnné uroven_vstupu. Tu již máme spočítanou a nachází se 1 % pod uzavírací cenou předchozí svíčky (dne).
Druhá podmínka: Close[0] > hodnota_MA
Tato podmínka porovnává, jestli je uzavírací cena poslední svíčky nad úrovní proměnné hodnota_MA, která v sobě obsahuje úroveň 100denního klouzavého průměru.
V případě platnosti podmínky v závorce (v našem případě dvou podmínek) se vykoná zadaný kód. My chceme, aby v takové situaci proběhl vstup do obchodu, na řadu tak přichází zadání obchodní funkce. Ta se nazývá OrderSend() a její návratová hodnota je identifikátor obchodního pokynu, se kterým lze později dále pracovat. Funkce má opět několik parametrů, tak se na ně pojďme podívat.
Obecná podoba:
int OrderSend(string symbol, int cmd, double volume, double price,
int slippage, double stoploss, double takeprofit, string comment,
int magic, datetime expiration, color arrow_color)
Parametry:
symbol – identifikuje konkrétní trh/měnový pár. Pokud zadáme Symbol(), bude fungovat na jakémkoliv trhu, kde AOS spustíme.
cmd – typ operace, která bude provedena. Dostupných je 6 typů obchodních příkazů:
OP_BUY = nákup za aktuální tržní cenu
OP_SELL = prodej za aktuální tržní cenu
OP_BUYLIMIT = čekající nákupní pokyn, jež se aktivuje při poklesu ceny k dané hranici
OP_SELLLIMIT = čekající prodejní pokyn, jež se aktivuje při vzestupu ceny k dané hranici
OP_BUYSTOP = čekající nákupní pokyn, jež se aktivuje při vzestupu ceny k dané hranici
OP_SELLSTOP = čekající prodejní pokyn, jež se aktivuje při poklesu ceny k dané hranici
volume – velikost pozice.
price – cena, za kterou chceme provést obchod. Pokud provádíme příkaz za aktuální tržní cenu, zvolíme možnost Ask (pro nákupní příkaz) nebo Bid (pro prodej). U čekajících pokynů lze zadat cenu dle zvolené obchodní strategie.
slippage – maximální povolená odchylka ceny při exekuci pokynu.
stoploss – cenová úroveň pro zastavení ztrát.
takeprofit – cenová úroveň pro realizaci zisku.
comment – komentář k pokynu.
magic – magické číslo. Slouží k identifikaci příkazů, hodí se především při využití více AOS současně.
expiration – datum vypršení platnosti pokynu (pokud se jedná a čekající pokyn).
arrow_color – barva šipky, která se objeví v grafu po otevření pokynu.
Náš příkaz tak bude vypadat následovně:
OrderSend(Symbol(),OP_BUY,1,Ask,0,stoploss,takeprofit,NULL,0,0,clrNONE)
Čtěte dále:
Tvorba vlastního AOS (1) – Úvod do problematiky a smysl využití obchodního robota
Tvorba vlastního AOS (2) – Seznámení s MetaEditorem
Tvorba vlastního AOS (3) – Základy programovacího jazyka MQL4
Tímto příkazem se provede na aplikovaném trhu nákupní pokyn za tržní cenu, o objemu 1 lot. Úrovně stoploss a takeprofit jsem si již spočítali dříve a vložili do proměnných, které zde tedy můžeme použít. Poslední 4 parametry nevyužijeme a necháme je nastavené na defaultních hodnotách.
Jak bylo řečeno výše, funkce vrací hodnotu identifikátoru daného pokynu, kterou si uložíme do proměnné ticket. Nezapomeňte si tak proměnnou ticket (int ticket) nadeklarovat v hlavičce kódu s ostatními proměnnými.
Pokud při exekuci nastane nějaký problém, funkce OrderSend() vrátí hodnotu -1 (která se nám uloží do proměnné ticket). Můžeme si tak ještě další jednoduchou podmínkou pohlídat případné chyby při exekuci. K tomu lze využít funkci GetLastError(), která vrátí hodnotu posledního chyby, která nastala. V podmínce se pouze zeptáme, jestli hodnota uložená v ticketu je rovna -1 a v takovém případě si necháme vypsat chybu. V opačném případě, kdy vše proběhne bez problému, si můžeme nechat vypsat potvrzující komentář, který je v části Else.
Aktuální podoba kódu je tak následovná:
Pokud stisknete tlačítko Kompilovat v horní nástrojové liště, tak uvidíte, že editor nehlásí žádné chyby ani varování. Přestože již systém nyní zvládne posoudit vstupní podmínky a provést obchodní pokyn, stále by nefungoval tak, jak potřebujeme. Proč to tak je si ukážeme v příštím díle.