Un 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

Inputul lipsă nu este preț zeroSimulare proprie: semnal 1.1050 peste prag 1.1040. Obiectul indisponibil este null în model; condiția lui nu se evaluează.Număr explicit1.1050Prag: 1.1040Obiect indisponibilnullValoare absentăRezultatul modeluluiadevărat / necunoscutFără solicitare de ordinVerifică separat valoarea și disponibilitatea.Model propriu — valori ipotetice.
1,1050>1,1040 este adevărat. Pentru obiectul null nu evaluăm condiția. Nu afirmăm că funcția MT5 returnează null.

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.

CaleInputEvaluare în model
Semnal numeric explicit1,1050Peste 1,1040: adevărat.
Obiect indisponibilnullCondiția nu se evaluează.
Substituție greșită0 în locul lipsei0>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.

Simulăm regula noastră, fără test EA în MT5. Folosește numere pozitive cu punct zecimal, 10⁻⁸–10⁸, până la 15 cifre. Lipsa obiectului este null; varianta greșită separată o înlocuiește cu zero. Nu dovedește cauza erorii EA.

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ă.

Zero verificat și cost lipsă sunt stări diferiteModel RON fictiv fără ordine: buget 150, pierdere de preț planificată 140, cost necunoscut sau documentat separat.CALCUL IPOTETICCost indisponibilRezultat necunoscutFallback greșit zero140+0≤150: aparentacceptatCost ipotetic verificat 20160>150: peste cu 10 RONCost efectiv documentat zero140≤150: rezervă 10 RON
Zero verificat și cost lipsă sunt stări diferite. Model RON fictiv fără ordine: buget 150, pierdere de preț planificată 140, cost necunoscut sau documentat separat.

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?

  1. Completează fișa perechii și marchează câmpurile neconfirmate. Același fișier EA nu dovedește identitatea tuturor setărilor și datelor.
  2. 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.
  3. Î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.