Wat is 'Out-of-Sample' testen en waarom mag je dit maar één keer doen?

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Alex de Vries
Quantitatief Analist & Algo-Trading Expert
Optimalisatie & Performance Tuning · 2026-02-15 · 6 min leestijd

Je hebt een strategie gebouwd in Python, getest met Backtrader of VectorBT, en de resultaten zien er fantastisch uit.

Een jaarlijks rendement van 35% met een drawdown van maar 8%. Je bent bijna klaar om live te gaan. Maar wacht even. Die resultaten zijn misschien te mooi om waar te zijn, omdat je ze hebt geoptimaliseerd op precies dezelfde data die je hebt gebruikt om te testen. Hier komt Out-of-Sample testen om de hoek kijken, de harde realiteit die je strategie moet doorstaan.

Wat is Out-of-Sample testen?

Stel je voor dat je een examen maakt en je krijft thuis de vragen en antwoorden om te leren.

Daarna ga je dezelfde toets maken. Natuurlijk haal je een 10. Out-of-Sample (OOS) testen is het tegenovergestelde: je traint je model op data uit het verleden (In-Sample) en test het op data die het model nog nooit heeft gezien.

Het is de examenperiode zonder de antwoorden. In de wereld van algoritmische trading bots betekent dit dat je je Python-script optimaliseert op data van bijvoorbeeld 2018 tot en met 2022.

Vervolgens draai je diezelfde bot op data van 2023 tot nu. Die periode van 2023 is je Out-of-Sample dataset.

Het is de ultieme test voor de robuustheid van je strategie. Waarom is dit zo cruciaal? Omdat elke strategie kan worden afgestemd op ruis in plaats van echte marktstructuren. Met genoeg parameters kun je altijd een curve-fitting monster maken dat perfect presteert op historische data, maar volledig faalt zodra er nieuwe, onbekende data verschijnt. OOS testen onthult deze zwakte direct.

De kern van de werking: splitsen en testen

Het proces is logisch en streng. Je begint met een dataset.

Stel, je downloadt 10 jaar aan tickdata van een broker zoals Interactive Brokers of een crypto-exchange via een API.

Je splitst deze dataset in tweeën: de In-Sample (IS) set en de Out-of-Sample (OOS) set. Je optimaliseert je Python-bot alleen op de IS-set. Je test verschillende parameters voor je indicators, zoals de periode van een RSI of de afwijking van een Bollinger Band.

Misschien test je 50 verschillende combinaties. Je kiest de beste prestatie op basis van een risicogecorrigeerde metric, zoals de Sharpe-ratio. Zodra je die optimale parameters hebt gevonden, stop je met optimaliseren. Je laadt de OOS-set en draait je bot met die exacte parameters.

De resultaten die je nu ziet, zijn onafhankelijk en eerlijk. Ze laten zien wat er zou zijn gebeurd als je de strategie in die periode live had gedraaid.

OOS testen is de metafoor voor de markt: je leert de regels, maar je kent de toekomst niet.

Een veelgemaakte fout is het te vaak optimaliseren. Je ziet een slechte OOS-periode, past de parameters aan en test opnieuw.

Dit heet "peeking ahead" of data snooping. Je gebruikt de OOS-data dan alsnog om te leren, waardoor hij zijn onafhankelijkheid verliest. Dit is precies waarom je de OOS-test maar één keer mag doen.

Waarom mag je dit maar één keer doen?

Stel je voor dat je een examen hebt gemaakt en je zakt.

De leraar geeft je een herkansing met precies dezelfde vragen. Je leert de antwoorden uit je fouten en haalt nu een 10. Is je kennis nu beter? Nee, je hebt de test ongeldig gemaakt.

Hetzelfde geldt voor OOS testen. Elke keer dat je de OOS-data gebruikt om je strategie aan te passen, verlies je de zuiverheid van de test. Wil je meer zekerheid? Voer een stress test uit met kunstmatige data om je model echt op de proef te stellen.

De data wordt onderdeel van je optimalisatieproces. Je model begint zich aan te passen aan de ruis en patronen van die specifieke OOS-periode, in plaats van een algemene marktregel te leren. Vraag je je af hoe vaak je je parameters opnieuw moet optimaliseren om dit te voorkomen?

