programování
Teď čteš
MQL Prakticky. Ace of Intelligence, tj. Oznámení na telefonu [Programovací kurz]
0

MQL Prakticky. Ace of Intelligence, tj. Oznámení na telefonu [Programovací kurz]

vytvořil Radek SzafronDubna 12 2019

Vítejte zpět na IV. Část našeho praktického programovacího kurzu. Dnes se budeme zabývat otázkami nesmírného významu, které vytvoříme Asa inteligence, která se v naší absenci bude zabývat zpravodajskými činnostmi zaměřenými na cenové změny na akciovém trhu. Když se věci dostanou správným tempem, naše As okamžitě pošle tajný (ne příliš) vzkaz na náš mobilní telefon, který nám umožní vzít věci do vlastních rukou.


Přečtěte si: MQL Prakticky. Tlačítko Panic, část II


Naše aplikace vám umožní nastavit cenové hladiny, na které obdržíte oznámení tlačit na našem telefonu. Úrovně budou určeny přetažením barevných čar, které budou kresleny po kliknutí na obrázek naší Asa inteligence, Začněme s tím, co tato oznámení jsou a jak konfigurovat naše zařízení, aby bylo vše v pořádku.

oznámení tlačit

oznámení tlačit jsou funkcí platformy Meta Trader, která umožňuje odesílat zprávy z terminálu do zařízení se systémem iOS nebo Android, na kterém je instalována mobilní aplikace Meta Trader. Pokud ještě nemáte aplikaci na svém mobilu, stáhněte si ji, protože bez ní As to nemůže zvládnout velmi dobře.

rys_1 rys_2

Konfigurace zařízení je velmi rychlá. V prvním kroku byste měli znát své ID MetaQuotes, tj. číslo, kterým budeme směrovat zprávu do příslušného telefonu (nebo chladničky se systémem Android). číslo ID MetaQuotes je v mobilní aplikaci v menu Nastavení / Chat a zprávyjako na obrázku níže.

Rys_3 forex programování

Číslo se načítá ID MetaQuotes poté přejděte do programu MetaTarder na našem počítači v nabídce Nástroje / Možnosti / Oznámení.

Rys_4 forex programování

Připravte se!

Technické zázemí

Na začátku si stáhněte balíček umístěný o něco nižší a nainstalujte zdrojový kód dnešní aplikace nebo souboru Jako Intelligence.mq4 v katalogu MQL4 \ Odborníci \ .

Náš program bude mít také malé grafické rozhraní umístěné v knihovně elementy_graficzne.ex4který zkopírujete do adresáře MQL4 Knihovny jako inteligence .

DOWNLOAD SOUBORY

začneme

Po otevření souboru Jako Intelligence.mq4v horní části se zobrazí následující úryvek kódu.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#property přísný
# Importovat "Ace of Intelligence \\ elements_graficzne.ex4"
zrušit AgencieRozpocznijMisje (int x, int s);
zrušit AgencieByeBye ();
šňůra AgencieIdentyfikujSie ();
# Importovat
vstupní barva Kolor = clrDodgerBlue;
vstupní barva Kolor_wylaczony = clrGold;
vstup ENUM_LINE_STYLE Styl = STYLE_SOLID;
vstup int tloušťka = 2;
šňůra Název nástroje = "";
šňůra Id_line = "INTERVIEW_LINES";
Kód MQL4

Spustíme kód z importu knihovny a poté pomocí vstupních klíčových slov vytvoříme parametry pro konfiguraci v okně nastavení. Nastavení nám umožní definovat vzhled linky, pomocí které nastavíme cenu za naše oznámení.

Globální proměnné

Pod definicemi typu vstup vidíme něco nového, variabilní deklarace Nazwa_instrumentu oraz Id_liniikteré jsou mimo obsah jakékoli funkce. Co to znamená? Tímto způsobem definujeme globální proměnné, který bude k dispozici na každém místě v našem kódu, to znamená, že každá funkce algoritmu bude schopna číst a dát jim hodnotu. Z proměnných deklarovaných jako vstup liší se pouze tím, že k nim uživatel nemá přístup v okně nastavení.

polí

