MQL prakticky. Ace of Intelligence alebo upozornenia v telefóne [kurz programovania]
Vitajte späť pri štvrtej časti nášho praktického kurzu programovania. Dnes sa budeme zaoberať záležitosťami značného významu, budeme tvoriť Eso inteligenciektorý sa v našej neprítomnosti bude zaoberať spravodajskou činnosťou zameranou na zmeny cien na burze. Keď sa veci dajú do poriadku, naše As okamžite nám pošle tajnú (nie naozaj) správu na náš mobilný telefón, čo nám umožní vziať veci do vlastných rúk.
Nezabudnite si prečítať: MQL prakticky. Panic Button, časť II
Naša aplikácia vám umožní definovať cenové hladiny, pri ktorých dostaneme upozornenie tlačiť na našom telefóne. Úrovne nastavíme potiahnutím myšou za farebné čiary, ktoré sa vykreslia po kliknutí na obrázok nakreslený v grafe. Eso inteligencie. Začnime teda, aké sú tieto upozornenia a ako nakonfigurovať naše zariadenia, aby bolo všetko v poriadku.
oznámenia tlačiť
oznámenia tlačiť sú funkciou platformy Meta Trader, ktorá vám umožňuje odosielať správy z terminálu do zariadenia so systémom iOS alebo Android, ktoré má nainštalovanú mobilnú aplikáciu Meta Trader. Ak aplikáciu ešte nemáte vo svojom mobilnom telefóne, stiahnite si ju, pretože bez nej je naša As nebude sa mu dariť veľmi dobre.
Nastavenie zariadenia je veľmi rýchle. Prvým krokom je poznať tú svoju Identifikátor MetaQuotes, teda číslo, s ktorým budeme smerovať správy na príslušný telefón (alebo chladničku so systémom android). číslo Identifikátor MetaQuotes v mobilnej aplikácii v menu Nastavenia / Chat a Správypresne ako na obrázku nižšie.
Prečítajte si číslo Identifikátor MetaQuotes musíte potom zadať v programe MetaTarder na vašom počítači v menu Nástroje / Možnosti / Upozornenia.
Pripravte sa!
Technické zázemie
Najprv si stiahnite balíček nižšie a nainštalujte zdrojový kód dnešnej aplikácie, t.j Ace of Intelligence.mq4 V katalógu MQL4 \ Experti \ .
Náš program bude mať aj malé grafické rozhranie umiestnené v knižnici grafické_prvky.ex4ktorý skopírujete do adresára MQL4 \ Knižnice \ Ako Wywiadu \ .
Odlietame
Po otvorení súboru Ace of Intelligence.mq4v hornej časti uvidíte útržok kódu nižšie.
Kód začneme importom knižnice a následne pomocou vstupných kľúčových slov vytvoríme parametre pre konfiguráciu v okne nastavení. Nastavenia nám umožnia definovať vzhľad riadkov, pomocou ktorých budeme nastavovať cenu za naše upozornenia.
Globálne premenné
Pod definíciami typov vstup vidíme niečo nové, deklarácie premenných InstrumentName oraz Line_IDktoré sú mimo obsahu akejkoľvek funkcie. Čo to znamená? Takto definujeme globálne premenné, ktoré budú dostupné všade v našom kóde, t.j. každá funkcia algoritmu ich bude vedieť prečítať a priradiť im hodnotu. Z premenných deklarovaných ako vstup jediný rozdiel je v tom, že používateľ k nim nemá prístup v okne nastavení.
Tabuľky
Pri písaní softvéru je veľmi často potrebné narábať s takým množstvom údajov, že vytvorenie samostatnej premennej pre každú z nich by bolo prinajmenšom problematické. Na pomoc prichádzajú polia, ktoré vám umožňujú vytvoriť usporiadanú množinu údajov daného typu, napr. zdvojnásobiť, dostupné pod jedným názvom, ktorý sme založili. Pre každé pole môžeme (nemusíme) definovať jeho veľkosť, teda koľko kusov dát daného typu v ňom bude. Pozrime sa na útržok kódu nižšie.
Jednorozmerné polia
Vo vyššie uvedenom kóde sme na riadkoch 1 a 2 vytvorili dve polia. Line_name_array použijeme ho na uloženie názvov objektov, ktoré budeme kresliť do grafu. Každý riadok bude predstavovať jednu, užívateľom nastavenú, notifikáciu, a keďže naša aplikácia umožní nastaviť ľubovoľný počet notifikácií, vznikla potreba použiť nástenky.
Line_name_array je jednorozmerné pole, ako je znázornené jedným párom hranatých zátvoriek []. V hranatých zátvorkách môžeme zadať počet kusov údajov, ktoré chceme dať do tabuľky, ale v našom prípade nevieme, koľko riadkov bude na grafe, pretože to závisí od používateľa, takže zátvorku necháme prázdnu , čo znamená, že tabuľu budeme dynamicky určovať a meniť jej veľkosť podľa potreby. Pozrime sa na obrázok nižšie, ktorý popisuje, ako fungujú jednorozmerné polia.
Viacrozmerné polia
Druhé pole s názvom Line_Data_Array použijeme ho na ukladanie ďalších údajov pre každé z upozornení, ktoré definujete. Do rovnakého poľa ako názvy objektov nemôžeme umiestniť ďalšie informácie, pretože názvy sú typu reťazeca dátový typ zdvojnásobiťa jedno pole môže obsahovať iba jeden typ údajov.
Line_Data_Array je pole dvoch rozmerov, ktoré je symbolizované dvoma hranatými zátvorkami [] [4]. Na identifikáciu sa použije prvý rozmer, ako je uvedené v tabuľke Line_name_arrayktorý riadok máme na mysli a druhý rozmer na uloženie 4 ďalších údajov pre každé z upozornení, ktoré nastavíte.
Aby nám uľahčili navigáciu v prvkoch dvojrozmerného poľa pomocou kľúčových slov # definovať vytvorili sme zoznam preddefinovaných hodnôt s názvami, ktoré sa dajú primerane zapamätať. Pod každým z mien uvedených za kľúčovým slovom # definovať existuje číslo, o ktorom sme si istí, že bude konštantné.
Ďalej budeme používať polia v praxi, zatiaľ sa pozrime na grafiku nižšie, ktorá vysvetľuje, ako funguje dvojrozmerné pole.
Štruktúra aplikácie
Naša aplikácia bude využívať päť, nám väčšinou známych, MQL API funkcií na spracovanie udalostí.
OnInit () - príprava algoritmu
Vo funkcii onInit() začneme tým, že skontrolujeme, či hráme na správnom mieste, a potom, či sú údaje, ktoré aplikácia má, správne. Ako je to možné, od r onInit() je prvá funkcia volaná programom, ktorá má neplatné údaje pre algoritmus? To sa môže stať napríklad vtedy, keď spustíme algoritmus na grafe jedného nástroja a potom zmeníme symbol. V tomto prípade budú musieť byť predtým nakreslené čiary vymazané a všetky upozornenia zrušené. Toto robí funkcia Vymazať stopy ().
V ďalšom kroku začíname časomerač a zavolajte funkciu z knižnice AgentGet StartMissions (...)ktorých úlohou je nakresliť naše Asa na grafe.
V zdrojovom kóde nájdete niekoľko ďalších zaujímavých funkcií. Pre tých z vás, ktorí by chceli röntgenovať naše Asa od A po Z výklad doplnkových materiálov by mal byť dobrým tréningom orientácie v jazykovej dokumentácii MQL. Celý kód dnešnej aplikácie som sa snažil ponechať v rámci diskutovanej problematiky, aby jej interpretácia bola čo najjednoduchšia. Prajem vám úspešné učenie a keďže už ovládate mnohé prvky jazyka, bavte sa pri vytváraní vašich prvých samostatných riešení!
OnChartEvent (...) - sledovanie udalostí
Vďaka funkcii OnChartEvent(...) sledujeme interakciu používateľa s aplikáciou. V prvom, ak skontrolujeme, či používateľ pretiahol riadok našej notifikácie na graf (alebo zmenil jej parametre v okne nastavení) a ak áno, aktualizujeme údaje o našich notifikáciách vo funkcii Aktualizovať údaje (...)ktorý berie ako parameter názov užívateľom upravenej linky. Pomocou prijatého názvu riadku funkcia vyhľadá príslušný riadok v tabuľkách a aktualizuje príslušné údaje, napr. informácie o cene dohodnutej na oznámenie.
V druhej časti funkcie sledujeme udalosti klikania na objekty na grafe nášho algoritmu. Každé kliknutie na nami nakreslenú postavu Eso inteligencie vytvorí novú čiaru v grafe. Vytvorené čiary po presunutí spustia funkciu Aktualizovať údaje (...)ktorý naplánuje konkrétne upozornenie v závislosti od polohy linky vzhľadom na cenu v čase interakcie s používateľom.
OnTimer () - opakujúce sa aktivity
Časovač, ktorý sa volá 4-krát za sekundu, ako je definované vo funkcii onInit(), synchronizuje údaje v rámci nášho algoritmu. K úlohe funkcie SyncData () vrátane kontroly, ktoré riadky už boli odstránené, a pridelenia im vhodnej farby v závislosti od toho, či je dané upozornenie povolené alebo nie.
OnTick () - pozorovanie cien
Všetky doteraz spomenuté funkcie MQL API nám boli známe. Čas na niečo nové. Funkcia onTick() volá ho platforma vždy, keď sa zmení cena nástroja, na ktorom algoritmus funguje. Toto je základná vlastnosť mnohých automatizovaných stratégií. Pozrime sa na kód nižšie.
Vo funkcii onTick() náš As začne pracovať a skontroluje, či cena nástroja dosiahla hodnotu uvedenú používateľom. Prejdeme k funkciám rozhovor () trochu ďalej a teraz analyzujme ešte jednu, poslednú funkciu, ktorú potrebujeme na spracovanie udalostí, onDeinit(...).
OnDeinit (...) - ukončenie algoritmu
Na začiatok sa zastavíme časomerač a vymažte nakreslený obrázok nášho agenta a potom pomocou operátora if skontrolujeme, aký je dôvod ukončenia aplikácie. V niektorých prípadoch po volaní funkcie onDeinit(...) program sa znova zapne a spustí svoj algoritmus od začiatku, teda od funkcie onInit(). Stáva sa to napríklad vtedy, keď používateľ zmení interval grafu. V takejto situácii, ak sa nástroj nezmenil, nechceme vymazať nami nastavené upozornenia. Skontrolovaním dôvodu volania funkcie onDeinit(...), čo je parameter dôvod, môžeme sa rozhodnúť, či vymažeme objekty a dáta alebo ponecháme nastavené upozornenia nezmenené.
Polia v praxi
Pozrime sa, ako naša aplikácia využíva predtým vytvorené polia na príklade funkcií Uložiť dáta (...)ktorého úlohou je vytvoriť nový riadok pre údaje v poliach pre novú notifikáciu.
V riadku 3 skontrolujeme, koľko prvkov obsahuje Line_name_arraya preto Line_name_array je jednorozmerné pole, počet jeho prvkov by sa mal zhodovať s počtom riadkov v oboch poliach. Potom v riadkoch 5 a 6 zväčšíme počet riadkov našich tabuliek o 1 pomocou funkcie API ArrayResize(...). Na koniec každého poľa sa pridá nový riadok.
Zvyšujeme premennú počet riadkov o 1, pretože sme do tabuliek pridali jeden riadok a následne doplníme údaje o novom upozornení počnúc riadkom 11, kde k príslušnému riadku v tabuľke priradíme názov riadku. Line_name_array. Pamätajte, že riadky (a stĺpce) v tabuľkách sú číslované od nuly, takže ak chceme napríklad napísať informáciu pre piate oznámenie, musíme použiť riadok 4, teda v hranatých zátvorkách za názvom tabuľky pozri počet riadkov - 1 ako číslo riadku.
Na číslovanie stĺpcov v poli Line_name_array používame preddefinované hodnoty na začiatku nášho algoritmu pomocou kľúčových slov # definovať. Pod názvami hodnôt sú čísla od 0 do 3, pretože pole má 4 stĺpce. Vďaka použitiu dvojrozmerného poľa môžeme ku každej notifikácii uložiť 4 dodatočné informácie, napr. cena a typ signálu, v ktorom fungujú Uložiť dáta (...) uvádzame počiatočné hodnoty.
Eso v akcii
Ďalšou funkciou, ktorá v našom algoritme používa polia, je funkcia rozhovor ()kde čítame dáta pripravené v poliach a interpretujeme ich, aby sme sa rozhodli, či sa má používateľovi poslať správa. Pozrime sa na kód funkcie rozhovor ().
Vo vyššie uvedenej funkcii pomocou slučky pre pristupujeme ku každému riadku v poli Line_Data_Array. To nám umožňuje skontrolovať stav upozornenia a typ signálu a na základe prijatých údajov overiť, či cena Ponuka spĺňa nami očakávanú podmienku. Keď náš As sa rozhodne, že by bolo nerozumné držať nás v tme, urýchlene nám poslať upozornenie pomocou tejto funkcie Poslať správu(…)ktorý šikovne udáva číslo riadku, kde je uložená informácia o potrebnej notifikácii. Po odoslaní správy sa notifikácia vypne a As, vytrvalý, pokračuje ďalej.
Pozrite sa na kód funkcie vo svojom počítači Poslať správu(…)aby ste videli, ako náš algoritmus používa funkciu MQL API SendNotification(…) Pri odosielaní upozornení tlačiť.
Sčítanie
Ak to platforma ešte neurobila za vás, skompilujte súbor Ace of Intelligence.mq4 a otestujte svoju novú aplikáciu! Ak chcete nakresliť novú čiaru, stačí kliknúť na pekný obrázok v grafe.
V zdrojovom kóde nájdete niekoľko ďalších zaujímavých funkcií. Pre tých z vás, ktorí by chceli röntgenovať naše Asa od A po Z výklad doplnkových materiálov by mal byť dobrým tréningom orientácie v jazykovej dokumentácii MQL. Celý kód dnešnej aplikácie som sa snažil ponechať v rámci diskutovanej problematiky, aby jej interpretácia bola čo najjednoduchšia. Prajem vám úspešné učenie a keďže už ovládate mnohé prvky jazyka, bavte sa pri vytváraní vašich prvých samostatných riešení!