Tvorba vlastního AOS (6) – Nákupní podmínky a obchodní funkce

11:18 | Mar Ve | Diskuze

V předchozím díle jsme si nadeklarovali a vypočítali několik základních proměnných. Nyní se vrhneme na vlastní specifikaci nákupních podmínek a vložení obchodní funkce.

Ilustrační obrázek
Foto: PIX1861

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í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.

Líbil se vám článek?
+0 / -0
Odeslat článek e-mailem
Diskuze
Vstoupit do diskuze
V diskuzi zatím není žádný komentář. Buďte první, kdo bude komentovat.


Čti více
Ilustrativní obrázek

Asijské trhy obchodovaly smíšeně po páteční předběžné dohodě mezi USA a Čínou

Ilustrativní obrázek

Burza v Německu přidává 1,31%

Ilustrativní obrázek

Ropný trh bude čelit přebytku v prvním čtvrtletí roku 2020, uvedla MEA

Ilustrativní obrázek

Saudi Aramco dosáhlo hodntoy 2 bilionů dolarů během druhého obchodního dne

Portál W4T.CZ používá cookies s cílem zajistit co možná nejlepší zážitek při návštěvě těchto webových stránek. Dalším užíváním těchto webových stránek vyjadřujete souhlas s umístěním souborů cookies na vašem počítači / zařízení. Více informací naleznete zde.