Een EA kan op demo een API lezen maar in de tester geen vergelijkbaar antwoord krijgen. Dat bewijst geen storing van de provider. Controleer eerst of de functie in die testomgeving beschikbaar is. Vandaag een historische tabel downloaden en haar huidige waarden aan vroegere besluiten toekennen is geen reconstructie van toenmalige kennis. Het model hieronder selecteert expliciete versies en maakt geen externe API-verbinding.

Een werkende WebRequest is geen historische gegevenslaag

MetaQuotes documenteert dat WebRequest niet in Strategy Tester kan worden uitgevoerd. Een endpoint aan toegestane terminal-URL’s toevoegen verwijdert die beperking niet. Scheid een niet-beschikbare testerfunctie van een netwerkprobleem, autorisatiefout of werkelijk ontvangen HTTP-antwoord in een gewone EA-run.

Een mislukte aanvraag vervangen door nul kan de betekenis veranderen: nul kan een geldige waarneming zijn, een fout betekent onbekende invoer. Een bestand in plaats van HTTP helpt alleen als dat bestand de juiste versies en beschikbaarheid bevat. Herzieningen die toen onbekend waren geven anders alsnog toekomstinformatie.

Leg waarneming, versie, waarde en beschikbaarheid vast voordat de signaallogica rechtstreeks van netwerkcode afhangt. MQL5-EA begrijpen: events, bufferindex en bevestigde uitvoering behandelt de scheiding tussen gegevens, besluit en uitvoering. Een andere adapter mag ontbrekende gegevens niet stilzwijgend anders interpreteren.

Online en offline dezelfde betekenis geven

De online adapter verwerkt een providerantwoord; de testadapter kiest een bewaard record dat op het beslismoment beschikbaar was. Beide leveren een geldige waarde, expliciete onbeschikbaarheid of fout aan de beslislaag. Dat is een voorgestelde codeorganisatie, geen complete handelsrobot of compatibiliteitsbelofte voor iedere API.

Bewaar ruwe antwoorden apart van testrecords. Noteer bron, schemaversie, ophaalmoment en bewijs van beschikbaarheid. De periode waarop een waarneming betrekking heeft is niet het moment waarop zij bekend werd. Een jaargangdatum alleen levert geen exacte UTC-publicatie-uurwaarde op. Een dagelijkse kopie bewijst op zichzelf geen beschikbaarheid binnen die dag.

FRED onderscheidt informatie zoals die nu bekend is van informatie uit een eerdere real-time-periode. Dat illustreert versiebeheer, geen universele FX-API. De betreffende API gebruikt ook datums; die zijn niet automatisch intraday-tijdstempels. Onderzoek de chronologie van de echte provider voordat je een vroegere beslisminuut invult.

FileOpen gebruikt in MQL5 een afgebakend bestandsgebied, bij testen ook een agentmap. Een relatief pad hoeft niet naar de gewone terminalmap te verwijzen. Controleer openen én lezen. Een ontbrekend bestand geeft een herkende ontbrekende invoer, geen lege tabel die als volledige historie geldt.

Welke versie mag het vroegere besluit gebruiken?

Drie fictieve antwoorden, één expliciete conventie

De verzonnen waarneming GDP-model heeft op 1 oktober 2026 om 12.00 UTC waarde "1.0" met revisielabel initial, om 13.00 "1.4" met revised en om 14.00 null met unavailable. Dit zijn geen echte bbp-publicaties of endpointrecords. availableAt beschrijft wanneer dit model toegang heeft, niet wanneer een order uitgevoerd wordt.

Toen beschikbare versie, niet de laatste van vandaag

Versie kiezen op het beslismomentFictieve GDP-model-events op 1 oktober 2026. Alle tijden UTC; availability is een opgegeven modelvoorwaarde, geen echte publicatiemeting.REKENVOORBEELD12.00 beschikbaarinitial: "1.0"13.00 beschikbaarrevised: "1.4"14.00 beschikbaarunavailable: null
Versie kiezen op het beslismoment. Fictieve GDP-model-events op 1 oktober 2026. Alle tijden UTC; availability is een opgegeven modelvoorwaarde, geen echte publicatiemeting.

Een latere revisie herschrijft een vroeger besluit niet. Expliciet ontbreken is in deze variant geen nul of oude waarde.

12.00 beschikbaar
initial: "1.0" – 12.30 kiest 1,0.
13.00 beschikbaar
revised: "1.4" – 13.30 kiest 1,4; revisie is geen vroegere kennis.
14.00 beschikbaar
unavailable: null – 14.30 blijft onbeschikbaar, geen automatische terugval.

Om 12.30 kiest het model 1,0; om 13.30 1,4; om 14.30 onbeschikbaar. Het nieuwste record binnen de tijdgrens bevat dan null: geen automatische terugval op 1,4 en geen omzetting naar nul. Een fictieve regel “waarde groter dan 1,2” is om 12.30 onwaar. De latere 1,4 gebruiken keert dat besluit om, ook met dezelfde prijsdata.

