MQL Prakticky. Algo Trader cz. I [Programovací kurz]
V dnešní epizodě začneme pracovat na softwaru, který vám umožní využít příležitostí, které nabízí algoritmické obchodování při zachování maximální kontroly nad průběhem událostí. Zaměříme se na myšlenky, které vám umožní zapojit se do skutečného obchodování maximalizací intuitivního ovládání a flexibility funkce. V softwaru používáme rozhraní, jehož forma je mnohými považována za standard v denním obchodování a často se nazývá cenový žebřík.
Plán projektu
Práce rozdělíme do několika fází, protože kromě rozsáhlé manipulace s objednávkami vám Algo Trader umožní provozovat algoritmy, které automaticky řídí pozici podle různých kombinací, které můžete vytvořit v závislosti na situaci, se kterou se na trhu setkáte.
V dnešní části podnikneme první krok do světa objektově orientovaného programování a zahájíme základní část našeho projektu týkající se rozhraní a provozu základních operací.
V dalších epizodách začneme pracovat na prvních algoritmech. Na začátku vytvoříme algoritmus GTP, který zajistí, že pozice bude uzavřena s očekávaným ziskem bez ohledu na počet objednávek. Dále vytvoříme algoritmus OOO (One Opens the Other, tak přesně, ještě nebyl) a nakonec algoritmus umožňující skalpování při prezentaci důležitých makro dat. Spolu s algoritmy zde a tam přidáme pěkný gadget.
Technické zázemí
Balíček se soubory, které potřebujete dnes, naleznete na tomto odkazu:
Použití softwaru znamená přijetí licence připojené k souboru.
Aby software fungoval správně, potřebujete verzi Microsoft NET Framework min. 4.6.1 Runtime, které si můžete stáhnout zde:
Objektově orientované programování
Vytvoříme náš software pomocí programování objektů, programovací metoda, která umožňuje logické uspořádání fragmentů algoritmů v tzv objekty, jejichž úkolem je provádět samostatné funkce a komunikovat s jinými objekty za účelem realizace úkolu programu jako celku. Abychom mohli jít dále, musíme pochopit, jaké objekty jsou v praxi a jak jsou vytvořeny. Pro tento účel se podívejte na následující článek ve Wikibooks, který - na základě příkladu jazyka C ++, na kterém je MQL4 založen - umožňuje pochopit základy.
První třída
Jak vidíte, všechno se točí kolem klíčového slova třída, To vám umožní definovat objekt, který pak můžete vytvořit pomocí klíčového slova nový, Otevřete soubor obsahující definici jedné ze tříd, které dnes použijeme, souboru ChartOperations.mqhkteré najdete v katalogu MQL4 \ Include \ AlgoTrader_v10.
Každá třída má konstruktor, který je v praxi funkcí, která se automaticky vyvolá při vytvoření objektu. Konstruktor nese stejný název jako objekt a může mít parametry. V našem fragmentu kódu vytvoříme konstruktor následujícím způsobem:
Po vytvoření konstruktoru můžeme definovat komponenty třídy, tj. Funkce a proměnné. Jsou definovány přesně jako v případě běžných funkcí a proměnných s rozdílem v těle třídy. Věnujte pozornost svým klíčovým slovům veřejnost: oraz private:. Všechny funkce a proměnné za slovem veřejnost: bude k dispozici pro funkce, které se nacházejí v jiných částech softwaru, např. ve funkci API OnTick () nebo jiné objekty. soukromý informuje však překladatele, že prvky, které jsou v této části definovány, jsou přísně důvěrné a že k nim nemá nikdo kromě daného objektu přirozený přístup.
Aplikace objektů
Co vytváří objekty tak užitečné? Jde mimo jiné o to, že jakmile definovaný objekt může být vytvořen v libovolném počtu kopií a v závislosti na parametrech, které jim byly předány, budou se chovat odlišně, ale způsobem, který jsme schopni analyzovat a řídit. Objekty navíc umožňují čitelnou organizaci kódu rozdělením složek algoritmu do extrahovaných prvků a správně navržený objekt lze použít ve zcela jiném softwaru, který umožňuje efektivně vytvářet složité aplikace.
Začneme první objekt
Přejdeme k hlavnímu souboru našeho softwaru, souboru AlgoTrader_v10.mq4které najdete v katalogu MQL4 \ Odborníci \.
Podívejme se na definici API níže Oninit ():
ukazatel
V části souboru odpovědné za definici globálních proměnných pomocí fragmentu kódu ...
... vytváříme tzv ukazatel tj. ukazatel, který bude obsahovat adresu na místo v paměti počítače, kde bude objekt vytvořen později. Pomocí ukazatele budeme moci odkazovat na objekt a volat jeho funkce. ukazovátka definujeme podobně jako proměnné, prvním prvkem zápisu je typ objektu, poté umístíme hvězdičku * , po kterém nastavíme jedinečný název objektu, který později použijeme pro reference. Na naše ukazatel přiřazujeme proměnnou NULL, který říká, že v současné fázi ještě neindikuje žádný objekt.
stavitel
Později v kódu, v těle funkce Oninit () vytvoříme správný objekt pomocí klíčového slova nový.
Po nový nazýváme konstruktorem objektu, který v našem případě bere dvě proměnné informující objekt o rozměrech našeho grafu, protože potřebujeme, aby naše rozhraní bylo správně umístěno. Zavolaný konstruktor předává adresu nově vytvořeného objektu do paměti počítače naší ukazatel pojmenovaný ChartOperations.
torpédoborec
Objekty jsou speciálním typem dat, který, pokud ho vytvoříme, musíme zajistit, aby byl konečně odstraněn z paměti počítače. To vše tak, že před notebookem nemusíte být obrovský server, který shromažďuje dříve vytvořená data, která už nikomu nepotřebujete.
Pro odstranění objektů používáme klíčové slovo vymazat, po kterém umístíme své jméno poinera označující, který objekt máme na mysli. Objekt odstraníme pouze ve funkci API OnDeinit (...)protože jej potřebujeme po celou dobu životnosti aplikace, dokud není software vypnut.
Práce s objekty
Podívejme se nyní, jak můžeme použít náš vytvořený objekt pro potřeby naší aplikace. Za tímto účelem v těle třídy cChartOperations Definovali jsme několik funkcí. Podívejme se na jednu z nich:
funkce Při kliknutí (...) potřebujeme, aby naše rozhraní sdělilo, jaké cenové úrovně jsou pro nás v současné době zajímavé. Dvojitým kliknutím na graf nastaví algoritmus náš cenový žebřík na uvedeném místě. Aby naše funkce fungovala, musíme zjistit okamžik, kdy klikneme na graf, a zde pomáhá funkce API OnChartEvent (...)
Výše uvedený úryvek kódu rozpoznává okamžik, kdy uživatel klikne na graf a potom zavolá funkci, která je uvnitř našeho dříve vytvořeného objektu. Volání funkce spočívá v umístění tečky za naše jméno ukazatel k objektu, a pak projít název funkce, která nás zajímá, spolu s potřebnými parametry, které v našem případě označují souřadnice x a y místa v grafu, ve kterém bylo kliknutí provedeno.
První účinky
Námi vytvořené postupy spustily první funkcionalitu softwaru, kterou můžeme otestovat sestavením našeho programu a kliknutím na jiný graf. Níže naleznete grafiku, která představuje několik funkcí, které umožňují manipulovat s cenovými úrovněmi zobrazenými v našem grafickém rozhraní.
Druhá třída
Vzhledem k tomu, že jste byli povýšeni do druhého stupně a naše kliknutí nepadá do odpadu, navrhneme druhé zařízení, které vám umožní umístit objednávky z úrovně našeho žebříčku. Pro tento účel jsme připravili příslušnou třídu, kterou najdete v souboru MQL4 \ Include \ AlgoTrader_v10 \ OrderOperations.mqh
Ve výše uvedeném kódu můžete vidět úplnou definici objektu cOrderOperationskteré budou použity k vyřízení objednávek, které umístíme na náš žebříček cen Věnujte pozornost této funkci ProcessOrderRequests ()ve kterém náš program komunikuje s knihovnou dll pomocí funkce ReadOrderRequest ().
struktury
funkce ReadOrderRequest () jako výsledek své akce vrací strukturu typu sOrderRequest, což je sada námi definovaných dat s objednávkou umístěnou přes rozhraní.
Struktury jsou mladší sestry tříd, které vám umožní vytvořit blok dat obsahující mnoho proměnných. To umožňuje logické uspořádání informací, které se týkají dané problematiky. V našem případě struktura shromažďuje údaje o objednávce zaslané naším grafickým rozhraním, jako je například otevírací cena nebo objem. Definujeme strukturu předcházejícím jejímu názvu klíčovým slovem structa pak nastavíme seznam potřebných dat.
Výše uvedenou definici naleznete v souboru MQL4 \ Include \ AlgoTrader_v10 \ Definitions.mqh.
Struktury používáme podobně jako proměnné, v prvním kroku ji musíme vytvořit specifikováním typu struktury a pak jí dáme jedinečný název, na který se můžeme později odkazovat. V následujícím příkladu vytvoříme strukturu typu sOrderRequest a dáváme mu jedinečné jméno požádata pak přidělujeme data z našeho rozhraní pomocí funkcí ReadOrderRequest ().
Přístup k datům uloženým ve struktuře je analogický s použitím proměnných, protože v praxi je struktura pouze souborem proměnných skrytých pod společným identifikátorem. Chcete-li číst nebo zapisovat data ve struktuře, stačí po názvu, který jsme dali, dát tečku, a pak označit název proměnné, která nás zajímá. V následujícím fragmentu kódu čteme data uložená ve struktuře pro odeslání objednávky a poté informace o výsledku operace uložíme.
Provádění příkazů
Aby mohl náš software odesílat objednávky, musíme objekt vytvořený na základě třídy implementovat cOrderOperations, Protože budeme potřebovat objekt od spuštění našeho programu, vytvoříme jej ve funkci API Oninit ().
V konstruktoru cOrderOperations umístíme proměnnou Position_id, který je součástí nastavení naší aplikace dostupné ve výchozím okně platformy MetaTrader. Identifikátor umožňuje, aby náš software rozpoznal své vlastní příkazy, aby nedošlo k záměně s objednávkami z jiných zdrojů.
Uvedený kód jsme také spustili Časový spínač s intervalem ms 200, protože náš objekt by měl pravidelně kontrolovat, zda rozhraní odesílá informace o příchozí objednávce.
Funkce objektu OnTimer200ms () volání funkce ProcessOrderRequests ()kdo zadá objednávku, když obdrží odpovídající data z rozhraní.
účinky
Náš software již může komunikovat s grafickým rozhraním a my můžeme dělat to, co chceme dělat nejvíce, tj. Sestavit algoritmus a odeslat novou objednávku. Abychom vám pomohli začít první pár kroků níže, najdete několik tipů, které ilustrují, jaké funkce jsou skryté pod různými klíči.
Ovládání hlasitosti
Typy příkazů
Souhrn
To je pro dnešek vše, ale je to jen začátek dobrodružství Algo Trader. V další epizodě přejdeme k implementaci pokročilých funkcí souvisejících s podporou algoritmů. Algo Trader bude vytvořen společně s vámi a budeme vděční za jakékoli nápady a komentáře, které vám mohou pomoci. Rádi bychom od vás slyšeli v biuro@expertadvisors.pl .