In dit artikel
Na dit artikel kun je…
- Een CSV met expliciete offsets en een afgebakend rooster voorbereiden.
- Lege posities, duplicaten en prijsconflicten afzonderlijk interpreteren.
- Onbekende tussenliggende prijzen van vastgestelde fills onderscheiden.
Begrippen uitgelegd binnen het artikel
Backtesting Bied- en laatprijs Expert Advisor (EA)Een ontbrekende candle vertelt niet of de markt gesloten was of een download mislukte. Vergelijk eerst de export met een verklaard tijdvenster en de candleconventies van de provider. De lokale CSV-controle hieronder zoekt lege roosterposities, herhaalde tijdstempels, prijsconflicten en ongeldige regels. Zij verzint geen koersen en valideert geen handelsstrategie.
Definieer eerst welke records verwacht worden
Bewaar instrument, provider, prijsbasis en timeframe. Bid-, Ask- en middenkoerscandles zijn verschillende reeksen; alleen EUR/USD als label is onvoldoende. Vergelijk dezelfde openingsmomenten. Een export met sluitingstijden lijkt tegenover een openingsrooster verschoven, ook als beide bronnen bruikbare prijzen bevatten.
Ondersteund is precies de kop timestamp,open,high,low,close en daarna vijf kommagescheiden velden per regel. Prijzen gebruiken een decimale punt zonder duizendtalscheiding. Aanhalingstekens, extra kolommen of puntkomma’s vragen voorafgaande gedocumenteerde conversie. De checker raadt hun betekenis niet.
Gebruik volledige tijdstempels zoals 2026-10-12T08:00:00Z of 2026-10-12T10:00:00+02:00: hetzelfde moment. Seconden zijn verplicht; maximaal drie decimalen voor fractieseconden zijn mogelijk. Een serverklok zonder offset noemt geen tijdzone. Een Z achter lokale tijd plakken is geen UTC-conversie. Bewaar bij dagelijkse candles ook de providerinstellingen voor tijdzone en uitlijning; een kalenderdag is niet overal een vast verstreken interval.
Vul eerste en laatste verwachte baropening apart in, beide inclusief. M1 van 08.00 tot en met 08.11 telt twaalf posities. Het eerste moment verankert het rooster; het laatste moet exact daarop vallen. Het model gebruikt gelijke verstreken intervallen. Een kalendermaand of lokale zomertijd-overgangsdag past niet automatisch op 1.440 minuten.
Een bestand lokaal controleren
Kies het voorbereide CSV-bestand, een geheel interval van één tot 1.440 minuten en beide grenzen. De browser analyseert de inhoud zonder verzending of blijvende opslag. Limieten zijn 2 MiB, 100.000 regels en 100.000 verwachte roosterposities. Splits grotere perioden in gedocumenteerde vensters zonder overlap.
Een prijsveld mag maximaal vijftien significante cijfers en 48 tekens hebben. Te precieze records worden afgewezen, niet afgerond zodat een verschil verdwijnt. Technische CSV-getallen behouden hun punt, ook al gebruikt de Nederlandse uitleg een decimale komma.
Controleer de dekking van het CSV-tijdrooster
Het bestand wordt lokaal geanalyseerd, niet verstuurd of blijvend opgeslagen. Formaat: timestamp,open,high,low,close. Maximaal 2 MiB. Tijdstempels vereisen Z of een expliciete UTC-offset.
Schoon voorbeeld downloaden · Diagnostisch voorbeeld downloaden
Twaalf regels zijn geen twaalf gedekte minuten
De oefenbestanden zijn synthetisch, geen broker- of rekeningdata. Neem M1 van 08.00 tot en met 08.11 UTC. Het schone bestand heeft twaalf verschillende geldige tijdstempels. Het diagnostische heeft twaalf regels maar slechts acht bezette geldige roosterposities.
- Vier posities zijn leeg: 08.03, 08.04, 08.10 en 08.11.
- Twee regels herhalen een tijdstempel: 08.02 en 08.06 komen nogmaals voor.
- Eén prijsconflict: twee op zichzelf geldige 08.06-candles verschillen in OHLC.
- Eén ongeldige regel: de high van 08.04 ligt onder de opening.
- Eén record valt buiten het rooster: 08.07.30; één tijdsomkering zet 08.08 na 08.09.
De langste gaten omvatten ieder twee verwachte baropeningen. Bij gelijkstand verschijnt het eerste, 08.03–08.04. Dit is geen gemeten storingsduur. Wat binnen die periode gebeurde vraagt informatie buiten het bestand.
Bezet is nog niet ondubbelzinnig
Dekking telt geldige verschillende tijden. Een bezette positie kan nog tegenstrijdige prijzen bevatten.
- 08.00–08.02
- 3 posities bezet – Herhaling 08.02 voegt niets toe.
- 08.03–08.04
- 2 leeg – 08.04 regel is ongeldig.
- 08.05–08.09
- 5 posities bezet – 08.06 heeft een prijsconflict; 08.07.30 telt niet mee.
- 08.10–08.11
- 2 leeg – Langste gaten hebben ieder twee posities.
- Totaal
- 8/12 bezet – 4 leeg én één nog onopgelost prijsconflict.
Twaalf verwachte posities min acht bezette geeft vier leeg. De conflicterende 08.06 telt als bezet, niet als twee minuten en evenmin als opgelost. Daardoor zijn dekking en prijsbetrouwbaarheid aparte uitkomsten. Lees beide voordat je een dataset accepteert.
Onderzoeken vóór automatisch herstellen
De checker telt verschillende geldige tijdstempels, geen regels. Een identieke herhaling voegt geen dekking toe. Twee geldige maar verschillende candles op hetzelfde tijdstip bezetten één positie en vormen tegelijk een conflict. Ook nul gaten kan dus onbruikbare invoer bevatten. Bewaar beide versies en sluit aan op de oorspronkelijke bron; de tool kiest niet de nieuwste, hoogste of gunstigste prijs.
Een ongeldige regel draagt niet bij aan dekking. Prijzen moeten eindig zijn. High mag niet lager zijn dan open, close of low; low niet hoger dan de andere prijzen. Records buiten het venster of buiten het rooster helpen niet. Alle bevindingen worden geteld, maar per groep verschijnen maximaal twintig voorbeelden om de weergave hanteerbaar te houden.
Vergelijk een weekendgat met de werkelijke productsessie en candleconstructie. Onderzoek een onverwacht gat met downloadlog en bronrecords. De OANDA-definitie van complete zegt dat het candle-einde niet in de toekomst ligt; zij certificeert niet een heel exportbestand. Nederlandse taal of een Amsterdamse gebruikersklok bepaalt de providerkalender niet.
Vul ontbreken niet met de laatste prijs om een doorlopende lijn te krijgen. Dat creëert synthetische candles en kan indicatoren en stopverwerking veranderen. Sorteren lost tegenstrijdige OHLC evenmin op. Bewaar origineel, correctieversie en reden met controleerbare bron.
Nieuw afzonderlijk EUR-tegenvoorbeeld: veronderstel alleen voor een model een long van EUR 10.000, gekocht op Ask 1,1000 USD/EUR. Bekend eindpunt is Bid 1,1010; een tussentijdse minuut ontbreekt. Een pad zonder stopcontact en een pad via Bid 1,0985 passen beide bij die eindpunten. De gewone modelstop op 1,0990 kan in het tweede pad geraakt zijn; de eindprijs beslist dat niet.
Alleen onder afzonderlijke aangenomen exacte fills geeft sluiten op 1,1010 USD +10 en sluiten op 1,0990 USD −10. Bij fictieve constante conversie 1,25 USD/EUR is dat EUR +8 tegenover EUR −8 vóór overige kosten. Dat verschil van EUR 16 is een vergelijking van toegewezen scenario’s, geen reconstructie van een echte stopfill. Een stop garandeert zijn prijs niet. Laat onbekende historie onbekend in plaats van de gunstige uitkomst in te vullen.
Volledige OHLC bewijst geen volledige tickhistorie
Een bar bewaart niet de hele koersvolgorde. MetaQuotes beschrijft dat de tester ticks kan genereren wanneer de minuutbar bestaat maar haar ticks ontbreken. Volledige M1-CSV-dekking bewijst dus niet dat uitsluitend opgenomen ticks zijn gebruikt. Controleer gekozen model, beschikbare tickperiode en testerlog.
Vergelijk ook gevraagde en werkelijke start. De primaire voorbereidingsuitleg beschrijft dat onvoldoende historie het begin kan verschuiven. Bij CopyRates kunnen data nog worden opgebouwd of gedownload; controleer gevraagde tegenover teruggegeven aantallen en fouten. Een succesvol geopende export is geen bewijs dat alle gevraagde records ontvangen zijn.
Backtesten in MT4 en MT5: ticks, kosten en klokken controleren behandelt die platforminstellingen. Een strategie backtesten: data, kosten en tijdvolgorde controleren verbindt gegevenscontrole met afzonderlijk bewijs voor regels, prijszijden, kosten en uitvoering. Deze checker simuleert dat allemaal niet.
Wat met het rapport te doen
- Bewaar originele export, instrument, prijsbasis, tijdzone, sessiebron, instellingen en rapport. Zo is precies dezelfde roostercontrole herhaalbaar.
- Onderzoek langste gat en ieder conflict via bron en downloadlog. Documenteer een bevestigde sluiting of verkrijg een gecorrigeerde export. Bewaar ook de oude uitkomst.
- Controleer op het geaccepteerde tijdvak een kleine strategieproef met relevante signalen en uitvoeringsvolgorde. Python-backtest: records, informatietijd en uitvoering aansluiten behandelt een aparte rekenmotor. Een geslaagde roostercontrole voorspelt geen rendement of toekomstige providerbetrouwbaarheid.
Test wat je hebt geleerd
Ongeveer 2 minuten oefenen.
Antwoord en uitleg bekijken
12−8 =4. Herhaalde en buiten-roosterregels voegen geen posities toe.
Andere vragen
Bewijst een lege minuut een providerfout?
Nee. De tool kent productsessie en publicatieregels niet. Vergelijk tijdzone, rooster, bronschema en downloadlog vóór een prijs wordt ingevuld. Bewaar het document dat de sluiting onderbouwt.
Hoe kan nul gaten samengaan met conflicten?
Een positie met twee geldige verschillende OHLC-records is bezet maar dubbelzinnig. De checker rapporteert dat apart en kiest geen prijs. Sorteren verandert de tegenstelling niet; sluit aan op de oorspronkelijke bron.
Kan ieder CSV direct worden ingelezen?
Nee. Er zijn precies vijf kolommen nodig, puntdecimalen, expliciete offsets en baropeningen. Quotes, puntkomma’s of extra velden vragen conversie. Alleen een scheidingsteken veranderen lost een onduidelijke tijdzone niet op.
Is een compleet rooster voldoende voor een goede backtest?
Nee. Het reconstrueert geen tickpad, spreadhistorie, fees of orders. Controleer bron, conflicten, model en chronologie apart. Bewaar vorige resultaten bij datawijziging; geen uitkomst bewijst toekomstige winst.
Bronnen en controle
- OANDA — Candledefinities
Primaire OHLC- en complete-definitie gelezen: voltooid candle-interval betekent geen volledige export. Providerconventie, geen Nederlandse productsessie.
- OANDA — Candle-uitlijning
Primaire zoekweergave gelezen van dailyAlignment, alignmentTimezone en UTC-teruggegeven tijden. Geen eigen API-run of kalenderinventaris.
- MetaQuotes — Tickgeneratie
Relevante primaire uitleg eerder gelezen over gegenereerde vervanging bij aanwezige minuutbar en ontbrekende ticks. Huidige heropening gaf fout; niet als nieuw uitgevoerde platformtest voorgesteld.
- MetaQuotes — Testvoorbereiding
Relevante primaire historie- en startvoorbereiding eerder gelezen. Gevraagde en werkelijke teststart apart controleren; geen universele vaste buffer afgeleid.
- MetaQuotes — CopyRates
Primaire relevante retouraantallen en mogelijke verdere historieopbouw eerder gelezen. Een gridrapport valideert de download of tickreeks niet.
De berekeningen gebruiken expliciete aannames. Ze vervangen geen actuele marktgegevens of voorwaarden van de aanbieder.
