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

V Praze růst, Erste zpět nad 900 Kč

Ilustrativní obrázek

Fed debatuje o budoucí struktuře své bilance a Trump opět kritizuje růst sazeb

Ilustrativní obrázek

Ministerstvo financí hodlá v září emitovat 16 miliard v dluhopisech a 10 miliard v pokladničních poukázkách

Ilustrativní obrázek

Trump štěká na Fed

Ilustrativní obrázek

Stará auta do šrotu? Lidé do nich naopak začínají více investovat

Ilustrativní obrázek

Asijské akciové indexy během úterní seance posilovaly, výjimkou byl japonský Topix



Čti více
Ilustrativní obrázek

Donald Trump je proti zvyšování úrokových sazeb

Ilustrativní obrázek

Avast reportuje hospodářské výsledky, poprvé od svého vstupu na burzu

Ilustrativní obrázek

Celosvětové prodeje diamantových šperků v prvním čtvrtletí meziročně vzrostly o sedm procent

Ilustrativní obrázek

Trump svými ostrými výroky na adresu Fedu oslabil dolar

Ilustrativní obrázek

PFNonwovens: odhady hospodaření za 2Q 2018

Ilustrativní obrázek

Index DAX uzavřel pondělní seanci růstově s nejlepšími výsledky uvnitř sektoru zdravotnictví

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.