Při psaní softwaru je často potřeba zpracovat tolik dat, že vytvoření samostatné proměnné pro každou z nich by bylo přinejmenším těžkopádné. Tabulky přicházejí na záchranu, což vám umožňuje vytvořit uspořádanou sadu dat daného typu, například typu zdvojnásobit, k dispozici s jedním názvem, který jsme nastavili. Pro každou tabulku můžeme (nemusíme) definovat její velikost, tj. Kolik kusů dat daného typu v něm bude. Podívejme se na následující úryvek kódu.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
šňůra Tablica_nazwy_linii [];
zdvojnásobit Tablica_dane_linii [] [4];
#define CZAS_AKTYWACJI 0
#define TYP_SYGNALU 1
#define STATUS_LINII 2
#define CENA_LINII 3
#define SYGNAL_LONG 0
#define SYGNAL_SHORT 1
#define LINIA_WYLACZONA 0
#define LINIA_ZMODYFIKOWANA 1
#define LINIA_AKTYWNA 2
#define LINIA_USUNIETA 3
Kód MQL4

Jednorozměrné desky

Ve výše uvedeném kódu jsme v řádcích 1 a 2 vytvořili dvě tabulky. Tablica_nazwy_linii bude použit pro ukládání názvů objektů, které nakreslíme na grafu. Každý řádek bude představovat jeden, nastavený uživatelem, oznámení, a protože naše aplikace vám umožní nastavit libovolný počet oznámení, musíte použít tabulky.

Tablica_nazwy_linii je jednorozměrné pole, které poznáme po jednom páru hranatých závorek [], V hranatých závorkách můžeme zadat počet dat, které chceme vložit do tabulky, ale v našem případě nevíme, kolik bude řádek v grafu, protože záleží na uživateli, takže ponechte prázdnou závorku, což znamená, že budeme dynamicky pravidelně určovat a změňte velikost tabulky podle vašich potřeb. Podívejme se na níže uvedený obrázek, který popisuje, jak fungují jednorozměrné desky.

Rys_5 forex programování

Programování Forexu - pole

Vícerozměrná pole

Druhá deska, pojmenovaná Tablica_dane_linii bude sloužit k ukládání dalších dat pro každé z uživatelsky definovaných oznámení. Nelze vložit další informace do stejné tabulky jako názvy objektů, protože názvy jsou typu šňůraa údaje typu zdvojnásobita jedna tabulka může obsahovat pouze jeden typ dat.

Tablica_dane_linii je dvourozměrná deska, která symbolizuje dvě hranaté závorky [] [4], První rozměr bude použit pro identifikaci, jak je uvedeno v tabulce Tablica_nazwy_liniikterý řádek máme na mysli, a druhý rozměr pro uložení dalších dat 4 pro každé z nastavení oznámení.

Chcete-li nám usnadnit orientaci v prvcích dvojrozměrné tabulky pomocí klíčových slov #define vytvořili jsme seznam předdefinovaných hodnot s, pokud je to vhodné pro zapamatování si jmen. Pod každým názvem uvedeným za klíčovým slovem #define existuje číslo, které jsme si jisti, že bude konstantní.

V následujícím textu použijeme desky v praxi, mezitím se podívejme na následující grafiku, která vysvětluje, jak funguje dvourozměrná tabulka.

rys_6

Aplikační struktura

Naše aplikace bude používat pět, nejznámějších, MQL API funkcí pro zpracování událostí.

OnInit () - příprava algoritmu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int Oninit ()
{
if(IsDemo() == nepravdivý) zpáteční INIT_FAILED;
// Record! Prozkoumejte oblast () je krátká verze
// Prozkoumat Terrain () == false
if(! Invest Area ()) BlurSlady ();
EventSetMillisecondTimer(250);
AgencieRozpocznijMisje (0, 0);
zpáteční INIT_SUCCEEDED;
}
Kód MQL4

Funkce OnInit() začneme tím, že zkontrolujeme, zda hrajeme na správném místě, a pak zda jsou data, která má aplikace správná. Jak je to možné, protože OnInit() je první funkce, kterou program volá, aby algoritmus měl nesprávná data? To se může stát například tehdy, když algoritmus spustíme na grafu jednoho nástroje a pak změníme symbol. V tomto případě budu muset smazat dříve nakreslené čáry a všechna oznámení zrušena. To je to, co funkce řeší ZatrzyjSlady ().

V dalším kroku spustíme Časovač a voláme funkci z knihovny Agent StartMissions (...)jehož úkolem je čerpat naše Asa na grafu.

Ve zdrojovém kódu najdete několik dalších zajímavých funkcí. Pro ty z vás, kteří by chtěli rentgenovat naše Asa od A do Z by interpretace dalších materiálů měla být dobrým tréninkem v navigaci v dokumentaci MQL. Celý kód dnešní aplikace jsem se snažil udržet v rámci diskutovaných otázek, aby byl její výklad co nejjednodušší. Přeji vám plodné učení a protože již znáte mnoho prvků jazyka, bavte se při vytváření prvních, nezávislých řešení!

