Een MQL5 Expert Advisor is een gebeurtenisgestuurd programma in MetaTrader 5. Het kan regels beoordelen en met de juiste rechten handelsverzoeken versturen. Een handler uitvoeren, een verzoek accepteren en een positie werkelijk uitvoeren zijn verschillende toestanden. Een programma aan een grafiek koppelen bewijst geen handelsresultaat.

Broncode, uitvoerbaar bestand en programmafunctie

MetaEditor compileert MQ5 naar EX5. Een leverancier kan het uitvoerbare bestand zonder bron verspreiden; MQL5 leren onthult geen verborgen EX5-algoritme. Voor een EA gelden de beschikbare handelsfuncties en rechten. Een indicator kan berekenen of melden maar heeft andere gebeurtenissen en verboden handelsfuncties; “tekent alleen” is ook te beperkt.

MQL5 gebruikt de MT5-omgeving. MT4 kent eveneens Expert Advisors maar een eigen taal en interface. Andere automatisering kan andere orderkoppelingen gebruiken. Algoritmisch handelen: begin met één controleerbare handeling begint bij reproduceerbare regels en een klein controleproject.

Index nul is niet altijd de laatst gesloten bar

Drie waarden, oudste fysiek eerstFictieve succesvolle CopyBuffer, start_pos 1, count 3, geen AS_SERIES, exact drie waarden zonder fout of gedeeltelijk resultaat.REKENVOORBEELDIndex 0 / shift 3103Index 1 / shift 2101Index 2 / shift 1102Shift 0Niet gekopieerd
Drie waarden, oudste fysiek eerst. Fictieve succesvolle CopyBuffer, start_pos 1, count 3, geen AS_SERIES, exact drie waarden zonder fout of gedeeltelijk resultaat.

Controleer aantal én ordening. Index 2 is een gevolg van deze configuratie, geen universele API-regel.

Index 0 / shift 3
103 – Oudste; 103>102,5 is waar.
Index 1 / shift 2
101 – Middelste geselecteerde bar.
Index 2 / shift 1
102 – Laatst gesloten; 102>102,5 is onwaar.
Shift 0
Niet gekopieerd – Geen actuele-barwaarde in deze aanvraag.

Neem een succesvolle CopyBuffer met start_pos=1, count=3 naar een gewone array zonder AS_SERIES. Precies drie geldige fictieve waarden worden gekopieerd: fysiek oudste eerst, shift 3=103, shift 2=101, shift 1=102. Index 2 bevat hier de laatst gesloten bar; de actuele shift 0 is niet gevraagd.

De vergelijking “groter dan 102,5” slaagt met oude 103 op index 0 maar niet met laatste 102 op index 2. Een correcte vergelijking kan dus verkeerde invoer krijgen. Registreer startpositie, retouraantal en indexconventie. Pas index 2 niet universeel toe op een andere aanvraag of array-instelling.

OnInit, OnTick en OnDeinit in hun echte bereik

OnInit behandelt initialisatie. Dat is geen belofte dat het programma slechts eenmaal gedurende alle gebruik initialiseert. Controleer benodigde resources en meld falen als de vereiste opzet ontbreekt. OnDeinit verwerkt beëindiging en reden, waaronder verwijderen, afsluiten of wijzigingen met herinitialisatie. Ontwerp resourcebeheer en te herstellen toestand apart.

OnTick ontvangt NewTick voor het symbool van de gekoppelde grafiek. Zit zo’n event al in de wachtrij of wordt het verwerkt, dan wordt een volgende NewTick niet toegevoegd. Een multisymbool-EA weet door één grafiektick niet dat alle andere symbolen actueel zijn.

Een EA hoeft OnTick niet te implementeren; OnTimer en OnTradeTransaction kunnen belangrijk zijn. AutoTrading uitzetten verbiedt nieuwe EA-handelsverzoeken maar stopt het programma of de lopende handler niet. Het is geen algemene noodknop die alle posities sluit.

Een verzoek is nog geen bevestigde uitvoering

