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

Předvánoční Black Friday za pandemie představuje žně pro podvodníky. Platíte tomu správnému prodejci?

Ilustrativní obrázek

ECB zvažuje zrušení zákazu dividend evropských bank v roce 2021

Ilustrativní obrázek

Z krále ovocných barů superfarmářem

Ilustrativní obrázek

Výměnou radiátoru ušetříte tisíce a provedete ji za pár hodin

Ilustrativní obrázek

Komentář BHS k diskriminaci žen

Ilustrativní obrázek

Delivery Hero Korea čeká vyšetřování kvůli zneužití postavení na trhu



Čti více
Ilustrativní obrázek

Black Week: Češi podle statistiky utratí v průměru 5 080 Kč

Ilustrativní obrázek

Frankfurtská burza po otevření na kladné nule

Ilustrativní obrázek

Asijské indexy převážně v zeleném

Ilustrativní obrázek

David Slezák: Zlato, máš na to!

Ilustrativní obrázek

Německá burza otevřela na kladné nule

Ilustrativní obrázek

Asijské trhy převážně rostly

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.