OnChartEvent (...) - monitorování událostí

1
2
3
4
5
6
7
8
9
10
11
12
zrušit OnChartEvent(const int id const long & lParam const double & dparam,
const řetězec & SPAR)
{
if(id == CHARTEVENT_OBJECT_DRAG || id == CHARTEVENT_OBJECT_CHANGE)
{
if(StringFind(sparam, Line_ID)> = 0) Aktualizovat data (sparam);
}
jinak pokud(id == CHARTEVENT_OBJECT_CLICK)
{
if (sparam == AgentIdentifySame ()) Vytvořit ();
}
}
Kód MQL4

Díky této funkci OnChartEvent(...) sledujeme interakci uživatele s aplikací. V první z nich zkontrolujeme, zda uživatel přetáhl řádek našeho oznámení do grafu (nebo změnil parametry v okně nastavení) a pokud k tomu došlo, aktualizujeme data týkající se našich oznámení ve funkci UpdateData (...)který jako parametr přebírá název uživatelem upraveného řádku. Pomocí názvu přijaté linky vyhledá funkce příslušný řádek v tabulkách a aktualizuje relevantní data, mimo jiné informace o ceně stanovené pro oznámení.

Ve druhé části funkce sledujeme události kliknutí na objekty v grafu našeho algoritmu. Každé kliknutí na obrázek jsme nakreslili Eso inteligence vytvoří nový řádek v grafu. Vytvořené řádky po posunu vyvolají funkci UpdateData (...)který naplánuje konkrétní oznámení v závislosti na umístění linky vzhledem k ceně v době interakce s uživatelem.


odborní poradci


OnTimer () - opakující se aktivity

1
2
3
4
zrušit OnTimer ()
{
SynchronizujDane ();
}
Kód MQL4

Časovač, který se nazývá 4 krát za sekundu, který jsme definovali ve funkci OnInit(), synchronizuje data v rámci našeho algoritmu. Pro úkoly funkce SynchronizujDane () Mezi ně patří kontrola, které řádky již byly odstraněny, a jejich správné barvy v závislosti na tom, zda je oznámení povoleno.

OnTick () - cenové hodinky

Všechny dosud uvedené funkce API MQL API jsou nám známé. Čas na něco nového. funkce onTick() je vyvolána platformou při jakékoli změně ceny nástroje, na kterém algoritmus pracuje. To je základní funkce pro mnoho automatických strategií. Podívejme se na níže uvedený kód.

1
2
3
4
zrušit OnTick ()
{
PoczynWywiad ();
}
Kód MQL4

Funkce onTick() náš As jde do práce a kontroluje, zda cena přístroje dosáhla hodnoty uvedené uživatelem. Půjdeme do funkce PoczynWywiad () o něco dále a nyní analyzujme ještě jednu poslední funkci potřebnou pro zpracování událostí, OnDeinit(...).

OnDeinit (...) - ukončení algoritmu

1
2
3
4
5
6
7
8
9
zrušit OnDeinit(const int důvodem)
{
EventKillTimer();
AgencieByeBye ();
if(důvod! = REASON_CHARTCHANGE && důvod! REASON_PARAMETERS)
ZatrzyjSlady ();
}
Kód MQL4

Zastavíme se na začátku Časovač a vymažeme obrázek našeho agenta a poté pomocí operátora if zkontrolujeme, jaký je důvod pro vyplnění žádosti. V některých případech po volání funkce OnDeinit(...) program se restartuje a spustí algoritmus od začátku, tedy od funkce OnInit(), To je například případ, kdy uživatel změní interval grafu. V této situaci, pokud se nástroj nezměnil, nechceme smazat námi nastavená oznámení. Kontrola příčiny volání funkce OnDeinit(...)nebo parametr důvod, můžeme se rozhodnout, zda smažeme objekty a data, nebo ponecháme oznámení beze změny.

Tabulky v praxi

Podívejme se, jak naše aplikace používá dříve vytvořené tabulky na příkladu funkce Uložit data (...), jehož úkolem je vytvořit nový řádek v tabulkách pro data pro nové oznámení.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool ZapiszDane (šňůra nazwa_linii, zdvojnásobit cena_linii)
{
int number_lin = ArraySize(Tablica_nazwy_linii);
ArrayResize(Array_line_line, number_line, + 1);
ArrayResize(Array_path, číslo řádku + 1);
// Writeumber_number ++ je zkrácená verze number_line = number_line + 1
liczba_linii ++;
Line_name_array [počet_ řádků - 1] = název řádku;
Line_Data_array [počet_ řádků - 1] [DAY_TIME] = 0;
Line_Data_array [počet_ řádků - 1] [SIRY TYPE] = SYGNAL_LONG;
Line_Data_array [počet_ řádků - 1] [STATUS_LINES] = LINE_DIRTY;
Line_Data_array [počet_ řádků - 1] [PRICE_LINE] = price_line;
zpáteční pravdivý;
}
Kód MQL4

