Een rij marktdata kan volkomen accuraat zijn en toch geen bruikbaar bewijs vormen voor een backtest. De transactie heeft plaatsgevonden, de prijs klopt en de tijdstempel is geldig, maar de feed kan de gegevens laat hebben afgeleverd, een leverancier kan ze later hebben gecorrigeerd of de weergegeven markt was misschien niet toegankelijk voor je strategie.
Om te weten of historische data verhandelbaar was, moet je meer controleren dan alleen de tijdstempel van de gebeurtenis. Je moet weten wat de rij beschrijft, wanneer die beschikbaar kwam voor het systeem, van welke handelsplaats of welk instrument die afkomstig is en of de quote of transactie je order aannemelijk had kunnen ondersteunen.
Is een correcte historische prijs voldoende voor een backtest?
Nee. Nauwkeurigheid beantwoordt de vraag: ‘Welke prijs heeft de bron uiteindelijk vastgelegd?’ Een backtest moet ook antwoord geven op: ‘Wat had mijn strategie op het beslismoment kunnen weten?’ en ‘Wat had die kunnen uitvoeren?’ Dat zijn afzonderlijke vragen.
Stel dat een cryptotransactie om 12:00:00.120 wordt uitgevoerd, maar de stream van je dataleverancier die pas om 12:00:00.480 bij je proces aflevert. Een strategie die op .200 een beslissing neemt, kan die transactie niet gebruiken, ook al valt de tijd van de gebeurtenis vóór het beslismoment. Als het historische bestand alleen de tijd van de gebeurtenis bewaart, kan de backtest de strategie ongemerkt informatie geven die het live proces nog niet had ontvangen.
| Tijd of veld | Wat het je vertelt | Wat er misgaat in de backtest als dit ontbreekt |
|---|---|---|
| Gebeurtenistijd | Wanneer de beurs zegt dat de gebeurtenis plaatsvond | Markttijd verwarren met beschikbaarheid voor de strategie |
| Ontvangsttijd | Wanneer je collector het bericht ontving | Vertraagde data gebruiken alsof die direct binnenkwam |
| Volgnummer of update-ID | De plaats van de gebeurtenis in de feedvolgorde | Updates in de verkeerde volgorde verwerken of ongemerkt overslaan |
| Revisietijd | Wanneer een gecorrigeerde historische waarde bekend werd | Backtesten met een waarde die niet in de oorspronkelijke feed voorkwam |
Als je archief geen ontvangsttijden bevat, wees dan eerlijk over die lacune. Je kunt een veronderstelling over vertraging testen of je conclusie beperken tot onderzoek op basis van gebeurtenistijd. Je kunt de exacte informatieset niet reconstrueren met tijdstempels die nooit zijn opgeslagen.
Hoe bepaal ik of een quote uitvoerbaar was?
Begin bij de markt waar je order terecht zou zijn gekomen. De geconsolideerde beste bied- en laatprijs kan meerdere handelsplaatsen samenvatten. Dat bewijst niet dat je account toegang had tot de weergegeven hoeveelheid, dat de quote er nog stond toen je order aankwam of dat de handelsplaats je ordertype zou accepteren.
Bij een marketorder is een uitvoering tegen de middenprijs meestal fictie. Een bruikbaardere schatting loopt het zichtbare orderboek af op basis van de ordergrootte en telt daar vervolgens kosten en een aanname voor vertraging of marktimpact bij op. Heb je alleen top-of-bookdata, beperk dan je conclusie: je kunt het eerste niveau schatten, maar geen diepte afleiden die nooit is vastgelegd.
Bij een limitorder betekent het aantikken van de prijs niet dat je order is uitgevoerd. Orders vóór die van jou kunnen de beschikbare hoeveelheid eerst opmaken. Je positie in de wachtrij is met gewone snapshots meestal niet te achterhalen. Behandel een uitvoeringsregel op basis van een prijsaanraking daarom als een optimistisch scenario, niet als bewijs van wat er is gebeurd.
Een candle van 1 minuut kan laten zien dat de laagste prijs onder je limiet is gezakt. Die vertelt niet of je rustende order de handelsplaats vóór die daling bereikte, hoeveel er daar is verhandeld of hoeveel orders vóór die van jou in de wachtrij stonden.
Wat moet ik controleren voordat ik een marktdata-archief vertrouw?
Ik controleer eerst de alledaagse eigenschappen. Die brengen meer gebrekkig onderzoek aan het licht dan een geavanceerd uitvoeringsmodel boven op een defecte feed.
- Dekking: Ontbreken er intervallen, zijn er dubbele gebeurtenissen of gaten in de volgorde, of onverklaarbare periodes met nulvolume?
- Marktidentiteit: Verwijst het symbool door de tijd heen naar dezelfde beurs, hetzelfde contract, dezelfde noteringsvaluta en dezelfde instrumentspecificaties?
- Beschikbaarheid: Zijn zowel gebeurtenis- als ontvangsttijden bewaard? Zo niet, welke vertragingsaanname begrenst het resultaat?
- Correcties: Kun je het oorspronkelijke bericht onderscheiden van latere aanvullingen of revisies door de leverancier?
- Eenheden: Worden prijzen, hoeveelheden, contractvermenigvuldigers en tijdstempels consequent geïnterpreteerd?
Die laatste controle klinkt bijna te eenvoudig. Ik heb ooit een ochtend besteed aan het uitzoeken van een schijnbare verandering in het volatiliteitsregime, die uiteindelijk bleek te komen doordat een veld voor de hoeveelheid na een feedmigratie in andere eenheden werd uitgedrukt. De grafiek zag er prachtig uit; de eenheid klopte niet.
Hoe kan ik testen of databeschikbaarheid het resultaat verandert?
Voer een kleine gevoeligheidstest uit rond het beslismoment van de strategie. Verschuif bruikbare data met realistische vertragingen, laat updates met een onderbroken volgorde weg en vergelijk uitvoeringen met het orderboek van de daadwerkelijke handelsplaats, als je dat hebt. Rapporteer zowel het oorspronkelijke als het verslechterde resultaat. Als een kleine vertraging het effect tenietdoet, kan de strategie afhankelijk zijn van een informatievoorsprong die je dataverzameling niet betrouwbaar kan leveren.
Neem als concreet voorbeeld een signaal dat afgaat wanneer de beste biedprijs met één tick stijgt. Speel het eenmaal af met de gebeurtenistijd van de beurs en eenmaal met de ontvangsttijd van de collector. Als de versie op basis van gebeurtenistijd 40 keer handelt en die op basis van ontvangsttijd 27 keer, maakt dat verschil deel uit van het bewijs voor de strategie. Het resultaat van elke replay ook. Verberg de zwakkere replay niet omdat de data er minder netjes uitziet.
Paper trading is een nuttige volgende controle, omdat het vertragingen in de feed, verouderde quotes, fouten in symboolmapping en beperkingen van handelsplaatsen aan het licht brengt via hetzelfde operationele pad dat je onderzoekssysteem gebruikt. Toch bootst het niet elke wachtrijpositie of marktimpact in live handel na. Houd die grens duidelijk in beeld.
Wat betekent ‘verhandelbare data’ in de praktijk?
Het betekent dat de backtest kan uitleggen wanneer een waarneming plaatsvond, wanneer de strategie die kon gebruiken, van welke markt die afkomstig was en welk uitvoeringsbewijs de aangenomen uitvoering ondersteunt. Een schone prijsreeks is een beginpunt. Het onderzoek wordt geloofwaardig wanneer de aannames over timing, toegang en uitvoering een kritische controle doorstaan en het resultaat ook standhoudt als je die aannames minder gunstig maakt.
← Alle artikelen