Dit is een toets van informatiebeschikbaarheid, geen winsttest. De tool selecteert records, geen signalen of rendement. Wil een strategie de laatst bekende waarde vasthouden, definieer dan vooraf een andere regel met toegestane ouderdom en reden voor ontbreken. Voeg terugval niet na een aantrekkelijker resultaat toe alsof de test ongewijzigd bleef.

Nieuw afzonderlijk EUR-tegenvoorbeeld: een fictieve beslisregel accepteert alleen een bekende kostenraming van maximaal EUR 4. De opgegeven raming is aanvankelijk EUR 3, later herzien naar EUR 5 en vervolgens expliciet onbeschikbaar. Op het vroege beslismoment blijft EUR 3 binnen budget met EUR 1 ruimte. Het latere bedrag zou EUR 1 boven budget liggen, maar was toen geen bekende invoer. Na null is de vraag niet “EUR 0 en dus gratis”: de raming ontbreekt en de regel kan geen nieuw besluit toestaan. De bedragen zijn alleen een didactisch invoermodel; er wordt geen order, kostenbesparing of winst afgeleid.

De lokale replay en haar grenzen

Plak een JSON-object met numerieke version 1 en events. Ieder event heeft precies availableAt, observation, value en revision. availableAt vraagt YYYY-MM-DDTHH: mm: ssZ zonder fractieseconden of andere offsets. observation en revision zijn tekst; value is getaltekst met decimale punt of null en wordt niet naar Number geconverteerd. Bewaar deze technische sleutels en tijdnotatie ongewijzigd.

Er mogen één tot tweehonderd events zijn, binnen 64 KiB JSON, acht niveaus en 2.000 waarden. observation en value zijn maximaal 128 tekens; revision maximaal 64. Geef decisionAt apart in hetzelfde UTC-formaat. De invoer is een verklaring, geen geverifieerde publicatieklok.

Speel de informatie op het beslismoment na

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.

Formaat en modelgrenzen

version: 1; events: 1–200 objecten met precies de velden availableAt, observation, value, revision. availableAt: YYYY-MM-DDTHH:mm:ssZ. observation: tekst van maximaal 128 tekens; revision: tekst van maximaal 64 tekens; value: getal als tekst met een decimale punt (maximaal 128 tekens), of null. Ontbrekend betekent niet nul.

De laatste versie met availableAt uiterlijk op het beslismoment wordt gekozen. Twee registraties met dezelfde observation en availableAt zijn dubbelzinnig en blokkeren de analyse. JSON-grenzen: 64 KiB, 8 niveaus, 2000 waarden. Tijden zijn opgegeven verklaringen; de pagina verifieert geen werkelijke publicatietijd.

Per waarneming kiest het model de laatste versie met availableAt uiterlijk op decisionAt. Vóór het eerste record is niets beschikbaar. Twee records met dezelfde observation en availableAt zijn dubbelzinnig en blokkeren analyse; plakvolgorde lost dat niet op. Het revisielabel is geen numerieke chronologische teller. Gebruik machinegetallen met punt, ook al leest de Nederlandse uitleg 1,0 en 1,4.

De oefening werkt op geplakte gegevens lokaal in de browser, zonder API-sleutels, ophalen van publicaties, verzending of blijvende opslag. Vul geen wachtwoorden of persoonsgegevens in. Geldig JSON bewijst geen echt archief. Verkeerd teruggedateerde revisies worden door een correct selectiealgoritme nog steeds onder verkeerde aannames nagespeeld.

Bewaar voor echte studies bronbewijs en één vaste datasetkopie. De tester kent aparte agentomgevingen en bestandsregels; overschrijf onderzoeksinvoer niet onderweg met actuele antwoorden. Koppel de dataversie aan Dezelfde backtest, ander resultaat: vergelijk twee vastgelegde runs, niet alleen aan een endpointnaam.

Python-backtest: records, informatietijd en uitvoering aansluiten behandelt tijdgebonden koppelingen. De kalenderuitleg bij Economische kalenders: periode, tijdzone en revisie controleren helpt periode, publicatie en revisie scheiden. Een datareplay simuleert niet automatisch Bid/Ask-prijzen, kosten, hoeveelheid en orderstatus. Begin met een paar besluiten zonder echte orders voordat je een verschil aan strategiekwaliteit toeschrijft.

Vóór je deze EA-uitkomst beoordeelt

  1. Definieer het gegevenscontract en de online/offline-adapter. Bewaar ruwe antwoorden en bewijs van beschikbaarheid. Ontbrekende historische versies blijven een beperking.
  2. Controleer een fictieve waarneming vóór de eerste publicatie, exact op de grens, vóór en na revisie en na expliciete onbeschikbaarheid. Test ook een conflicterend tijdstip.
  3. Bevestig in de tester welk bestand echt gelezen is en hoe ontbreken wordt verwerkt. Archiveer de dataset met rapport en log.
  4. Onderzoek daarna signalen, uitvoeringen en kosten apart. Correcte versieselectie valideert geen volledig handelsvoordeel.