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 cenyExpert 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ý.
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.
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.
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
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?
- 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.
- 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.
- 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.
- Zvoľte malý projekt s preberacími testmi dát, udalostí a odpovedí. Uložte aj log porúch a spôsob obnovy.
- 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.
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
- 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.
- 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.
- MQL5 — OrderSend
True nie je potvrdenie plnenia; odpoveď servera, retcode a predbežné OrderCheck.
- MQL5 — OnTradeTransaction
Rozdiel ORDER_DELETE/DEAL_ADD a nezaručená priorita doručenia; nie tvrdenie o povinných duplicitách.
- MQL5 — BarsCalculated
Počet vypočítaných hodnôt alebo −1; dostupný handle ešte neznamená hotové dáta.
- MQL5 — Other Constants
EMPTY_VALUE=DBL_MAX, INVALID_HANDLE=−1, možná vlastná značka PLOT_EMPTY_VALUE.
- MetaTrader 5 — Migration
MetaQuotes Virtual Hosting, oddelené vzdialené prostredie a povolené automatické obchodovanie; odlišné od Windows VPS.
- MQL5 — CTrade Buy
Úspešná kontrola Buy nie je plnenie; ResultRetcode a ResultDeal.
- 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.
- MQL5 — Deal Properties
Jedinečný deal ticket, objem, cena, provízia, výsledok a opravy. Náš EUR prehrávač je samostatný hypotetický model.
- MQL5 — OnInit a OnDeinit
Inicializačný návratový stav a zlyhanie; životný cyklus dopĺňa samostatná dokumentácia OnDeinit.
- MQL5 — OnDeinit
Dôvody ukončenia a opätovnej inicializácie po zmene vstupov, symbolu alebo obdobia.
- 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.
