Tvorba vlastního AOS (7) – Ochrana proti opakovaným příkazům

08:37 | Mar Ve | Diskuze

V minulém díle jsme již posunuli program do fáze, kdy dokáže provádět obchodní pokyny dle námi zvolených pravidel. Ke správné funkčnosti je však stále třeba kód trochu vyladit. Pojďme se podívat jak.

Ilustrační obrázek
Foto: Public Domain

Nyní vypadá kód takto:

 

V dané podobě bude sice zadávat správné nákupní pokyny, avšak je potřeba si připomenout, že se podmínka nachází uvnitř speciální funkce OnTick(), je tedy ověřována s každým novým tickem. V případě splnění vstupních podmínek by tak AOS začal odesílat nákupní pokyny s každou změnou ceny a během několika minut by již bylo otevřeno minimálně několik desítek pokynů. Tomu lze zabránit vložením kódu, který zkontroluje, zdali již nějaký pokyn není otevřený a pokud tomu tak bude, další neotevře. Díky tomu bude v jeden moment otevřena vždy maximálně jedna pozice, což je pro naši strategii žádoucí.

Ke kontrole využijeme opět dobře známého If. V podmínce si nejprve vybereme příkaz k posouzení a následně se podíváme, jestli je stále otevřený. K výběru příkazu slouží funkce OrderSelect(), která je definována následovně:

bool OrderSelect(int index, int select, int pool)

Parametry:

index – index(pořadí) pokynu nebo jeho unikátní identifikační číslo(ticket). Záleží na druhém parametru.

select – zde jsou 2 možnosti:

SELECT_BY_POS -  index vybírán podle pořadí.

SELECT_BY_TICKET - index vybírán podle ticketu.

pool – Má význam jen v případě zvolení SELECT_BY_POS. Nabízí opět 2 možnosti:

MODE_TRADES (default)- příkaz vybírán pouze z otevřených a čekajících pokynů.

MODE_HISTORY – příkaz vybírán z historických (zavřené a zrušené) příkazů.

 

Proměnnou ticket již máme vytvořenou, nyní ji tak můžeme použít. Funkce, která vybere příkaz k posouzení tak bude vypadat takto:

OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES)

Dále je potřeba zjistit, jestli je daný příkaz stále otevřený, čehož lze snadno dosáhnout pomocí funkce OrderCloseTime(), která vrací uzavírací čas daného příkazu. Pokud je však příkaz stále otevřený, vrátí hodnotu 0. Kompletní kód, který zkontroluje, zdali není stále otevřený příkaz tak vypadá následovně:

 

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) && OrderCloseTime()==0)

     {

      return;

     }

 

V podmínce je vybrán potřebný příkaz a ověřeno, že je stále otevřený (čas zavření se rovná 0). Pokud to platí, tak operátor return přeruší průběh funkce a vrátí ji zase na začátek. To znamená, že kód neprobíhá dál a nedochází k dalšímu posuzování vstupních podmínek a exekuci obchodních příkazů, dokud není aktivní pokyn ukončen. Je tedy potřeba umístit kód na začátek funkce. Kompletní kód nyní vypadá následovně:

 

V aktuální podobě AOS neotevře nikdy současně více než jeden obchodní příkaz. Tento jednoduchý program je nyní již správně funkční a lze ho podrobit testování  na historických datech a dále rozvíjet. Jak jste se sami mohli přesvědčit, naprogramovat jednoduchou obchodní myšlenku v mql4 není opravdu nic složitého. Stačí si pouze stanovit jasně definované podmínky a mít ochotu věnovat nějaký čas studiu. Veškeré potřebné informace k jazyku jsou snadno dostupné v oficiální dokumentaci. V dalším díle se začneme zabývat další nezbytnou součástí vývoje AOS a tou je zmíněné testování a optimalizace strategie na historických datech.

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.


Související články
Ilustrativní obrázek

Tesla oznámila nábor nových manažerů

Ilustrativní obrázek

Saúdský korunní princ zakázal nové vládní zakázky pro německé firmy

Ilustrativní obrázek

Americké sankce proti Íránu jsou součástí boje, prohlašuje šéf hnutí Hizballáh



Čti více
Ilustrativní obrázek

Tesla si nechala z Německa expresně zaslat výrobní roboty pro svou Gigafactory

Ilustrativní obrázek

Bayer v příštím týdnu získá povolení úřadů USA k akvizici Monsanto, informuje agentura Bloomberg

Ilustrativní obrázek

ZTE bude moci dále podnikat. Vláda USA se dohodla s Čínou na kompromisu

Ilustrativní obrázek

Počet aktivních vrtů na ropu a zemní plyn v USA roste na maximum od března 2015

Ilustrativní obrázek

Americký dolar pokračuje v posilování. V růstu jej podporuje především politická nejistota v eurozóně

Ilustrativní obrázek

Cena ropy dnes výrazně oslabuje. OPEC a Rusko omezí své těžební limity

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.