V tomto článku
Po přečtení dokážete…
- Rozlišit dokumentované omezení objektů od vlastní modelové reprezentace null.
- Zaznamenat režim a první neshodu bez odeslání obchodního pokynu.
- Otestovat dostupnost, přísnou nerovnost a rovnost jako odlišné případy.
Vysvětlení pojmů přímo v článku
Expert Advisor — obchodní program Backtest: historický test pravidelPokud automat funguje jen ve vizuálním testu MT5, zjistěte, zda rozhoduje podle údajů, nebo podle něčeho nakresleného. Objekt grafu nemá bez výslovného návrhu zastupovat signální hodnotu. Před změnou strategie porovnejte režimy, verze, data a první rozdíl v záznamu. Níže běží vlastní model, nikoli MT5; neodesílá obchod a chybějící údaj nepovažuje za nulovou cenu.
Co se ve vizuálním režimu skutečně liší
Dokumentace MQL5 uvádí, že mimo vizuální testování se grafické objekty nevykreslují a dotazy na vlastnosti vytvořeného objektu dostávají nulové hodnoty. Omezení se nevztahuje na vizuální režim. Jde o dokumentované chování, nikoli náš experiment s vaším automatem nebo důkaz jediné příčiny každé neshody.
Čte-li EA cenu čáry či stav tlačítka, evidujte tento krok odděleně od cenových dat nebo indikátoru. Ověřte, zda hodnota v daném prostředí vůbec existuje. Stav nedostupnosti může zastavit diagnózu před výpočtem, místo aby technickou nulu přijal jako cenu. Viditelný graf nepotvrzuje připravenost všech vstupů. Expert Advisor může mít závislost i na rozhraní, které obchodník při ručním sledování přehlédne.
Oddělte číselný signál a objekt grafu
Vlastní neobchodní simulace deklaruje kladný signál 1.1050 a práh 1.1040. Podmínka je signál větší než práh. Porovnáváme explicitní číslo s nedostupným čtením objektu. Nejde o kotace MT5, záznamy realizace ani pozorované chování konkrétního EA; stavy jsme zvolili pro vysvětlení toku údajů.
Nedostupný vstup není nulová cena
Kontrolujte číslo i dostupnost odděleně. Pravda v modelu není příkaz ani důkaz připravenosti skutečného EA.
- Číselná cesta
- 1.1050 > 1.1040 – Pravda v deklarovaném modelu.
- Nedostupný objekt
- null → nehodnotit – Žádná vstupní hodnota.
- Chybná náhrada nulou
- 0 > 1.1040 → nepravda – Absence se ztratila jako běžný výsledek.
Na malé obrazovce posouvejte tabulku vodorovně, abyste přečetli všechny sloupce.
| Cesta | Vstup | Výsledek modelu |
|---|---|---|
| Explicitní číslo | 1.1050 | 1.1050 > 1.1040: pravda. |
| Nedostupný objekt | null | Podmínku nehodnotíme. |
| Chybná náhrada | 0 | 0 > 1.1040: zdánlivě běžná nepravda. |
Poslední řádek je úmyslně chybná varianta, nikoli oprava. Při opačné podmínce signál pod prahem by vložená nula dokonce vypadala jako splnění pravidla. Null reprezentuje nedostupnost v našem modelu; netvrdíme, že funkce MT5 pro objekt vrací null. Stav dostupnosti a samotné číslo odpovídají na dvě různé otázky.
Číselná data nesmějí záviset na kreslení
Náš studijní příklad běží místně v prohlížeči: nepřipojuje se k účtu ani API, neodesílá vstupy a trvale je neukládá. Nezadávejte hesla ani osobní údaje.
Místní nástroj přijímá dva kladné konečné vstupy v rozsahu 10⁻⁸–10⁸ a nejvýše 15 číslic. Porovná explicitní hodnotu, zatímco nedostupná cesta zůstane bez výsledku podmínky. Vizualizovaná cesta má podle deklarovaného modelu číslo, nevizuální objekt je nedostupný. Ukázka se nepřipojuje k účtu nebo API, neodesílá vstupy a neukládá je trvale. Nevkládejte přihlašovací údaje. Nečte skutečný graf, nespouští tester a nevytváří investiční signál.
Nový samostatný CZK příklad: sledujme fiktivní číselný vstup EUR/CZK 25.12 proti prahu 25.10. Dostupné číslo podmínku větší splní a rozdíl činí 0.02 Kč na EUR, tedy 200 Kč pro referenčních 10 000 EUR. To je měřítko rozdílu vstupů, nikoli výnos nebo dosažitelná obchodní cena. Čára bez platného čtení takovou hodnotu nemá; nesmí vytvářet hypotetických nula korun.
Změňte jen signál na 25.10. Přísná podmínka větší je nyní nepravdivá, ale stav dostupnosti čísla se nezměnil. Nedostupný objekt zůstane nevyhodnocený v obou případech. Tak rozlišíte nepravdu od neschopnosti rozhodnout; porovnání konečného peněžního výsledku tento rozdíl zakrývá.
Jak zaznamenat režim bez obchodování
Příznaky MQL_TESTER, MQL_VISUAL_MODE a MQL_OPTIMIZATION popisují prostředí programu; TERMINAL_BUILD identifikuje sestavení terminálu. Uchovejte skutečné hodnoty, ne odhad z vzhledu okna. Samy ještě nepotvrzují shodná data a parametry. Následující samostatná diagnostická ukázka má záznam v OnInit a prázdný OnTick. Neposílá ani nemění pokyny.
#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() {}
Doslovný zdrojový kód zde nebyl kompilován ani spuštěn. Uložte jej jako samostatný MQ5 soubor, zkompilujte v MetaEditoru a porovnejte vlastní skutečné logy. Nevkládejte druhý OnInit do existujícího programu a nenahrazujte jeho inicializaci bez zachování toku. Dokumentace testeru popisuje výjimku pro PrintFormat uvnitř OnInit při optimalizaci; nepřítomnost výpisu z jiné fáze sama nedokazuje, že fáze neproběhla.
Hledejte první odlišný vstup, nikoli vyšší zisk
Založte párový záznam: režim, verze terminálu a kódu, parametry, symbol, timeframe, model generování ticků, požadovaný a skutečný začátek, kopie dat, náklady a počáteční stav. Uchovejte nastavení i identifikátory verzí. Porovnání dvou běhů pomůže najít odlišná prohlášení; stejný soubor EA nezaručuje všechny ostatní podmínky.
Najděte nejstarší krok s rozdílem: úspěch načtení, čas vstupu, připravenost indikátoru, signál, podmínku či rozhodnutí. Poznámka zisk 120 místo 80 neurčuje příčinu. Uchovejte původní logy a vedle nich malou porovnávací tabulku. Zpětně nevymýšlejte hodnoty, které program neukládal. Vhodné ID pozorování a pořadí událostí umožní porovnávat stejné kroky, ne podobně vypadající ceny.
Jak upravit návrh signálu
Výpočet má vracet explicitní hodnotu se stavem dostupnosti; grafická vrstva ji může zobrazovat. Vypnutí kreslení pak nemusí úmyslně měnit zdroj signálu. Zkontrolujte stejný modul na známých vstupech včetně nedostupnosti a rovnosti prahu. Odstranění této závislosti neřeší automaticky data, verze, náklady a všechny další části programu.
Bez zdrojového kódu pošlete autorovi párový záznam a první doloženou neshodu. Nenahrazujte diagnózu živými pokusnými obchody. Příprava testování MT4 a MT5 pokrývá zbytek prostředí. Přesný model příčiny vyžaduje skutečné důkazy, nikoli pouze zlepšení výnosové křivky.
Tři konkrétní kontroly
- Uchovejte párové nastavení, verze, rozsah a data jednoho vizuálního a nevizuálního běhu; neověřená pole přiznejte.
- V místním modelu vyzkoušejte 1.1050 proti 1.1040 i rovné hodnoty. Nedostupný objekt má zůstat null bez ohledu na výsledek číselné větve.
- V oddělené diagnostice shromážděte neobchodní záznamy a přiřaďte jim ID. Pojmenujte první změněný vstup nebo podmínku, než přepíšete strategii.
Ověřte si, co jste se naučili
Přibližně 3 minut procvičování.
Zobrazit odpověď a vysvětlení
Jde o výslovnou sémantiku našeho modelu, nikoli tvrzení o návratovém typu funkce MT5.
Další otázky
Znamená null, že funkce MT5 vrací null?
Ne. Dokumentace mimo vizuální test popisuje nulové vlastnosti objektů. Null je naše explicitní reprezentace nedostupnosti, aby nezanikla jako běžná cena. Skutečný EA potřebuje ověření funkce, úspěchu, režimu a očekávaných dat.
Pravdivá podmínka znamená otevření obchodu?
Ne. Prohlížeč porovná deklarovaná čísla bez terminálu a účtu. Neprověřuje další pravidla, oprávnění nebo realizaci. Rozlišuje pouze dostupný nepravdivý výsledek od situace bez vstupu a nevytváří obchodní signál.
Zaručí odstranění objektů stejné testy?
Řeší jednu možnou závislost. Verze, parametry, data, tickový model, náklady a počáteční stav mohou stále působit rozdíly. Nejprve uchovejte obě nastavení a najděte nejstarší neshodu; vyšší finální zisk sám příčinu neprokazuje.
Je logger strategie připravená pro živý účet?
Ne. Samostatně vypíše konfiguraci v OnInit a má prázdný OnTick. Neřídí pozice ani neodesílá pokyny. Kód vyzkoušejte v samostatném souboru a uchovejte skutečný výsledek kompilace; nevytvářejte druhý inicializační handler v existujícím EA.
Zdroje a ověření
- MetaQuotes — Grafické objekty a omezení testeru
Čerstvě přečteny části grafických objektů a omezení PrintFormat včetně výjimky OnInit při optimalizaci. Rozlišuji dokumentované nulové vlastnosti objektu od našeho null modelu; nejde o skutečně spuštěný EA test.
- MetaQuotes — Vlastnosti běžícího MQL programu
Čerstvě přečteny relevantní definice MQL_TESTER, MQL_VISUAL_MODE a MQL_OPTIMIZATION. Příznaky identifikují prostředí, nepotvrzují shodné vstupy nebo výsledek strategie.
- MetaQuotes — Inicializace OnInit
Čerstvě přečtena signatura inicializačního handleru a význam návratu. Převzatý logger je samostatná ilustrace; neověřoval jsem kompilaci ani jeho integraci do jiného EA.
- MetaQuotes — Formátovaný záznam PrintFormat
Čerstvě přečten účel a požadavek shody argumentů s formátem. Obecné omezení optimalizace doplňuje konkrétnější výjimka OnInit v dokumentaci testeru; neodvozuji z chybějícího logu neprovedení kódu.
Výpočty používají výslovně uvedené předpoklady. Nenahrazují aktuální tržní údaje ani podmínky poskytovatele.
