V tomto článku
Po prečítaní dokážete…
- Oddeliť obmedzenie grafických objektov MT5 od vlastného modelového null.
- Zaznamenať režim a prvé odlišné štádium bez poslania pokynu.
- V novom EUR príklade vysvetliť, prečo zhoda peňazí neoverí dostupnosť vstupu.
Vysvetlenie pojmov priamo v článku
Expert Advisor (EA) Backtest: skúška pravidiel na historických údajochEA, ktorý funguje len vo vizuálnom teste MT5, potrebuje kontrolu závislosti rozhodnutia od dát alebo od kresby v grafe. Grafický objekt nemá nahradiť explicitnú signálnu hodnotu. Pred zmenou stratégie porovnajte prostredia a prvý rozdiel v záznamoch. Nasledujúci vlastný model nespúšťa MT5; chýbajúci údaj nemení na nulu a neposiela obchodný pokyn.
Čo sa skutočne líši pri vizualizácii?
Dokumentácia MQL5 uvádza, že mimo vizuálneho testovania sa grafické objekty nekreslia a požiadavky na ich vlastnosti dávajú nulové hodnoty. Výnimka platí pre vizuálny režim. Ide o zdokumentovanú vlastnosť platformy, nie experiment s vaším EA alebo príčinu každého rozdielu medzi testmi.
Ak program používa cenu čiary alebo stav tlačidla ako vstup, zaznamenajte tento krok oddelene od indikátora a cenových dát. Najprv zistite, či sa údaj v danom režime dá získať. Explicitná nedostupnosť môže zastaviť výpočet pred prijatím technickej nuly za cenu. Viditeľný graf nepotvrdzuje pripravenosť všetkých ostatných vstupov.
Ako oddeliť číselný signál od grafického objektu?
Nedostupný vstup nie je nulová cena
Na malej obrazovke posúvajte diagram vodorovne alebo ho zväčšite. Vysvetlenie nájdete aj v texte.
Na malej obrazovke posúvajte tabuľku vodorovne, aby ste prečítali všetky stĺpce.
| Cesta | Vstup | Výsledok |
|---|---|---|
| Explicitný signál | 1,1050 | 1,1050 > 1,1040: pravda. |
| Nedostupný objekt | null | Bez vyhodnotenia. |
| Chybná náhrada | 0 namiesto chýbania | 0 > 1,1040: zdanlivo bežná nepravda. |
Strážená cesta ponechá chýbanie ako null. Samostatná chybná verzia ukáže následok dosadenia nuly. Číslo a dostupnosť odpovedajú na iné otázky. Pri opačnom pravidle „signál menší než prah“ môže náhradná nula dokonca podmienku splniť. Oprava ľubovoľnou náhradnou hodnotou preto nevyrieši zdroj závislosti.
Oddeliť údaje od objektu v grafe
Náš výučbový príklad beží lokálne vo vašom prehliadači: nepripája sa k účtu ani API, neposiela zadané údaje ani ich trvalo neukladá. Nezadávajte heslá ani osobné údaje.
Lokálny nástroj mení dve kladné konečné hodnoty od 10⁻⁸ po 10⁸ s najviac pätnástimi platnými číslicami. V týchto dvoch poliach je povolená čiarka aj bodka; nejednoznačné 1.000 zapíšte ako 1000 alebo 1,0 podľa zámeru. Pre explicitné číslo vyhodnotí väčšie než, nedostupný objekt ponechá bez výsledku. Nečíta skutočný graf, nespúšťa platformový test a nevytvára investičný signál. Ukazuje rozdiel medzi nepravdou a nemožnosťou vyhodnotiť.
Nový EUR model: rovnaký zostatok neznamená rovnakú logiku
Oddelený hypotetický príklad začína na 5 000 EUR, bez otvorených pozícií. Objekt nemá dostupnú hodnotu, prah je 1,1040. Pri pravidle „väčší než“ strážená cesta nemá výsledok a neposiela pokyn. Chybná cesta dosadí nulu, vyhodnotí nepravdu a tiež neposiela pokyn. Oba varianty skončia na 5 000 EUR, hoci iba prvý pravdivo zachoval stav vstupu. Zhoda peňazí túto chybu neodhalí.
Porovnávajte dostupnosť a podmienku pred peniazmi. Dva nulové výsledky obchodovania môžu skrývať rozdiel, ktorý sa pri inom vopred definovanom pravidle prejaví.
Na malej obrazovke možno diagram posúvať vodorovne alebo zväčšiť. Hodnoty a záver nájdete aj nižšie v texte.
- Väčší než: strážené chýbanie
- Nevyhodnotené, bez vstupu; 5 000 EUR – Pravdivo zachované null.
- Väčší než: chybná nula
- Nepravda, bez vstupu; 5 000 EUR – Rovnaká hotovosť, ale chybný stav vstupu.
- Iné pravidlo menší než: strážené chýbanie
- Nevyhodnotené, bez vstupu; 5 000 EUR – Známa hodnota 1,1050 by bola nad prahom a tiež nevstúpila.
- Menší než: chybná nula vytvorí vstup
- −11 EUR; konečných 4 989 EUR – −10 USD × 0,90 − 2 EUR. Vymyslené ceny, nie realizácia widgetu alebo skutočný beh EA.
Teraz uvažujme iné, osobitne definované pravidlo: long iba pri známej hodnote menšej než 1,1040. Nejde o zmenu pravidla po získaní výsledku. Pri rovnakom chýbaní strážená cesta nevstúpi, ale náhradná nula dá 0 < 1,1040, teda nepravdivo oprávnený vstup. Keby bola naozaj dostupná pôvodná hodnota 1,1050, aj tá by podmienku „menší než“ zamietla.
Na vyčíslenie následku chybnej vetve pridelíme long 10 000 EUR, úplný vstup Ask 1,1052 a neskorší úplný výstup Bid 1,1042. Cenový výsledok je −10 USD; pri pevnej konverzii 0,90 EUR/USD a jedinom celom poplatku 2 EUR je −11 EUR, konečný zostatok 4 989 EUR. Strážená vetva bez pozície zostáva na 5 000. Toto je papierový model rozhodnutia a hotovosti, nie funkcia widgetu zadávajúca pokyny alebo beh EA.
Predpokladáme presné úplné plnenia, dostatočnú maržu a žiadnu skoršiu likvidáciu, ďalšie náklady, financovanie, konverzný spread, iné pozície alebo peňažné toky. Spread je zahrnutý v Ask/Bid. Nulová cena nie je skutočnou kotáciou; je výslovne chybná náhrada chýbania. Každý variant má osobitný štart. Protipríklad ukazuje, prečo zaznamenať prvú odlišnú dostupnosť a podmienku, nie iba porovnať konečný účet.
Ako zaznamenať režim bez obchodovania?
Príznaky MQL_TESTER, MQL_VISUAL_MODE a MQL_OPTIMIZATION opisujú prostredie programu. TERMINAL_BUILD identifikuje zostavu terminálu. Uložte skutočné hodnoty, neodhadujte režim podľa vzhľadu okna. Záznam sám nepotvrdí rovnaké dáta alebo parametre.
Nasledujúci malý samostatný diagnostický EA vypisuje konfiguráciu v OnInit a má prázdny OnTick. Neposiela ani nemení pokyny. Dokumentácia OnInit definuje inicializáciu a PrintFormat formátovaný výstup. Uložte vlastný samostatný MQ5, skompilujte v MetaEditore a porovnajte skutočné záznamy svojho terminálu; tu kompiláciu ani beh netvrdíme.
#property strict
int OnInit()
{
PrintFormat("tester=%d visual=%d optimization=%d build=%d symbol=%s period=%d",
(int)MQLInfoInteger(MQL_TESTER),
(int)MQLInfoInteger(MQL_VISUAL_MODE),
(int)MQLInfoInteger(MQL_OPTIMIZATION),
(int)TerminalInfoInteger(TERMINAL_BUILD),
_Symbol, (int)_Period);
return INIT_SUCCEEDED;
}
void OnTick() {}
Nevkladajte druhý OnInit do existujúceho EA ani nenahrádzajte jeho inicializáciu touto ukážkou. Doplnenie logovania musí zachovať pôvodný tok. Dokumentácia testera uvádza pre PrintFormat pri optimalizácii výnimku vo vnútri OnInit. Neprítomný výpis z iného kroku preto sám nedokazuje, že sa krok nevykonal.
Ako nájsť prvý rozdiel namiesto porovnávania zisku?
Pripravte dvojicu záznamov: vizuálny režim, verzia terminálu a kódu, vstupy, symbol a interval, model tickov, požadovaný a skutočný začiatok, snímka dát, náklady a počiatočný stav. Uchovajte nastavenia aj verzie. Ak sa deklarácie líšia, celý výsledok nepripisujte oknu. Porovnávač dvoch backtestov pomôže usporiadať túto kontrolu.
Nájdite najskorší rozdiel: úspešnosť získania, čas údajov, pripravenosť indikátora, signál, podmienka alebo rozhodnutie. Samotná poznámka „zisk 120 namiesto 80“ miesto neurčí. K pôvodným záznamom pridajte malú tabuľku. Nevymýšľajte hodnoty, ktoré sa predtým nezaznamenali.
Diagnostika má byť dosť malá na spárovanie udalostí. Výpis všetkého bez stabilného ID môže prvý rozdiel skryť. Uložte identifikátor pozorovania, žiadaný vstup, jeho čas či poradové miesto a informáciu o prijatí. Potom nemusíte hádať, či dve podobné ceny pochádzajú z rovnakého kroku. Je to návrh záznamu, nie automatická detekcia každej závislosti.
Čo zmeniť v návrhu signálu?
Výpočet má vracať hodnotu spolu so stavom dostupnosti; grafická vrstva môže výsledok iba zobraziť. Vypnutie kreslenia potom nemusí meniť zdroj vstupu. Rovnaký modul overte na riadených prípadoch vrátane chýbania a rovnosti s prahom. Tým nevyriešite automaticky verzie, dáta, náklady alebo ostatné závislosti celého testera.
MetaQuotes výslovne odlišuje vizuálnu výnimku grafických objektov. Nevydávajte však modelové null na stránke za návratovú hodnotu každej funkcie MT5. Bez zdrojového kódu odovzdajte autorovi párové nastavenia a prvý doložený rozdiel. Diagnostiku nenahrádzajte sériou živých skúšobných obchodov. Backtest v MT4 a MT5 vysvetľuje všeobecnú prípravu.
Čo overiť pri ďalšom pokuse?
- Uložte jednu dvojicu režimov so všetkými verziami, dátami, rozsahom a nastaveniami. Neoverené polia označte. Rovnaký EA súbor nepotvrdzuje zhodu ostatných vstupov.
- Oddeľte neznámu hodnotu od nuly. V modeli porovnajte 1,1050 a 1,1040, potom rovnaké hodnoty. Nedostupný objekt má zostať null bez ohľadu na výsledok explicitného čísla; účet na to nepotrebujete.
- V oddelenom deme alebo testeri získajte neobchodné diagnostické záznamy a prvý rozdiel v poradí. Zistite, či sa zmenil vstup, dostupnosť alebo podmienka. Dôkaz chyby nie je dôkaz ziskovosti.
Overte si, čo ste sa naučili
Cvičenie: približne 3 minúty.
Zobraziť odpoveď a vysvetlenie
To je explicitná sémantika nášho modelu, nie tvrdenie návratu null z funkcie MT5.
Ďalšie otázky
Znamená null v modeli návrat null z funkcií objektov MT5?
Nie. Dokumentácia platformy opisuje nulové čítania vlastností objektov mimo vizuálneho testovania. Null je náš explicitný stav nedostupnosti na stránke. Bez vstupu neporovnávame ani nedosadzujeme nulu. Skutočný EA potrebuje kontrolu funkcie, úspechu, režimu a očakávaných dát; model nepredstavuje každé správanie MQL5.
Znamená pravda v modeli, že EA otvorí obchod?
Nie. Stránka porovnáva dve zadané kladné hodnoty bez terminálu a účtu. Pravdivá podmienka nepotvrdzuje pripravenosť dát, ostatné pravidlá, oprávnenia ani realizáciu. Model odlišuje nepravdu od nemožnosti vyhodnotiť; netvorí investičný signál a nereprodukuje celý tester MT5.
Zaručí odstránenie objektov rovnaké testy?
Nie. Odstráni jednu možnú závislosť, no verzie, vstupy, dáta, režim tickov, náklady a počiatočný stav zostávajú. Najprv uložte oba behy a prvý rozdiel vo vstupe alebo výpočte. Nemeňte naraz viac vecí a opravu neposudzujte iba vyšším ziskom. Bez dôkazov neurčíte jedinú príčinu; autorovi odovzdajte konkrétnu postupnosť a neoverené polia.
Je malý logger stratégiou pripravenou na obchodovanie?
Nie. Je to samostatná diagnostická ukážka s výpisom v OnInit a prázdnym OnTick. Neposiela a nemení pokyny, nepočíta signál a nespravuje pozície. Vlastný súbor skompilujte v MetaEditore a uložte skutočný výsledok aj log. Nevkladajte druhý OnInit alebo náhradu inicializácie bez pochopenia programu. Príznaky nepreukazujú bezpečnosť iného EA.
Zdroje a overenie
- MetaQuotes: testovanie MQL5
Grafické objekty mimo vizuálneho režimu a nulové čítania, vizuálna výnimka; výnimka PrintFormat v OnInit pri optimalizácii. Nie tvrdenie každého MQL návratu ako null.
- MetaQuotes: vlastnosti bežiaceho programu
MQL_TESTER, MQL_VISUAL_MODE a MQL_OPTIMIZATION označujú prostredie programu.
- MetaQuotes: vlastnosti terminálu
TERMINAL_BUILD je číslo zostavy; dokumentácia neoveruje skutočnú zostavu používateľa.
- MetaQuotes: OnInit
Inicializačný int OnInit a INIT_SUCCEEDED. Ukážka je samostatný EA, nie druhá inicializácia do existujúceho programu.
- MetaQuotes: PrintFormat
Formátovacie špecifikátory a typy argumentov. Všeobecnú zmienku o optimalizácii dopĺňa konkrétna výnimka OnInit v dokumentácii testera; bez tvrdenia kompilácie.
Výpočty používajú výslovne uvedené predpoklady. Nenahrádzajú aktuálne trhové údaje ani podmienky poskytovateľa.
