Expert Advisor MQL5 este un program MetaTrader 5 condus de evenimente. Evaluează reguli și poate trimite cereri de tranzacționare când permisiunile necesare sunt active. Evenimentul, permisiunea și răspunsul serverului trebuie separate de execuția reușită. Atașarea programului la grafic nu demonstrează rezultat de tranzacționare. Începe prin a verifica datele citite, apoi traseul cererii și recuperarea stării după întrerupere.

Ce este un Expert Advisor în MQL5?

MetaEditor compilează sursa MQ5 în executabil EX5. Fișierul compilat poate fi distribuit fără sursă: învățarea MQL5 nu dezvăluie algoritmul nedivulgat al unui EX5 cumpărat. EA poate trimite cereri permise. Indicatorul poate calcula și notifica, cu alte evenimente și funcții de tranzacționare interzise; descrierea „doar desenează” este prea îngustă.

EA MQL5 folosește mediul MT5. Termenul există și în MT4, cu alt limbaj și interfață; alte sisteme automate folosesc alte interfețe. Consultă EA în MT4 și MT5 și începutul tranzacționării algoritmice.

Indicele zero nu este obligatoriu ultima bară închisă

Presupunem CopyBuffer reușit cu start_pos=1,count=3 într-un tablou simplu, fără AS_SERIES. Sunt selectate trei valori de bare închise; cea mai veche ocupă începutul memoriei fizice. În această configurație, ultima închisă este la indicele 2.

Ordinea fizică a trei valori CopyBuffer

Ordinea fizică a trei valori CopyBufferTabloul simplu fără AS_SERIES primește exact trei valori de la start_pos 1. Memoria conține decalaj 3=103, 2=101, 1=102. Ultima bară închisă este la indice 2, fără indice 0. Pragul 102,5 este depășit de vechiul 103, fără să fie depășit de ultimul 102.TABLOU SIMPLU: CEL MAI VECHI ÎNTÂICopyBuffer: start_pos = 1, count = 3indice 0decalaj 3103indice 1decalaj 2101indice 2decalaj 1102mai vechiultima închisăTest > 102,5: 103 trece, 102 nu trece.Decalajul 0 nu a fost copiat.
Valoarea 103 la indicele 0 și 102 la indicele 2 pot inversa rezultatul aceleiași comparații. Numărul complet nu garantează alegerea barei corecte.

Pe un ecran mic, derulează diagrama orizontal sau mărește-o. Explicația este disponibilă și în text.

Valorile fictive 103,101,102 corespund decalajelor 3,2,1. Copierea a returnat exact trei elemente, fără eroare sau rezultat parțial. Pragul >102,5 verifică selecția datelor, fără semnal de investiții. CopyBuffer numără start_pos din bara curentă și pune cel mai vechi element la începutul memoriei fizice. Notează poziția solicitată, numărul returnat și indexarea țintei; indicele 2 nu este regulă universală pentru alte setări.

Cum interacționează EA cu evenimentele platformei?

OnInit inițializează programul. Este eveniment de ciclu de viață, fără promisiunea unui singur apel pe toată utilizarea. Verifică resursele și returnează eroare dacă pregătirea necesară nu se poate încheia.

OnTick tratează NewTick pentru simbolul graficului. Dacă evenimentul este deja în coadă sau procesat, alt NewTick nu se adaugă. EA poate utiliza alte evenimente și nu este obligat să implementeze OnTick. AutoTrading dezactivat interzice cererile noi, fără să oprească programul sau handlerul curent.

OnDeinit tratează dezinițializarea și motivul ei: eliminare, închidere ori schimbări care determină reinițializarea. Gestionează resursele și starea păstrată explicit. OnTimer și OnTradeTransaction pot fi esențiale; ciclul nu se reduce la trei funcții. La EA multisimbol, tickul graficului nu demonstrează actualitatea datelor celorlalte simboluri.

Cum trimiți cererea și confirmi execuția?