V řádku 3 zkontrolujte, kolik položek obsahuje Tablica_nazwy_liniia protože Tablica_nazwy_linii je pole, jednorozměrný počet jeho prvků by měl odpovídat počtu řádků v obou tabulkách. Pak v řádcích 5 a 6 zvyšujeme počet řádků našich tabulek pomocí 1 pomocí API ArrayResize(...), Na konci každé tabulky bude přidán nový řádek.

Proměnnou zvyšujeme liczba_linii o 1, protože jsme do tabulek přidali jeden řádek a pak vyplníme údaje o novém oznámení začínajícím řádkem č. 11, kde přiřazujeme název řádku příslušnému řádku v poli Tablica_nazwy_linii, Nezapomeňte, že řádky (a sloupce) v tabulkách jsou číslovány od nuly, takže pokud chcete například uložit informace pro páté oznámení, musíte použít řádek 4, tedy v hranatých závorkách, za názvem pole počet řádků - 1 jako číslo řádku.

Pro číslování sloupců v tabulce Tablica_nazwy_linii na začátku našeho algoritmu používáme předdefinované hodnoty pomocí klíčových slov #define, Pod názvy hodnot jsou čísla z 0 3, protože tabulka má sloupce 4. Díky použití dvoudimenzionální tabulky můžeme ušetřit 4 další informace pro každé oznámení, mimo jiné cena a typ signálu, který používáte ve funkci Uložit data (...) dáváme počáteční hodnoty.

Eso v akci

Další funkcí, která používá pole v našem algoritmu, je funkce PoczynWywiad ()kde čteme data připravená v tabulkách a interpretujeme je, abychom se rozhodli, zda poslat zprávu uživateli. Podívejme se na kód funkce PoczynWywiad ().

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
zrušit PoczynWywiad ()
{
int i = 0;
int number_lin = ArraySize(Tablica_nazwy_linii);
for(i = 0; a <počet řádků; i ++)
{
if(Array_data_data [i] [STATUS_LINES] == LINE_ACTIVE)
{
if(Array_data_data [i] [SIRY_TYPE] == SYGNAL_LONG)
{
if(Nabídka > = Line_Data_Array [i] [PRICE_LINE])
{
WyslijWiadomosc (i);
Array_data_data [i] [STATUS_LINES] = LINE_ INTERVAL;
}
}
jiný
{
if(Nabídka <= Line_Data_Array [i] [PRICE_LINE])
{
WyslijWiadomosc (i);
Array_data_data [i] [STATUS_LINES] = LINE_ INTERVAL;
}
}
}
}
}

Ve výše uvedené funkci pomocí smyčky for získáme přístup ke každému řádku v tabulce Tablica_dane_linii, To nám umožňuje kontrolovat stav oznámení a typ signálu a na základě přijatých dat ověřit, zda cena Nabídka splňuje podmínku, kterou očekáváme. Když je naše As bude mít pocit, že udržení neznalosti by bylo nevhodné, spěšně nám posílá oznámení pomocí této funkce Poslat zprávu(…), který chytře udává číslo řádku, kde jsou uložena data o požadovaném oznámení. Po odeslání zprávy je oznámení vypnuto a As, vytrvale, pokračuje dál.

Podívejte se na kód vašeho počítače pro danou funkci Poslat zprávu(…)zjistit, jak náš algoritmus využívá funkci MQL API sendNotification(…) Při odesílání oznámení tlačit.

Souhrn

Pokud platforma ještě neučinila, zkompilujte soubor Jako Intelligence.mq4 a otestujte svou novou aplikaci! Chcete-li nakreslit nový řádek, klikněte na pěkný obrázek na grafu.

Ve zdrojovém kódu najdete několik dalších zajímavých funkcí. Pro ty z vás, kteří by chtěli rentgenovat naše Asa od A do Z by interpretace dalších materiálů měla být dobrým tréninkem v navigaci v dokumentaci MQL. Celý kód dnešní aplikace jsem se snažil udržet v rámci diskutovaných otázek, aby byl její výklad co nejjednodušší. Přeji vám plodné učení a protože již znáte mnoho prvků jazyka, bavte se při vytváření prvních, nezávislých řešení!

Co si o tom myslíš?
33%
zajímavý
67%
Heh ...
0%
Š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.