programování
Teď čteš
MQL Prakticky. Algo Trader cz. I [Programovací kurz]
0

MQL Prakticky. Algo Trader cz. I [Programovací kurz]

vytvořil Radek SzafronČervence 4 2019

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

algotrader

Algo Trader - Rozhraní

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.

PŘEČTĚTE SI ČLÁNEK

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.

třída cChartOperations { veřejnost: cChartOperations(int šířka, int výška) { // ... } zrušit OnClick(int x, int y) { // ... } zrušit OnChartChange() { // ... } private: int Chart_width; int Chart_height; uint Last_click; int Last_click_x, Last_click_y; bool IsDoubleClick(int x, int y) { // ... } };

 

 

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:

cChartOperations(int šířka, int výška) { }

 

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.


odborní poradci


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 ():

cChartOperations* ChartOperations = NULL; int OnInit() { // (...) int chart_width = (int)ChartGetInteger(0, CHART_WIDTH_IN_PIXELS); int chart_height = (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS); ChartOperations = nový cChartOperations(chart_width, chart_height); zpáteční(INIT_SUCCEEDED); }

ukazatel

V části souboru odpovědné za definici globálních proměnných pomocí fragmentu kódu ...

cChartOperations* ChartOperations = NULL;

 

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

ChartOperations = nový cChartOperations(chart_width, chart_height);

 

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.

zrušit OnDeinit(const int důvod) { // (...) vymazat ChartOperations; }

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:

zrušit OnClick(int x, int y) { if(IsDoubleClick(x, y)) GoToPrice(x, y); }

 

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 (...)

zrušit OnChartEvent(const int id const dlouhý & lparam, const zdvojnásobit & dparam, const šňůra & spar) { // (...) if(id == CHARTEVENT_CLICK) ChartOperations.OnClick((int)lParam (int)dparam); }

 

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

programování mql

Algo Trader - Myší a cenové hladiny

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

třída cOrderOperations { veřejnost: cOrderOperations(int position_id) { Position_id = position_id; } zrušit OnTimer200ms() { ProcessOrderRequests(); } private: int Position_id; zrušit ProcessOrderRequests() { sOrderRequest požádat = ReadOrderRequest(); if(request.Request_id <= 0) návrat; if(request.Order_symbol != Symbol() || request.Position_id != Position_id) { request.Request_status = ORDER_REQUEST_STATUS_FAILED; request.Request_error = ORDER_REQUEST_ERROR_WRONG_POSITION; návrat; } if(OrderSend(request.Order_symbol, request.Order_type, request.Order_volume, request.Order_price, 0, 0, 0, request.Order_comment, request.Position_id) > 0) { request.Request_status = ORDER_REQUEST_STATUS_COMPLETED; } jiný { request.Request_status = ORDER_REQUEST_STATUS_FAILED; request.Request_error = _LastError; } UpdateOrderRequest(požádat); } };

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

zrušit ProcessOrderRequests() { sOrderRequest požádat = ReadOrderRequest(); // (...) }

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.

struct sOrderRequest { int REQUEST_ID; int Position_id; int ORDER_TYPE; zdvojnásobit Order_volume; zdvojnásobit Order_price; zdvojnásobit Order_range; šňůra Order_symbol; šňůra Order_comment; int Request_status; int Request_error; };

 

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 ().

zrušit ProcessOrderRequests() { sOrderRequest požádat = 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.

if(OrderSend(request.Order_symbol, request.Order_type, request.Order_volume, request.Order_price, 0, 0, 0, request.Order_comment, request.Position_id) > 0) { request.Request_status = ORDER_REQUEST_STATUS_COMPLETED; }

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 ().

vstup int Position_id = 8821; // Jedinečný identifikátor položky cOrderOperations* OrderOperations = NULL; int OnInit() { EventSetMillisecondTimer(200); // (...) OrderOperations = nový cOrderOperations(Position_id); zpáteční(INIT_SUCCEEDED); }

 

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.

zrušit OnTimer() { // (...) OrderOperations.OnTimer200ms(); }

 

Funkce objektu OnTimer200ms () volání funkce ProcessOrderRequests ()kdo zadá objednávku, když obdrží odpovídající data z rozhraní.

třída cOrderOperations { veřejnost: cOrderOperations(int position_id) { Position_id = position_id; } zrušit OnTimer200ms() { ProcessOrderRequests(); } // (...) };

úč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

forex obchodování

Algo Trader - manipulace s objemem

Typy příkazů

algo obchodování

Algo Trader - vyřizování objednávek

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 .

Co si o tom myslíš?
70%
zajímavý
20%
Heh ...
10%
Šok!
0%
Nemám rád
0%
zranění
0%
O autorovi
Radek Szafron
Autorem publikace je Radek Szafron, majitel společnosti Expert Advisors, která již řadu let podporuje investory poskytováním technologií určených pro trh FOREX. Autor je absolventem Vysoké školy ekonomické ve Varšavě se specializací "Finanční trhy" a programátor s téměř letními zkušenostmi z 20. Společnost implementuje návrhy algoritmů a aplikací napsaných ve všech jazycích z rodiny "C", včetně oblíbených platforem Meta Trader 4 a 5. Expertní poradci naleznete na www.expertadvisors.pl.