OrderSend verstuurt een verzoek; true bewijst op zichzelf geen fill. Controleer retourcode en sluit orders, deals en posities aan. OrderCheck is voorafgaande controle, geen latere uitvoeringsgarantie. CTrade biedt onder meer Buy, Sell en PositionClose. Ook een succesvolle Buy-structuurcontrole vraagt ResultRetcode en ResultDeal voordat de uitvoering wordt aangenomen.

Het fictieve brongeval vraagt 0,10 lot koop en verliest zekerheid over het antwoord. Blind herhalen kan 0,20 lot geven als beide verzoeken vullen. Geen lokale bevestiging bewijst niet dat de server niets deed. Eerst de echte toestand onderzoeken.

Een aparte meldingstest heeft geen beginpositie en twee bevestigde koopfills D1=0,04 en D2=0,06. Een foutteller die bij ORDER_DELETE nul zet, eindigt na D1, D2, ORDER_DELETE op nul, maar na ORDER_DELETE, D1, D2 op 0,10. De bevestigde som is beide keren 0,10. Order verwijderen en positiehoeveelheid zijn andere velden. De echte administratie vraagt ook verkoop, omkering, correcties en rekeningmodus.

MetaQuotes garandeert geen aankomstprioriteit van transactiemeldingen. Maak geen algoritme dat één gunstige berichtvolgorde vereist. Slippage meten: gebruik echte fills en het gevulde volume behandelt een andere vraag: fillprijs tegenover de verwachte prijs.

Nieuw afzonderlijk EUR-tegenvoorbeeld: neem een fictieve EUR-rekening met budget EUR 40. Eén bevestigde 0,10 lot-EUR/USD-fill heeft bij 100.000 EUR/lot en veertigpipstop prijsverlies USD 40, bij aangenomen 1,25 USD/EUR EUR 32. Veronderstel EUR 2 complete extra kosten per order: EUR 34 totaal. Twee per ongeluk uitgevoerde identieke orders geven EUR 64 plus EUR 4 kosten, totaal EUR 68, dus EUR 28 boven budget.

Het model veronderstelt exacte stopfills, vaste conversie en tarief; echte stops garanderen die niet. Een correct berekend budget voor één verzoek beschermt niet tegen dubbele uitvoering. Bewaar daarom een idee-identificatie en bevestigde fills, niet alleen een lokaal “verzonden”-vinkje.

Historische tester en parameterselectie apart beoordelen

MT5 kan gegenereerde of broker-verzamelde opgenomen ticks gebruiken, afhankelijk van model en beschikbare historie. Noteer herkomst, informatietijden, contract, kosten en instellingen. Opgenomen ticks komen niet noodzakelijk uit één universele MetaQuotes-prijsbron.

Op dezelfde data parameters zoeken en de beste uitkomst als evaluatie tonen kan het bewijs overdrijven. Dat garandeert mathematisch noch een mooie curve noch een live mislukking. Bewaar alle geprobeerd varianten en een onaangeroerd evaluatieblok. Een strategie backtesten: data, kosten en tijdvolgorde controleren behandelt methode en grenzen.

Wat automatisering kan ondersteunen

Een EA kan herhaalbare controles uitvoeren of meerdere instrumenten volgen. Tweehonderd trades per maand, nachtwerking of snelheid zijn ontwerpvereisten, geen edge. Definieer benodigde invoer, gebeurtenissen en situaties waarin niet gehandeld mag worden.

Bijzondere publicaties vragen passende tests en toezicht, maar verbieden niet automatisch alle automatisering. Een marktplaatsgrafiek of anonieme forumsurvey is geen betrouwbare schatting van toekomstig resultaat. Toets precies het gedrag dat de toepassing nodig heeft.

Zelf schrijven en veilig herstellen

Een klein project kan controleren of precieze regels correct zijn uitgevoerd. Scope en vaardigheden bepalen de leertijd; drie tot zes maanden of zelf bouwen garandeert geen beter resultaat. Maak aparte acceptatiegevallen voor ontbrekende data, herstart, volumestap, onbekend antwoord en handmatige positiewijziging.

