Prax a overovanie

Expert Advisor v MQL5: dáta, udalosti a potvrdené plnenia

Ako EA v MT5 číta správnu sviečku, overuje pripravenosť indikátora a rozlišuje požiadavku od plnenia. Dva diagramy a EUR test evidencie.

Abstraktná redakčná ilustrácia vytvorená AI k téme „Expert Advisor v MQL5: dáta, udalosti a potvrdené plnenia“. Nezobrazuje historické kurzy.
Redakčná ilustrácia vytvorená AI; nejde o snímku platformy ani historický cenový graf.

Forex a CFD s pákou môžu rýchlo viesť k strate. Vzdelávací obsah bez osobného investičného odporúčania.

V tomto článku

Po prečítaní dokážete…

  • Určíte poslednú uzavretú hodnotu v konkrétnom bežnom poli CopyBuffer.
  • Oddelíte pripravenosť indikátora, povolenie programu a potvrdené plnenie.
  • Prepočítate objem, poplatky a EUR zostatok pri opakovaní totožného záznamu.

Vysvetlenie pojmov priamo v článku

Backtest: skúška pravidiel na historických údajoch Obchodný plán Demo účet Pokles od maxima: drawdown Stop loss Requote: nová ponuka ceny

Expert Advisor v MQL5 je program riadený udalosťami v MetaTraderi 5. Vyhodnocuje pravidlá a pri potrebných povoleniach odosiela obchodné požiadavky. Spracovanie udalosti, povolenie obchodovať a odpoveď servera však ešte nepotvrdzujú uskutočnený obchod. Pripojenie robota ku grafu nepreukazuje jeho správnosť ani výnosnosť.

Čo je Expert Advisor v MQL5?

MetaEditor preloží zdrojový súbor MQ5 na spustiteľný EX5. Autor môže distribuovať EX5 bez zdrojového kódu. Znalosť MQL5 preto neodhalí utajený algoritmus kúpeného programu. EA môže pri splnených povoleniach odosielať obchodné požiadavky. Indikátor môže počítať aj upozorňovať, má však iné udalosti a obchodné funkcie v ňom nie sú povolené. Ani opis „indikátor iba kreslí“ nie je presný.

Tu ide o prostredie MT5. Názov Expert Advisor sa používa aj v MT4, ktoré má vlastný jazyk MQL4 a rozhrania. Iné systémy automatizácie môžu používať ďalšie rozhrania. Porovnajte EA v MT4 a MT5 a prvé kroky algoritmického obchodovania.

Index nula nemusí obsahovať poslednú uzavretú sviečku

Predpokladajme úspešné CopyBuffer so start_pos=1 a count=3 do bežného poľa bez AS_SERIES. Vybrali sme tri uzavreté sviečky. Najstarší kopírovaný prvok je vo fyzickej pamäti prvý.

Fyzické poradie troch hodnôt CopyBufferBežné pole bez AS_SERIES dostane všetky tri prvky od posunu 1. V pamäti je posun 3=103, posun 2=101, posun 1=102. Posledná uzavretá hodnota je na indexe 2. Starších 103 je nad 102,5, posledných 102 nie.BEŽNÉ POLE: NAJSTARŠIE PRVÉCopyBuffer: start_pos = 1, count = 3index 0shift 3103index 1shift 2101index 2shift 1102staršieuzavretéTest > 102,5: 103 vyhovuje, 102 nie.Posun 0 sa nekopíroval.

Vymyslené hodnoty indikátora 103, 101, 102; funkcia vrátila presne 3 prvky, bez chyby či čiastočného výsledku. Posuny sú 3, 2, 1. Hranica 102,5 je test výberu dát, nie obchodný signál.

Starších 103 na indexe 0 vyhovie porovnaniu >102,5, posledných uzavretých 102 na indexe 2 nevyhovie. Posun 0 vôbec nebol vyžiadaný.

Na malej obrazovke posúvajte diagram vodorovne alebo ho zväčšite. Vysvetlenie nájdete aj v texte.

Do testovacieho záznamu patrí začiatok výberu, skutočne vrátený počet aj indexovanie cieľového poľa. Úplný počet neodhalí nesprávne vybranú sviečku. Index 2 platí pre tento konkrétny výber a obyčajné pole; neprenášajte ho automaticky na iné nastavenia.

Životný cyklus: OnInit, OnTick a OnDeinit