De eerste OOS-test is de enige echte. Als die faalt, is je strategie niet robuust genoeg. Je moet dan terug naar de tekentafel, nieuwe features toevoegen of je risicomanagement aanpassen, en een volledig nieuwe dataset splitsen.

Misschien gebruik je nu data van 2019-2023 als IS en 2024 als OOS. Maar je mag de data van 2024 nooit opnieuw gebruiken om te fine-tunen.

Er is een uitzondering: walk-forward optimalisatie. Dit is een model waarbij je een dynamisch venster gebruikt. Je traint op een periode, test op de volgende, verschuift het venster en herhaalt.

Dit is meer een continue validatie dan een eenmalige OOS-test. Voor de meeste retail bots is een eenmalige, harde OOS-test voldoende om vertrouwen op te bouwen.

Prijsindicaties en praktische voorbeelden

Laten we een concreet voorbeeld nemen met een Python-strategie voor daytraden op de S&P 500 future (ES). Je gebruikt de API van je broker om historische 1-uur data te laden.

Je In-Sample periode is 1 januari 2022 tot 31 december 2023. Je Out-of-Sample periode is januari 2024 tot nu.

Je optimaliseert een momentum-strategie op de IS-data. Je test een EMA crossover (bijvoorbeeld 12 vs 26 perioden) en een RSI filter. Na 100 iteraties vind je de beste combinatie: een 15/30 EMA crossover met een RSI van 35/65.

De resultaten zijn mooi: 22% rendement, Sharpe ratio van 1.8. Je draait deze parameters op de OOS-data van 2024. De resultaten vallen tegen: maar 5% rendement en een hogere drawdown. Dit betekent niet direct dat je strategie waardeloos is, maar wel dat deze specifieke setup teveel is afgestemd op de marktcondities van 2022-2023.

De markt in 2024 reageert anders. Je moet nu de fundamenten van je strategie heroverwegen, niet alleen de parameters.

Prijsindicaties voor data en tools variëren. Een kwalitatieve dataset via Polygon.io of Quandl kan €50-€200 per maand kosten.

Voor retail traders zijn brokers als Interactive Brokers of Tradovate vaak goedkoper. Je Python-omgeving is gratis, maar de rekenkracht voor backtests op tickdata kan oplopen. Een krachtige VPS voor je bot kost ongeveer €30-€50 per maand. De investering in goede data en compute power is essentieel voor betrouwbare OOS-tests.

Praktische tips voor robuuste testen

Een goede voorbereiding is het halve werk. Zorg dat je data schoon is.

Verwijder gaps, splits stock splits en dividendcorrecties, en zorg voor consistente tijdzones. Een foutieve dataset geeft een vals gevoel van veiligheid. Gebruik een strikte splitsing.

Voor financiële data is een 70/30 of 80/20 split gebruikelijk. Bij tijdreeksen is volgorde essentieel.

Gebruik nooit toekomstige data voor training. Zorg dat je In-Sample periode representatief is voor verschillende marktcondities (bull, bear, zijwaarts).

Focus op out-of-sample prestaties, niet op de In-Sample resultaten. Een strategie die in-sample een Sharpe-ratio van 3 heeft, maar out-of-sample een ratio van 0.5, is geen goede strategie. Je doel is generalisatie, niet curve-fitting. Implementeer risicomanagement vanaf het begin.

Gebruik stop-losses en position sizing in je backtest. Een strategie kan winstgevend zijn zonder risicobeheer, maar in de praktijk faal je snel.

  • Is de data gesplitst in IS en OOS?
  • Is de OOS-periode onafhankelijk?
  • Heb je de parameters maar één keer vastgesteld?
  • Zijn de prestaties in OOS acceptabel?

Test je risicoregels ook in de OOS-periode en voer een grondige robustness test uit. Sluit af met een checklist voor elke nieuwe strategie: Als je deze vragen met ja kunt beantwoorden, ben je klaar voor de volgende stap: paper trading of live gaan.

Onthoud, de markt is geen examen dat je kunt herkansen. Bereid je voor met één echte test.

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Over Alex de Vries

Alex is een ervaren quantitatief analist en Python-ontwikkelaar die complexe trading concepten vertaalt naar begrijpelijke, praktische handleidingen voor zowel beginners als gevorderden.

Volgende stap
Bekijk alle artikelen over Optimalisatie & Performance Tuning
Ga naar overzicht →