Herstel huidige blootstelling vóór hervatting. Bij netting delen strategieën hetzelfde symbool in één netto positie; een Magic Number creëert geen apart kapitaal of marge. Een reeds servergeaccepteerde gewone stop kan na lokaal afsluiten blijven bestaan. Een uitsluitend EA-gestuurde exit heeft wel werkend programma en serververbinding nodig.

MetaQuotes Virtual Hosting is een afzonderlijk gemigreerde omgeving met automatisch handelen toegestaan. De lokale AutoTrading-knop stopt die remote instantie niet. Een Windows-VPS is een andere dienst. VPS bij Forex: latentie, uitval en overdracht van een EA helpt beschikbaarheid en het volledige uitvoeringspad scheiden, zonder vast tarief of gegarandeerde fill.

Een handle bewijst nog geen bruikbare waarde

BarsCalculated geeft het aantal berekende indicatorwaarden of−1 bij fout. Controleer daarna CopyBuffer-retouraantal, buffer, offset en daadwerkelijke waarde. Een mislukte lezing is geen RSI0: dat kan juist een echte extreme waarde zijn.

Vier controles vóór een vergelijking

Van handle tot bruikbare invoerFictief model vraagt één indicatorwaarde. Geen terminalrun; 45 is geen beleggingssignaal.REKENVOORBEELDAOngeldige handleBHandle, nul gekopieerdCEén EMPTY_VALUEDEén geldige 45
Van handle tot bruikbare invoer. Fictief model vraagt één indicatorwaarde. Geen terminalrun; 45 is geen beleggingssignaal.

Aantal, index en lege marker vragen afzonderlijke controles. Ontbreken als nul invullen verandert de betekenis.

A
Ongeldige handle – Niet lezen.
B
Handle, nul gekopieerd – Nog geen bruikbare invoer.
C
Eén EMPTY_VALUE – Gekopieerd maar niet inhoudelijk beschikbaar.
D
Eén geldige 45 – Pas nu de regel beoordelen.

Het bronmodel vraagt één waarde. A: ongeldige handle, dus geen lezing. B: handle bestaat maar nul gekopieerd, wachten. C: één gekopieerd maar EMPTY_VALUE, geen bruikbare invoer. D: één geldige 45, de regel kan worden beoordeeld.45 is fictief en geen beleggingssignaal.

EMPTY_VALUE is standaard DBL_MAX, een eindig getal. Alleen een eindigheidstest is onvoldoende. Een custom indicator kan een eigen lege markering kiezen; controleer het contract en wijs niet iedere nul af. Bestaat een handle plus één EMPTY_VALUE, beoordeel dan geen strategiedrempel: registreer ontbreken en probeer op een passend volgend event opnieuw.

EA met API offline backtesten: beschikbare versies en null controleren behandelt aparte beschikbaarheid van API-versies. EA werkt alleen visueel: ontbrekende invoer van een onware conditie scheiden scheidt grafiekafhankelijkheid van expliciete data. Ontbrekende historie, lege marker en geldig getal zijn verschillende toestanden.

Een klein leerproject beginnen

  1. Gebruik een gecontroleerde demo-omgeving en een ingebouwd voorbeeld zoals Moving Average of MACD Sample op EUR/USD H1. Lees rapportmaten zonder die ene run als strategiecertificaat te behandelen.
  2. Lees primaire OnInit-, OnTick- en CTrade-documentatie om structuur en voorbeelden te vinden. Compilatie en ordergedrag vragen eigen controles.
  3. Schrijf invoer, instap, exit, sizing en geen-tradevoorwaarden uit. Benoem discretionaire keuzes en formaliseer alleen waar data en voorwaarden duidelijk zijn.
  4. Controleer databeschikbaarheid, gebeurtenissen en serverreacties vóór live blootstelling. Eén maand is slechts illustratief; demo en live kunnen verschillen. Gesimuleerde vertraging meet niet alle toekomstige fills.