OnInit obsluhuje inicializáciu programu. Overte potrebné zdroje a pri neuskutočniteľnom nastavení vráťte zodpovedajúce zlyhanie. Inicializácia je udalosť životného cyklu, nie sľub jediného zavolania počas celého používania. Napríklad zmena vstupov môže vyvolať opätovnú inicializáciu.

OnTick obsluhuje NewTick pre symbol grafu, ku ktorému je EA pripojený. Ak už taká udalosť čaká vo fronte alebo sa spracúva, ďalšia sa nepridá. EA môže používať aj iné udalosti a nemusí OnTick implementovať. Vypnutie AutoTrading zakáže nové obchodné požiadavky; nezastaví výpočty programu ani nepreruší práve vykonávanú obsluhu.

OnDeinit obsluhuje ukončenie s uvedeným dôvodom, vrátane odstránenia, zatvorenia terminálu alebo zmeny vyžadujúcej opätovnú inicializáciu. Výslovne riešte uvoľnenie zdrojov aj uchovaný stav. OnTimer a OnTradeTransaction môžu byť pre úlohu rovnako podstatné. Pri viacerých symboloch tik hlavného grafu nepotvrdzuje aktuálnosť pozorovaní všetkých ostatných.

Požiadavka, plnenie a trieda CTrade

OrderSend odošle požiadavku. Návrat true sám nepotvrdzuje naplnenie trhového obchodu. Skontrolujte kód odpovede a porovnajte objednávky, uskutočnené plnenia a pozície. OrderCheck je predbežná kontrola, nie záruka následného vykonania. V hypotetickom poruchovom teste EA požiada o nákup 0,10 lotu, ale nemá istotu o odpovedi. Slepé zopakovanie môže pri naplnení oboch požiadaviek vytvoriť 0,20 lotu. Chýbajúce miestne potvrdenie nedokazuje nečinnosť servera.

OnTradeTransaction rozlišuje odstránenie objednávky zo zoznamu aktívnych od pridania plnenia do histórie. Priorita doručenia oznámení nie je zaručená. Pôvodný model nemá počiatočnú pozíciu a má dve potvrdené nákupné plnenia D1=0,04 a D2=0,06 lotu. Chybný počítadlový stav vynulovaný pri ORDER_DELETE skončí pri poradí D1, D2, ORDER_DELETE na nule; pri ORDER_DELETE, D1, D2 na 0,10. Potvrdený nákupný súčet je v oboch prípadoch 0,10. Stav objednávky a expozícia sú odlišné údaje. Skutočná evidencia musí riešiť aj predaje, obrátenia pozície, opravy histórie a režim účtu.

CTrade poskytuje napríklad Buy, Sell a PositionClose. Úspešná kontrola metódy Buy nemusí znamenať úspešný obchod: overte ResultRetcode a ResultDeal. Rozdiel medzi požadovanou a vykonanou cenou vysvetľuje cenový sklz.

Nový EUR model: opakovanie záznamu nie je tretie plnenie

Oddelený hypotetický test evidencie začína na 1 000 EUR bez pozícií. Jediný nákup EUR/USD má kontrakt 100 000 EUR na lot a dve skutočné plnenia: D1=0,04 a D2=0,06 lotu, obe za Ask 1,1000. Poplatky sú 0,40 a 0,60 EUR. Celých 0,10 lotu sa neskôr uzavrie za Bid 1,1020 s poplatkom 1 EUR. Všetky USD výsledky prevádzame pevným modelovým kurzom 0,90 EUR/USD.

Vlastný testovací prehrávač zámerne odovzdá záznamy D1, D2, D2. Nejde o tvrdenie, že MT5 vždy doručuje duplicitné udalosti; opakuje sa náš uložený záznam. Evidencia rozpoznávajúca totožné ID v tom istom účte zaúčtuje dve plnenia: 0,10 lotu = 10 000 EUR, vstupný poplatok 1 EUR. Slepé sčítanie troch riadkov vymyslí 0,16 lotu a 1,60 EUR nákladov. Porovnajte uložené údaje s aktuálnou históriou servera; neskoršia oprava existujúceho plnenia si vyžaduje aktualizáciu, nie večné ignorovanie ID.

Skutočný cenový výsledok je (1,1020 − 1,1000) × 10000 = 20 USD, teda 18 EUR. Po všetkých modelových poplatkoch 0,40 + 0,60 + 1 = 2 EUR zostáva 16 EUR a konečný zostatok 1 016 EUR, bez otvoreného objemu. Nákupný nominál nie je výber 10 000 EUR z CFD peňažného účtu. Spread je zahrnutý vo vykonaných cenách. Predpokladáme dostatočnú maržu, žiadnu skoršiu likvidáciu, ďalšie pozície, toky, financovanie, sklz ani ďalší poplatok či spread prepočtu. Výsledok je účtovný kontrolný príklad, nie výkon robota.

