În acest articol
După lectură vei putea să…
- Separi limitarea obiectelor platformei de simularea numerică proprie.
- Înregistrezi modul și prima divergență fără ordine.
- Deosebești costul verificat zero de costul indisponibil.
Explicații ale termenilor în articol
Expert Advisor (EA) Backtesting: testare pe date istoriceUn EA care funcționează numai în testul vizual MT5 cere verificarea sursei deciziei: date explicite sau obiect desenat? Înaintea schimbării strategiei, compară modurile, versiunile și prima diferență din jurnal. Modelul nostru nu rulează MT5, nu plasează ordine și păstrează lipsa ca necunoscut, fără transformare în zero.
Ce diferă efectiv în modul vizual?
Documentația MQL5 descrie obiecte grafice care nu sunt desenate în testarea/optimizarea fără vizualizare și valori zero la interogarea proprietăților obiectului creat. Limitarea nu se aplică testării vizuale. Este comportament documentat, fără experiment pe EA-ul tău și fără cauză unică pentru orice diferență.
Dacă robotul citește prețul unei linii sau starea butonului, separă etapa de citirea unui indicator ori prețului. Verifică întâi dacă inputul există în acel mod. Starea explicită „indisponibil” poate opri calculul înainte ca zero tehnic să fie acceptat drept preț. Graficul vizibil nu confirmă pregătirea tuturor inputurilor.
Cum separi semnalul numeric de obiect?
Simulare proprie fără tranzacții: semnal pozitiv 1,1050 și prag 1,1040, condiția „semnal peste prag”. Numărul explicit este disponibil, obiectul separat este marcat indisponibil. Nu sunt cotații MT5 ori loguri de execuție, ci valori și stări alese pentru fluxul datelor.
Inputul lipsă nu este preț zero
Pe un ecran mic, derulează diagrama orizontal sau mărește-o. Explicația este disponibilă și în text.
Pe un ecran mic, derulează tabelul orizontal pentru a citi toate coloanele.
| Cale | Input | Evaluare în model |
|---|---|---|
| Semnal numeric explicit | 1,1050 | Peste 1,1040: adevărat. |
| Obiect indisponibil | null | Condiția nu se evaluează. |
| Substituție greșită | 0 în locul lipsei | 0>1,1040: aparent rezultat fals obișnuit. |
Ultimul rând maschează lipsa ca rezultat normal. Calea cu verificare păstrează null. Pentru condiția opusă „sub prag”, zero substituit ar putea chiar să satisfacă testul. Nu repara programul prin fallback arbitrar; definește separat disponibilitatea și regula.
Separă datele de obiectul grafic
Exemplul rulează local în browser: fără cont sau API, fără trimiterea datelor ori salvare persistentă. Nu introduce parole sau date personale.
Poți modifica două valori finite pozitive. Calea numerică este evaluată, iar obiectul indisponibil rămâne fără comparație. Pagina nu citește un grafic, nu rulează testerul și nu generează semnal de investiție. Distinge un fals valid de imposibilitatea evaluării. La valori egale, comparația strictă „peste” este falsă, fără schimbarea stării null a obiectului absent.
Model RON: cost necunoscut nu înseamnă cost zero
Diagnostic separat, fără ordin: buget 150 RON, pierdere de preț planificată 140 RON, cost de intrare plus ieșire încă necunoscut. Întrebarea este dacă prețul și costul împreună încap în buget. Cu cost indisponibil, răspunsul este necunoscut. Înlocuirea greșită cu zero dă 140+0≤150 și aprobă aparent cazul.
Dacă ulterior verifici un cost ipotetic de 20 RON, totalul devine 160 RON, peste buget cu 10. Dacă tariful documentat ar fi efectiv zero, 140 RON ar încăpea, cu 10 RON rămași în acel model. Aceleași cifre diferă prin dovada disponibilității. Cei 20 RON sunt inventați, fără tarif de piață; slippage, cursuri și marjă nu sunt modelate. Nici stopul, nici comparația nu garantează pierderea maximă.
Disponibilitatea este parte a inputului. Zero numeric nu înlocuiește o valoare necunoscută.
Pe un ecran mic poți derula diagrama orizontal sau o poți mări. Valorile și concluzia apar și în textul de mai jos.
- Cost indisponibil
- Rezultat necunoscut – Nu poți compara încă totalul cu bugetul.
- Fallback greșit zero
- 140+0≤150: aparent acceptat – Comparația ascunde lipsa dovezii.
- Cost ipotetic verificat 20
- 160>150: peste cu 10 RON – Nu este tarif de broker.
- Cost efectiv documentat zero
- 140≤150: rezervă 10 RON – Valoarea zero este acum informație, fără garanție a pierderii.
Cum înregistrezi modul programului fără tranzacționare?
MQL_TESTER, MQL_VISUAL_MODE și MQL_OPTIMIZATION descriu mediul programului. TERMINAL_BUILD identifică buildul. Înregistrează valorile efective, fără presupunerea modului după aspectul ferestrei. Acest rând nu dovedește singur date sau parametri identici.
Exemplul separat scrie configurația în OnInit și are OnTick gol. Nu trimite și nu modifică ordine. OnInit definește inițializarea, iar PrintFormat formatul. Salvează separat MQ5, compilează în MetaEditor și păstrează rezultatul efectiv; nu pretindem compilare MQL executată aici.
#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() {}
Nu crea al doilea OnInit într-un EA existent și nu înlocui inițializarea lui cu acest fragment. Logarea trebuie să păstreze fluxul original. Documentația testerului prevede excepția OnInit de la suprimarea PrintFormat în optimizare; lipsa mesajului din altă etapă nu dovedește că etapa nu a rulat. Formatul și tipurile argumentelor trebuie să corespundă.
Cum găsești prima divergență, fără compararea numai a profitului?
Fișa perechii păstrează modul vizual/ne-vizual, build și cod, inputuri, simbol/timeframe, model de tickuri, început cerut și efectiv, snapshot de date, costuri și stare inițială. Arhivează setările și versiunea. Dacă declarațiile diferă, nu atribui întregul rezultat ferestrei grafice. Comparatorul de rulări organizează această verificare.
Caută etapa cea mai timpurie cu valoare diferită: succesul preluării, timestamp, pregătirea indicatorului, semnal, condiție sau decizie. Nota „profit 120 în loc de 80” nu identifică etapa. Păstrează logurile originale și tabelul comparativ; nu inventa retrospectiv valorile neînregistrate.
Un ID al observației și ordinea cererilor ajută potrivirea evenimentelor. Notează inputul cerut, timpul ori secvența și dacă programul l-a acceptat. Logarea tuturor lucrurilor fără cheie stabilă poate ascunde prima diferență. Aceste alegeri nu garantează identificarea automată a tuturor dependențelor.
Ce schimbi în proiectarea semnalului?
Calculul returnează valoare explicită și stare de disponibilitate; stratul grafic o afișează. Oprirea desenării nu mai schimbă deliberat sursa inputului. Verifică același modul pe cazuri controlate, inclusiv lipsă și egalitate cu pragul. Versiunile, datele, costurile și alte dependențe rămân relevante pentru întregul backtest.
Limitarea obiectelor și excepția modului vizual sunt afirmații din documentația MetaQuotes, fără observații proprii de terminal. Fără cod sursă, transmite autorului fișa și prima divergență documentată. Nu înlocui diagnosticul cu ordine live de încercare. Pregătirea testerelor MT4/MT5 tratează mediul general.
Ce pregătești pentru următoarea comparație?
- Completează fișa perechii și marchează câmpurile neconfirmate. Același fișier EA nu dovedește identitatea tuturor setărilor și datelor.
- Folosește modelul 1,1050/1,1040, apoi egalitate. Verifică separat valoarea numerică și lipsa obiectului. Nu este necesar cont de tranzacționare pentru simulare.
- Într-o configurație separată demo sau tester, strânge diagnostic fără ordine și identifică prima etapă divergentă. Păstrează dovezile și verifică dacă s-a schimbat inputul, disponibilitatea sau condiția.
Verifică ce ai învățat
Exercițiu: aproximativ 3 minute.
Arată răspunsul și explicația
Aceasta este convenția explicită a modelului, fără afirmația că funcția MT5 returnează null.
Alte întrebări
Null din model înseamnă că funcția MT5 returnează null?
Adevărat în simulare înseamnă că EA deschide tranzacție?
Eliminarea obiectelor garantează teste identice?
Loggerul este strategie pregătită pentru live?
Surse și verificare
- MetaQuotes — Testing Trading Strategies
Obiecte grafice în testare, excepția vizuală și excepția OnInit pentru PrintFormat în optimizare.
- MetaQuotes — Running MQL5 Program Properties
Flagurile MQL_TESTER, MQL_VISUAL_MODE și MQL_OPTIMIZATION.
- MetaQuotes — Client Terminal Properties
TERMINAL_BUILD identifică buildul terminalului.
- MetaQuotes — OnInit
Semnătura int OnInit și valoarea INIT_SUCCEEDED.
- MetaQuotes — PrintFormat
Argumente și specificatori de format; fără compilare sau log MQL verificat aici.
Calculele folosesc ipotezele precizate explicit. Nu înlocuiesc datele actuale ale pieței sau condițiile furnizorului.