OrderSend trimite cererea; true nu confirmă singur fillul. Verifică răspunsul și confruntă ordine, execuții și poziții. OrderCheck este verificare preliminară, fără garanția execuției viitoare. În testul fictiv, cererea buy 0,10 loturi pierde confirmarea locală. Retrimiterea fără confruntare poate produce 0,20 dacă ambele sunt executate; lipsa confirmării nu dovedește că serverul n-a acționat.

OnTradeTransaction separă eliminarea ordinului de adăugarea execuției și nu garantează prioritatea sosirii notificărilor. Fără poziție inițială, două buy confirmate D1=0,04,D2=0,06 însumează 0,10 loturi. Contorul defect care se resetează la ORDER_DELETE arată zero pentru D1,D2,ORDER_DELETE, dar 0,10 pentru ORDER_DELETE,D1,D2. Starea ordinului și expunerea poziției sunt câmpuri diferite. Registrul real trebuie să trateze și sell, inversări, corecții ale istoricului și modul contului.

CTrade oferă Buy,Sell,PositionClose. Buy reușit ca verificare nu înseamnă mereu operațiune executată: inspectează ResultRetcode și ResultDeal. Vezi diferența prețului executat.

Model RON: același fill nu devine expunere nouă la recitire

Fixăm un singur cont, simbol și sens buy, fără poziție inițială, vânzări sau corecții. Registrul local de recuperare conține D1=0,04,D2=0,06 și repetă apoi D1=0,04. Repetiția este introdusă în fișierul nostru de test, fără afirmația că serverul retrimite obligatoriu notificarea. Identitatea execuției este păstrată ca text exact.

Specificația didactică atribuie pierdere la stop 800 RON/lot, fără alte costuri și fără preț garantat. Suma naivă a rândurilor este 0,14 loturi și risc 112 RON. Registrul după ID-uri unice confirmă numai 0,10 loturi și risc 80 RON. Față de bugetul ales 100 RON, recitirea naivă ar produce alarmă falsă de depășire. Păstrează ID-ul și confruntă starea serverului; acest exemplu buy-only nu este registru de producție și nu autorizează ignorarea unei corecții ulterioare a aceleiași execuții.

RON: recitirea nu creează o execuție nouăUn cont/simbol, buy-only, D1=0,04,D2=0,06,D1 repetat în registrul local. Pierdere atribuită 800 RON/lot, fără costuri; buget 100 RON. Fără corecții sau sell.CALCUL IPOTETICAdunare naivă a rândurilor0,14 loturi; 112 RONExecuții unice confirmate0,10 loturi; 80 RONDiferența artificială32 RON
RON: recitirea nu creează o execuție nouă. Un cont/simbol, buy-only, D1=0,04,D2=0,06,D1 repetat în registrul local. Pierdere atribuită 800 RON/lot, fără costuri; buget 100 RON. Fără corecții sau sell.

Unicitatea ID-ului dă 0,10 loturi/risc 80 RON. Suma rândurilor dă 0,14/risc 112 și falsă depășire. Confruntă apoi serverul; nu este registru complet de producție.

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.

Adunare naivă a rândurilor
0,14 loturi; 112 RON – D1 este numărat de două ori.
Execuții unice confirmate
0,10 loturi; 80 RON – D1+D2; două ID-uri.
Diferența artificială
32 RON – Alarmă falsă, fără expunere nouă.

Ce verifică testerul și ce poate rămâne ascuns?

Testerul MT5 poate folosi tickuri generate sau reale colectate de broker, după modul ales și datele disponibile. Păstrează proveniența, timpii, contractul și costurile; nu presupune sursă universală MetaQuotes. Alegerea parametrilor pe istoricul folosit ulterior la evaluare poate exagera dovezile, fără garanție matematică a curbei frumoase ori eșecului live. Păstrează intervalul neatins și toate încercările; vezi backtestul.

Când ajută EA și când creează probleme?

Poate implementa verificări repetabile și monitoriza instrumente. Două sute de tranzacții pe lună, funcționarea nocturnă sau deciziile rapide sunt cerințe posibile, fără dovadă de avantaj profitabil. Specifică informația, evenimentele și condițiile de abținere.