Dve plnenia, tri prehraté záznamyHypotetický EUR účet a náš vlastný opakovaný záznam D2. Skutočné plnenia majú nemenné ID a nie sú opravené.MODELOVÝ VÝPOČETSkutočné D1 a D20,04 + 0,06 = 0,10 lotuChybný súčet D1, D2, D20,16 lotu / 1,60 EURÚplné uzavretie skutočných 0,10lotu+18 − 2 = +16 EUR
Dve plnenia, tri prehraté záznamy. Hypotetický EUR účet a náš vlastný opakovaný záznam D2. Skutočné plnenia majú nemenné ID a nie sú opravené.

Počet riadkov v lokálnom prehrávaní nie je počet vykonaných plnení. Overte identitu, aktuálne údaje a históriu; opravy plnenia riešte aktualizáciou.

Na malej obrazovke možno diagram posúvať vodorovne alebo zväčšiť. Hodnoty a záver nájdete aj nižšie v texte.

Skutočné D1 a D2
0,04 + 0,06 = 0,10 lotu – 10 000 EUR kontraktu; vstupné poplatky spolu 1 EUR.
Chybný súčet D1, D2, D2
0,16 lotu / 1,60 EUR – Vymyslený objem aj opakovaný poplatok; nie skutočná tretia exekúcia.
Úplné uzavretie skutočných 0,10 lotu
+18 − 2 = +16 EUR – Konečný zostatok 1 016 EUR; otvorený objem nula.

Tester: overovanie pravidiel a prispôsobenia histórii

Strategy Tester MT5 dokáže skúmať historické dáta s generovanými tikmi alebo reálnymi tikmi zozbieranými brokerom podľa režimu a dostupnosti. Uložte pôvod dát, časovanie, kontrakt a náklady. Reálne tiky nepredpokladajte z jednej univerzálnej cenovej databázy MetaQuotes. Simulované oneskorenie nie je meranie všetkých budúcich skutočných plnení.

Hľadanie parametrov na tej istej histórii, ktorú potom vydáte za hodnotenie, môže nadhodnotiť dôkazy. Matematicky nezaručuje ani hladkú krivku, ani živé zlyhanie. Oddeľte nedotknuté hodnotiace obdobie a zachovajte záznam všetkých skúšaných variantov. Postup rozoberá backtest stratégie.

Kedy EA pomáha a kedy zvyšuje problém?

EA vie opakovateľne vykonávať kontroly a sledovať vybrané nástroje. Dvesto obchodov mesačne, nočná prevádzka ani rýchlosť rozhodovania nepreukazujú výhodu. Najprv určte informácie, udalosti a podmienky zákazu vstupu. Nezvyčajné zverejnenia vyžadujú testovanie a dohľad; samy osebe nevylučujú každú automatizáciu. Graf predajcu ani neidentifikovaný prieskum na fóre nie sú spoľahlivým odhadom budúceho výsledku.

Má zmysel napísať si vlastný EA?

Malý projekt ukáže, či sa presné pravidlá vykonávajú správne. Rozpočet učenia prispôsobte zručnostiam a rozsahu. Tri až šesť mesiacov ani vlastný vývoj namiesto nákupu negarantujú lepší výsledok. Rozlišujte chybu implementácie od nevýhodného obchodného pravidla: robot môže presne a opakovane uskutočňovať zlý nápad.

Bezobslužná prevádzka potrebuje infraštruktúru, povolenia a obnovu. Miestne AutoTrading nezatvorí pozície. Bežný stop prijatý serverom môže zostať aktívny po zatvorení terminálu; výstup vykonávaný iba EA vyžaduje bežiaci program a spojenie. MetaQuotes Virtual Hosting je samostatné migrované prostredie, kde je automatické obchodovanie povolené. Miestne tlačidlo vzdialenú inštanciu nezastaví. Windows VPS je iná služba. Pozrite VPS a latenciu.

Preberacie testy musia zahŕňať chýbajúce dáta indikátora, reštart, neplatný krok objemu, neistú odpoveď aj ručný zásah do pozície. Pred obnovením zistite aktuálnu expozíciu, nespoliehajte sa na starý signál v pamäti. Pri nettingu stratégie na rovnakom symbole zdieľajú jednu čistú pozíciu. Magic Number nevytvára oddelený kapitál či maržu.

