In dit artikel
Na dit artikel kun je…
- Gedocumenteerd MT5-objectgedrag van de eigen null-simulatie onderscheiden.
- Onwaar en niet te beoordelen in een datastroom apart registreren.
- Modus en eerste afwijkende fase met een zelfstandig niet-handelend log onderzoeken.
Begrippen uitgelegd binnen het artikel
Expert Advisor (EA) BacktestingEen EA die alleen in de visuele MT5-tester werkt vraagt onderzoek naar zijn invoer. Komt het besluit uit expliciete data of uit een object op de grafiek? Vergelijk eerst versies, modi, gegevens en de eerste logafwijking voordat je regels verandert. Het voorbeeld hieronder voert geen MT5 uit en verstuurt geen order. Het scheidt een getal van onbeschikbare invoer.
Wat visuele modus daadwerkelijk verandert
MetaQuotes beschrijft dat grafische objecten buiten visueel testen niet worden getekend en eigenschappen van een aangemaakt object bij zulke tests nulwaarden opleveren. Voor visuele modus geldt die beperking niet. Dat is gedocumenteerd platformgedrag, geen door ons uitgevoerde proef op jouw EA en geen diagnose van iedere testafwijking.
Als de EA een lijnprijs of knoptoestand als invoer leest, registreer die stap apart van indicator- of koersdata. Bepaal eerst of de gevraagde waarde in die modus bestaat. Een expliciete beschikbaarheidsstatus voorkomt dat een technische nul ongemerkt als echte prijs geldt. Een zichtbare grafiek bewijst evenmin dat iedere benodigde invoer gereed is.
Een getal en een grafiekobject scheiden
Het zelfgemaakte niet-handelsmodel verklaart een positief signaal 1,1050 en drempel 1,1040. De voorwaarde is “signaal groter dan drempel”. Een expliciet getal wordt vergeleken met een objectlezing die als onbeschikbaar is gemarkeerd. Dit zijn toegewezen waarden, geen echte MT5-koersen of uitvoeringslogs.
Onbeschikbaar is geen nulprijs
Controleer beschikbaarheid vóór de vergelijking. Onze null is een modelstatus en geen verklaring over het teruggeeftype van MT5-objectfuncties.
- Expliciete waarde
- 1,1050 > 1,1040 – Waar als afzonderlijke modelvergelijking.
- Onbeschikbaar object
- null – Geen conditieresultaat berekenen.
- Foutieve vervanging
- 0 > 1,1040 – Onwaar lijkt normaal maar verbergt ontbrekende invoer.
- Gelijke waarden
- 1,1040 > 1,1040 – Onwaar, maar wel met geldige invoer beoordeeld.
Het expliciete getal 1,1050 is groter dan 1,1040: waar in het model. Voor het onbeschikbare object bewaren we null en beoordelen we de voorwaarde niet. De afzonderlijke foutieve variant vervangt ontbreken door nul: 0 > 1,1040 wordt onwaar. Zo lijkt een invoerprobleem een gewone negatieve conditie. Bij de omgekeerde voorwaarde “kleiner dan” zou die nul zelfs ten onrechte voldoen.
Null is onze gekozen representatie, niet de verklaring dat een MT5-objectfunctie null teruggeeft. De documentatie en de redeneervariant blijven gescheiden. Voeg geen willekeurige terugvalwaarde toe om een aantrekkelijkere uitkomst te krijgen. Een oud grafiekgetal is niet automatisch passende vervanging.
Scheid gegevens van een grafiekobject
Dit leervoorbeeld werkt lokaal in je browser: geen verbinding met een rekening of API, geen verzending en geen blijvende opslag van je invoer. Vul geen wachtwoorden of persoonsgegevens in.
De lokale oefening laat twee positieve eindige getallen veranderen tussen 10⁻⁸ en 10⁸, met maximaal vijftien cijfers. Gebruik de aangegeven decimale komma of ondubbelzinnige punt zonder duizendtalscheiding; technische code behoudt haar puntnotatie. De moduskeuze neemt in deze demonstratie aan dat het object in visueel model de signaalwaarde bevat en anders niet beschikbaar is.
De browser leest geen grafiek of rekening, voert geen platformtest uit en maakt geen beleggingssignaal. Hij verzendt of bewaart de invoer niet blijvend. Een ware vergelijking bewijst geen andere criteria, rechten of orderuitvoering. De oefening laat zien waarom onwaar en niet te beoordelen verschillende toestanden zijn.
Nieuw afzonderlijk EUR-tegenvoorbeeld: neem een fictieve beslisregel die alleen een bekende geplande verliesraming van maximaal EUR 20 accepteert. Bij twee duizend EUR basishoeveelheid, instap 1,1000 en modelstop 1,0900 USD per EUR is prijsverlies USD 20. Met aangenomen conversie 1,25 USD per EUR is dat EUR 16 vóór kosten, dus EUR 4 onder de limiet. Ontbreekt de stop, dan is die raming onbekend. Haar als EUR 0 invoeren zou de limiet schijnbaar laten slagen. Het voorbeeld berekent gepland verlies, geen gegarandeerd maximaal verlies en geen echte order. Een beschikbaarheidscontrole is dus relevant vóór een financiële formule, niet pas na een gunstige uitkomst.
Modus registreren zonder handelen
MQL_TESTER, MQL_VISUAL_MODE en MQL_OPTIMIZATION beschrijven de programmaomgeving. TERMINAL_BUILD geeft de terminalbuild. Sla werkelijke lezingen op in plaats van de modus uit de vorm van een venster af te leiden. Deze velden alleen bewijzen niet dat data en parameters gelijk zijn.
De zelfstandige diagnostische EA hieronder logt in OnInit en heeft een lege OnTick. Hij verzendt of wijzigt geen orders, berekent geen signaal en beheert geen posities. OnInit beschrijft de initialisatiesignatuur; PrintFormat de geformatteerde uitvoer. Bewaar als afzonderlijk MQ5-bestand en compileer in je eigen MetaEditor. De broncode blijft ongewijzigd; hier is geen compilatie of MT5-run uitgevoerd.
#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() {}
Voeg geen tweede OnInit aan een bestaande EA toe en vervang diens initialisatie niet blind. Gerichte logging moet de bestaande volgorde bewaren. De testerdocumentatie noemt bij optimalisatie een uitzondering voor Print/PrintFormat binnen OnInit. Ontbrekende printregels uit andere fasen bewijzen daarom niet dat die fasen nooit zijn uitgevoerd.
Zoek het eerste verschil, niet het hoogste winsttotaal
Bewaar een gepaard dossier met visueel/niet-visueel, terminal- en codeversie, parameters, symbool, timeframe, tickmodel, gewenste en echte start, dataset, kosten en begintoestand. Archiveer instellingenbestanden en versies. Zijn verklaringen verschillend, schrijf het hele resultaatverschil niet aan het grafiekvenster toe. Dezelfde backtest, ander resultaat: vergelijk twee vastgelegde runs helpt die gegevens vergelijken.
Zoek de vroegste afwijking in ophalen, beschikbaarheid, tijdstempel, indicatorgereedheid, signaal, conditie of besluit. “Winst 120 in plaats van 80” noemt geen oorzaak. Bewaar originele logs en maak er een kleine vergelijkingstabel naast. Bedenk geen waarden die destijds niet werden geregistreerd.
Gebruik stabiele observatie-ID’s en bewaar welke invoer en tijd of volgnummer is gevraagd en of die geaccepteerd werd. Alles loggen zonder koppeling kan het verschil juist verbergen. Dit zijn ontwerpkeuzes voor onderzoek, geen garantie dat ieder ontbrekend verband vanzelf uit logs komt.
De signaallaag laten bestaan zonder tekening
Laat de berekening een expliciete waarde met beschikbaarheidsstatus leveren. De grafische laag kan die tonen; tekenen uitzetten hoeft dan niet doelbewust de gegevensbron te veranderen. Controleer dezelfde module op bekende invoer, ontbrekende invoer en exact gelijke waarde en drempel. Bij 1,1040 > 1,1040 is de vergelijking onwaar, maar zij is wél beoordeeld.
Deze ingreep adresseert één mogelijke afhankelijkheid. Versies, andere code, gegevens en kosten blijven relevant, dus gelijke totale resultaten zijn niet gegarandeerd. De visuele uitzondering uit de MetaQuotes-uitleg verklaart een platformgrens zonder je eigen programma te certificeren.
Heb je geen broncode, geef de ontwikkelaar het gepaarde dossier en de eerste gedocumenteerde afwijking. Vervang diagnose niet door live proeforders. Backtesten in MT4 en MT5: ticks, kosten en klokken controleren behandelt bredere voorbereiding en de grenzen van de modelleringskeuze.
Een kleine diagnose voorbereiden
- Bewaar één gepaard modusdossier en markeer onbevestigde velden. Dezelfde EA-naam bewijst geen identieke omgeving.
- Controleer eerst de modelwaarden 1,1050 en 1,1040 en daarna gelijke waarden. Het onbeschikbare pad blijft null ongeacht de getalvergelijking.
- Verzamel in een aparte testerconfiguratie niet-handelende logs met observatie-ID’s en vergelijk de eerste afwijkende fase.
- Wijzig één oorzaak tegelijk en behoud de oude rapporten. Een betere eindwinst verklaart niet waarom de uitkomst veranderde.
Test wat je hebt geleerd
Ongeveer 2 minuten oefenen.
Antwoord en uitleg bekijken
Dat is de expliciete modelregel. Het beweert niet dat de MT5-objectfunctie zelf null teruggeeft.
Andere vragen
Geeft MT5 dan null terug?
Nee, de primaire uitleg beschrijft nulwaarden bij objecteigenschappen buiten visueel testen. Null is de status die onze browserdemonstratie voor ontbreken kiest. Onderzoek echte functie, fout, modus en verwachte data afzonderlijk.
Betekent waar dat de EA een trade opent?
Nee. De oefening vergelijkt twee gedeclareerde getallen zonder terminal, rekening of orders. Datareadiness, andere voorwaarden, rechten en uitvoering zijn andere fasen. Het is geen beleggingssignaal of volledige MT5-simulatie.
Worden alle tests gelijk als ik objecten verwijder?
Niet gegarandeerd. Dit behandelt één mogelijke afhankelijkheid. Bewaar eerst versies, data, tickmodel, kosten en beginsituatie en zoek het eerste verschil. Meerdere onderdelen tegelijk wijzigen of alleen hogere winst bekijken bewijst geen oorzaak.
Is het logscript een handelsstrategie?
Nee. Het logt configuratie in OnInit met een lege OnTick en doet geen positiebeheer. Compileer een eigen apart bestand en bewaar het resultaat. Voeg geen tweede OnInit toe en vervang geen bestaande initialisatie zonder begrip van het programma.
Bronnen en controle
- MetaQuotes — Testing Trading Strategies
Primaire grafische-objectsectie gelezen: nulwaarden buiten visueel testen en visuele uitzondering. Ook Print/PrintFormat-uitzondering binnen OnInit bij optimalisatie gecontroleerd. Niet de volledige pagina als nieuw experiment behandeld.
- MetaQuotes — Programma-eigenschappen
Primaire MQL_TESTER, MQL_VISUAL_MODE en MQL_OPTIMIZATION-definities gelezen; vlaggen beschrijven de omgeving, niet datakwaliteit.
- MetaQuotes — Terminaleigenschappen
Primaire TERMINAL_BUILD-definitie gelezen: werkelijke clientbuild, geen code- of datasnapshotidentiteit.
- MetaQuotes — OnInit
Primaire initialisatiesignatuur en INIT_SUCCEEDED gelezen. Zelfstandig voorbeeld niet blind als extra handler in bestaande code opnemen.
- MetaQuotes — PrintFormat
Primaire relevante opmaakregels gelezen; aantal, type en volgorde moeten bij de specificaties passen. Documentatie is geen eigen terminaltest.
De berekeningen gebruiken expliciete aannames. Ze vervangen geen actuele marktgegevens of voorwaarden van de aanbieder.