Evenimentul neobișnuit cere test și supraveghere, fără interdicție automată pentru toate sistemele. Graficul comercial ori sondajul neidentificat pe forum nu estimează fiabil performanța viitoare. Un proiect mic poate verifica reguli precise; bugetul de învățare depinde de funcții și competențe, fără superioritate garantată prin trei–șase luni sau prin scriere în loc de cumpărare.

Ce presupune funcționarea fără supraveghere?

Ai nevoie de infrastructură, permisiuni și procedură de recuperare. Butonul local AutoTrading nu închide poziții și nu oprește calculele. Stopul obișnuit acceptat pe server poate rămâne activ după închiderea terminalului, iar ieșirea numai în EA cere program funcțional și acces la server.

MetaQuotes Virtual Hosting este mediu migrat separat, cu automatizarea permisă; butonul local nu oprește instanța distantă. Windows VPS este alt serviciu; vezi VPS și latența. Numele nu garantează timp de execuție, fill sau preț lunar fix.

Definește teste de acceptare pentru date lipsă, restart, pas de volum invalid, răspuns incert și modificări manuale. Restabilește expunerea curentă înaintea reluării. La netting, strategiile aceluiași simbol împart poziția netă; Magic Number nu creează capital ori marjă separate.

Handle existent — valoarea indicatorului este pregătită?

Crearea handle-ului nu dovedește calcularea barei. BarsCalculated returnează numărul calculat sau −1 la eroare. Controlează apoi numărul CopyBuffer efectiv, bufferul și decalajul. Citirea eșuată nu devine zero: RSI zero ar descrie stare extremă, fără echivalență cu „date nepregătite”.

Patru verificări ale valorii pregătite

Handle existent — valoarea este pregătită?Patru verificări separate: handle, date calculate, număr copiat și valoare validă.Handlediferit de INVALIDDate calculatebara necesarăCopyBuffernumăr așteptatValoarevalidă, nevidă
Toate condițiile trebuie să treacă; handle-ul singur nu este semnal utilizabil.

Pe un ecran mic, derulează diagrama orizontal sau mărește-o. Explicația este disponibilă și în text.

Modelul cere o valoare: A, handle invalid, fără citire; B, handle existent dar zero valori copiate, așteaptă; C, o valoare copiată EMPTY_VALUE, fără semnal utilizabil; D, o valoare validă 45, regula poate fi evaluată. Valoarea 45 este fictivă, fără recomandare de investiții.

EMPTY_VALUE implicit este DBL_MAX, număr finit: verificarea finitudinii nu ajunge. Indicatorul personalizat poate defini alt marcaj gol. Verifică specificația, fără respingerea fiecărui zero. Istoricul lipsă, marcajul gol și valoarea validă sunt stări distincte.

Exercițiu: ai handle și o valoare copiată, dar aceasta este EMPTY_VALUE. Ce faci?

Nu evalua pragul strategiei. Verifică bufferul, bara și marcajul, notează indisponibilitatea și reîncearcă la evenimentul potrivit. Nu inventa zero.

Datele API cer verificarea disponibilității în testul offline; regula dependentă de grafic are limite ale testului vizual.

Ce faci înainte să construiești EA-ul?

  1. Instalează MT5 de la furnizorul verificat, deschide cont demo și rulează un singur test al exemplului Moving Average sau MACD Sample pe EUR/USD H1. Citește raportul: equity, drawdown și profit factor. Este exercițiu, fără rezultat anticipat.
  2. Citește documentația OnInit,OnTick și CTrade înaintea codului propriu. Localizează exemplele și limitele funcțiilor, fără presupunerea că simpla compilare validează execuția.
  3. Scrie intrările, ieșirile, volumul și condițiile de abținere în plan. Marchează discreția explicit; contextul poate fi formalizat dacă datele și condițiile sunt definite. Folosește lista setupului.
  4. Proiectează un proiect restrâns cu criterii pentru accesul la date, evenimente și răspunsuri. Funcțiile și competențele decid durata, fără termen universal de competență.
  5. Verifică procedura demo înaintea expunerii reale. Luna este interval ilustrativ; demo diferă de live. Întârzierea simulată de tester nu măsoară toate fillurile reale viitoare. Păstrează jurnalul inclusiv pentru requote și cereri incerte.