Handle existuje. Je hodnota indikátora pripravená?

Vytvorený handle nepotvrdzuje výpočet potrebnej sviečky. BarsCalculated vracia počet vypočítaných dát alebo −1 pri chybe. Potom overte skutočný počet z CopyBuffer, správny buffer aj posun sviečky. Zlyhanie čítania nenahrádzajte nulou: nula RSI by vyjadrovala krajný stav, nie nedostupnosť informácie.

Štyri kontroly pripravenosti

Handle existuje. Je hodnota pripravená?Štyri oddelené kontroly: handle, vypočítané dáta, počet skopírovaných prvkov a použiteľná hodnota.Handlenie INVALIDVypočítané dátapotrebná sviečkaCopyBufferočakávaný početHodnotaplatná, nie prázdna
Musí vyhovieť každá kontrola. Existujúci handle nie je použiteľná hodnota.

Na malej obrazovke posúvajte diagram vodorovne alebo ho zväčšite. Vysvetlenie nájdete aj v texte.

Model potrebuje jeden prvok: A neplatný handle — nečítame; B handle existuje, ale skopírovaných je 0 prvkov — čakáme; C jeden skopírovaný prvok je EMPTY_VALUE — použiteľný signál chýba; D jeden platný prvok má hodnotu 45 — pravidlo možno vyhodnotiť. Číslo 45 je vymyslená hodnota, nie investičný pokyn.

Predvolené EMPTY_VALUE je DBL_MAX, konečné číslo. Samotná kontrola konečnosti preto nestačí. Vlastný indikátor môže určiť inú značku prázdnej hodnoty. Dodržte jeho rozhranie; neodmietajte paušálne každú nulu. Chýbajúca história, prázdna značka a použiteľné číslo sú tri rôzne stavy.

Cvičenie: handle aj jeden skopírovaný prvok existujú, ale je to EMPTY_VALUE. Čo ďalej?

Nevyhodnocujte prah stratégie. Overte buffer, sviečku a značku prázdnej hodnoty, zaznamenajte nedostupnosť a zopakujte čítanie pri vhodnej ďalšej udalosti. Nevymýšľajte nulové pozorovanie.

Údaje z API majú samostatné podmienky dostupnosti: prehrávanie informácií v offline teste. Pravidlá závislé od grafu majú ďalšie obmedzenia: rozdiely vizuálneho testovania.

Čo spraviť pri prvom pokuse?

  1. Stiahnite MT5 z overenej stránky svojho brokera a otvorte demo. V testeri skúste jeden priechod vzorového Moving Average alebo MACD Sample na EUR/USD H1. Prečítajte report, equity krivku, pokles a profit factor; vzor nie je odporúčanie stratégie.
  2. V oficiálnej dokumentácii prejdite OnInit, OnTick a CTrade. Prvý cieľ je orientácia v rozhraní, nie kopírovanie neovereného robota na živý účet.
  3. Spíšte vstupy, vstup do obchodu, výstup, objem a zákazy obchodovania do plánu. Označte diskrečné rozhodnutia; kontextové pravidlo možno formalizovať, ak určíte jeho údaje a podmienky. Pomôže kontrolný zoznam setupu.
  4. Zvoľte malý projekt s preberacími testmi dát, udalostí a odpovedí. Uložte aj log porúch a spôsob obnovy.
  5. Prevádzkový postup overte na deme. Mesiac je iba ilustrácia, nie automaticky dostatočná vzorka; demo a živé vykonanie sa môžu líšiť. Pred zapnutím vždy overte, ktoré miestne a vzdialené inštancie skutočne bežia.

Overte si, čo ste sa naučili

Cvičenie: približne 2 minúty.

Úspešné CopyBuffer od posunu 1 vráti [103,101,102] do bežného poľa bez AS_SERIES. Ktorá hodnota patrí poslednej uzavretej sviečke?

Zobraziť odpoveď a vysvetlenie

Fyzická pamäť začína najstarším kopírovaným prvkom. Posledný index 2 tohto bežného poľa preto drží posun 1.

Ďalšie otázky

Ako sa MQL5 EA líši od robota v Pythone?

