In dit artikel
Na dit artikel kun je…
- In de opgegeven gewone array de laatst gesloten bar aanwijzen.
- Handle, retouraantal en lege waarde afzonderlijk controleren.
- Ordermeldingen van bevestigde positiehoeveelheid onderscheiden.
Begrippen uitgelegd binnen het artikel
Backtesting Handelsplan Demorekening Drawdown Stop loss Requote: nieuwe prijsaanbiedingEen 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
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
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
- 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.
- Lees primaire OnInit-, OnTick- en CTrade-documentatie om structuur en voorbeelden te vinden. Compilatie en ordergedrag vragen eigen controles.
- Schrijf invoer, instap, exit, sizing en geen-tradevoorwaarden uit. Benoem discretionaire keuzes en formaliseer alleen waar data en voorwaarden duidelijk zijn.
- 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.
Test wat je hebt geleerd
Ongeveer 2 minuten oefenen.
Antwoord en uitleg bekijken
De oudste staat eerst. In juist deze gewone array is de laatste index de laatst gesloten gevraagde waarde.
Andere vragen
Verschilt dit van een Python-bot?
Een MQL5-EA gebruikt MT5-events en functies. Python kan een provider-API of MetaQuotes-terminalintegratie gebruiken, niet noodzakelijk alleen REST/FIX. Vergelijk echte afhankelijkheden, data, reacties en testvereisten; taal garandeert geen kwaliteit of snelheid.
Moet ik programmeren om een EA te draaien?
Niet noodzakelijk om een gedocumenteerde EX5 te gebruiken, wel moet je invoer, rechten, logs, risico en herstel begrijpen. Taal leren onthult geen verborgen bron. Er bestaat geen vaste paarwekenroute die adequate controle garandeert.
Waarom verschillen tester en live?
Onderzoek parameterselectie, data, spread, fees, vertraging en uitvoering afzonderlijk. Beste kiezen op dezelfde historie overdrijft mogelijk bewijs, maar garandeert geen specifieke toekomstige uitkomst. Bewaar varianten en aparte evaluatie.
Is een VPS altijd nodig?
Kies vanuit vereiste continuïteit en uitvoeringspad. Een VPS-naam garandeert geen latency of fill; ook lage frequentie kan toezicht vragen. MetaQuotes-migratie en Windows-VPS verschillen. De lokale knop stopt geen apart gemigreerde EA.
Bronnen en controle
- MetaQuotes — CopyBuffer
Primaire fysieke volgorde en retouraantal gelezen. Index 2 geldt uitsluitend voor de expliciete start 1/count 3/gewone-arrayconfiguratie.
- MetaQuotes — OnTick
Primaire chart-symbol-events, wachtrij en AutoTrading 60–76 gelezen. Verbod op verzoeken stopt de handler of remote host niet.
- MetaQuotes — OnTradeTransaction
Primaire transactieketen en niet-gegarandeerde aankomstprioriteit 103–110 gelezen. Eigen twee-fillmodel is een controlevoorbeeld, geen compleet live grootboek.
- MetaQuotes — BarsCalculated
Primaire berekend-aantal en−1-fout 79–96 gelezen. Handlebeschikbaarheid staat los van bruikbare bufferwaarde.
- MetaQuotes — Lege indicatorwaarden
Primaire EMPTY_VALUE=DBL_MAX en custom PLOT_EMPTY_VALUE55–67 gelezen. Een eindig getal kan een lege marker zijn; nul niet universeel afwijzen.
- MetaQuotes — CTrade. Buy
Primaire resultaatgrens 148–153 gelezen: succesvolle structuurcontrole is niet steeds succesvolle uitvoering; servercode en deal controleren.
- MetaTrader 5 — Virtual Hosting-migratie
Primaire automatische-handelsrechten 116–125 gelezen. Gemigreerde remote omgeving onderscheiden van lokale AutoTrading en een algemene Windows-VPS.
De berekeningen gebruiken expliciete aannames. Ze vervangen geen actuele marktgegevens of voorwaarden van de aanbieder.