MQL5 EA používa udalosti, dáta a obchodné funkcie MT5. Python môže používať API poskytovateľa aj integráciu MetaQuotes s terminálom; nemusí ísť o REST/FIX mimo MT5. Porovnajte konkrétne závislosti, udalosti, dostupnosť dát, odpovede a testovanie. Žiadny jazyk univerzálne nevyhráva v strojovom učení, kvalite stratégie či vykonaní.

Musím vedieť programovať, aby som používal EA?

Zdokumentovaný EX5 možno používať bez písania MQL5, no treba overiť vstupy, povolenia, logy, limity a obnovu. Zdrojový kód umožňuje kontrolu implementácie; znalosť jazyka neodhalí utajený algoritmus EX5. Niekoľko týždňov učenia nie je všeobecná záruka dostatočnej kontroly. Správanie overujte na vhodnom kontrolovanom účte.

Prečo je tester výborný, ale živý výsledok stratový?

Možné rozdiely sú parametre, dáta, spread, poplatky, časovanie a vykonanie. Vybrať najlepší výsledok po skúšaní tej istej histórie môže nadhodnotiť dôkazy; nie je to matematická záruka dobrého backtestu ani živého zlyhania. Uchovajte všetky varianty a oddeľte vývoj od hodnotenia pri zhodnom kontrakte a nákladoch. Ani jedno úspešné hodnotenie nedokazuje budúcu trvácnosť.

Je pre EA nevyhnutný VPS?

Vyberte infraštruktúru podľa potrebnej dostupnosti, dát a cesty vykonania. VPS môže pomôcť kontinuitou alebo časťou siete, názov však negarantuje latenciu, plnenie ani pevnú cenu. Aj nízka frekvencia môže vyžadovať bezobslužný dohľad. Windows VPS odlíšte od MetaQuotes Virtual Hosting: miestne AutoTrading neovláda osobitne migrovaného vzdialeného robota. Skontrolujte aktuálne podmienky služby.

Zdroje a overenie

  1. MQL5 — OnTick

    NewTick iba pre pripojený symbol, spájanie udalostí vo fronte, pokračovanie programu po vypnutí AutoTrading; dokumentácia API, nie test konkrétneho EA.

  2. MQL5 — CopyBuffer

    Posun 0 je aktuálna sviečka; najstarší vybraný prvok je prvý vo fyzickej pamäti. Vrátený počet a čiastočná pripravenosť dát.

  3. MQL5 — OrderSend

    True nie je potvrdenie plnenia; odpoveď servera, retcode a predbežné OrderCheck.

  4. MQL5 — OnTradeTransaction

    Rozdiel ORDER_DELETE/DEAL_ADD a nezaručená priorita doručenia; nie tvrdenie o povinných duplicitách.

  5. MQL5 — BarsCalculated

    Počet vypočítaných hodnôt alebo −1; dostupný handle ešte neznamená hotové dáta.

  6. MQL5 — Other Constants

    EMPTY_VALUE=DBL_MAX, INVALID_HANDLE=−1, možná vlastná značka PLOT_EMPTY_VALUE.

  7. MetaTrader 5 — Migration

    MetaQuotes Virtual Hosting, oddelené vzdialené prostredie a povolené automatické obchodovanie; odlišné od Windows VPS.

  8. MQL5 — CTrade Buy

    Úspešná kontrola Buy nie je plnenie; ResultRetcode a ResultDeal.

  9. MetaTrader 5 — Strategy Testing

    Testovanie/optimalizácia, oddelenie forward časti, režimy tikov, brokerom zozbierané tiky a emulované oneskorenie. Nie záruka živých výsledkov.

  10. MQL5 — Deal Properties

    Jedinečný deal ticket, objem, cena, provízia, výsledok a opravy. Náš EUR prehrávač je samostatný hypotetický model.

  11. MQL5 — OnInit a OnDeinit

    Inicializačný návratový stav a zlyhanie; životný cyklus dopĺňa samostatná dokumentácia OnDeinit.

  12. MQL5 — OnDeinit

    Dôvody ukončenia a opätovnej inicializácie po zmene vstupov, symbolu alebo obdobia.

  13. MQL5 — Trade Permission

    Obchodné funkcie pre EA a skripty, zákaz pre indikátory; potrebné povolenia terminálu.

Výpočty používajú výslovne uvedené predpoklady. Nenahrádzajú aktuálne trhové údaje ani podmienky poskytovateľa.

O autorovi

Jarosław Wasiński je vydavateľ a trhový analytik v Poľsku. V roku 2004 založil MyBank.pl a devízový trh sleduje od roku 2007.