Hoe test je een strategie op verschillende tijdsframes tegelijk?

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Alex de Vries
Quantitatief Analist & Algo-Trading Expert
Backtesting & Validatie Strategieën · 2026-02-15 · 7 min leestijd

Stel je voor: je hebt een strategie die op de 5-minuten grafiek fantastisch loopt, maar zodra je naar het uurlijks of dagelijks overzicht kijkt, stort alles in. Dat is het klassieke probleem van single-timeframe-denken. Je wilt weten of je bot hetzelfde doet als de markt sneller of langzamer beweegt. In deze gids ga je stap voor stap leren hoe je een strategie op meerdere tijdsframes tegelijk test, zodat je geen blinde vlekken meer hebt.

Wat je nodig hebt voordat je start

Je hebt een werkende Python-omgeving nodig met packages als pandas, numpy en backtrader of vectorbt.

Zorg dat je een broker-API key hebt van een partij als Interactive Brokers, Alpaca of een crypto-exchange als Binance. Je strategiecode moet al draaien op één timeframe, bijvoorbeeld 5 minuten. Een krachtige computer is handig: minimaal 16 GB RAM en een SSD, want je gaat veel data laden. Reken op een uurtje voorbereiding en 2–3 uur voor een complete run met 3–4 timeframes.

Voorkom dat je meteen alle historische data downloadt zonder limiet. Kies een beperkte maar representatieve periode, bijvoorbeeld de afgelopen 6 maanden tot 1 jaar.

Zo houd je de test overzichtelijk en vermijd je onnodige kosten bij data-aanbieders.

Check ook of je broker kosten rekent voor historische data; sommige rekenen €20–€50 per maand voor toegang tot diepere historie.

Stap 1: Kies de juiste timeframes

Begin met drie tot vier timeframes die logisch zijn voor je strategie. Voor daytrading: 5 minuten, 15 minuten en 1 uur.

Voor swingtrading: 1 uur, 4 uur en dag. Kies timeframes die passen bij de frequentie van je signalen. Als je signalen elke 10–20 candles verschijnen op 5 minuten, check dan ook 15 minuten en 1 uur om te zien of het ritme behouden blijft.

Hou rekening met overlap: een 15-minuten candle is drie keer een 5-minuten candle.

Zorg dat de start- en eindtijd voor elk timeframe identiek is. Bijvoorbeeld: 1 januari 2024 00:00 UTC tot 1 juli 2024 00:00 UTC. Anders vergelijk je appels met peren.

Dat betekent dat je soms dezelfde informatie dubkelijk verwerkt. Test daarom altijd met een aparte dataset per timeframe, zodat je geen kunstmatige overeenkomsten creëert. Sla minimaal 200–500 candles per timeframe op om statistische betrouwbaarheid te krijgen.

Vermijd de fout om te kiezen voor te veel timeframes. Vijf of meer leiden tot analyse-verlamming en verhoogde kans op toevalsresultaten. Houd het bij een helder setje en leg vast waarom je elk timeframe kiest.

Stap 2: Haal schone data op via de broker-API

Gebruik de API van je broker om historische prijsdata te downloaden. Bij Interactive Brokers vraag je via TWS of de REST API om bars van 5 minuten, 15 minuten en 1 uur.

Bij Binance haal je via de REST endpoint klines op met interval ‘5m’, ‘15m’ en ‘1h’.

Zorg dat je tijdzone consistent is: UTC voorkomt verdraaiing bij zomertijd. Sla de data lokaal op als CSV of parquet voor snelle hergebruik. Reken op een downloadtijd van 5–15 minuten per timeframe voor een half jaar aan 1-minuut data, afhankelijk van je verbinding.

Controleer op gaten: vergelijk het aantal verwachte candles met het aantal ontvangen candles. Bij crypto verwacht je bijvoorbeeld 6×24×180 ≈ 25.920 candles voor 5 minuten over 180 dagen.

Mis je er meer dan 1%? Haal opnieuw op of vul aan met een fallback bron. Veelgemaakte fout: zonder timestamp-check draaien. Timestamps kunnen wisselen tussen microseconden en seconden.

Normalizeer altijd naar milliseconden en zet de index om naar datetime. Vergeet niet om slippage en spread mee te nemen; bij een broker als IBKR kun je historische bid/ask krijgen, wat realistischer is dan alleen close-prijzen.

Stap 3: Bouw een multi-timeframe backtesting script in Python

Schrijf een wrapper die voor elk timeframe een aparte backtest draait en de resultaten verzamelt. Gebruik een library als backtrader of vectorbt; beide ondersteunen meerdere timeframes. Zorg dat je signaalberekening modulair is: leer hoe je een event-driven backtester bouwt, waarbij een functie van een dataframe een signaalserie maakt, ongeacht timeframe.

Roep deze functie aan voor elke dataset. Stel de resolutie in per timeframe.

Voor 5 minuten: candle size 300 seconden. Voor 15 minuten: 900 seconden.

Voor 1 uur: 3600 seconden. Zorg dat je portfolio-logica consistent blijft: risicopercentage per trade, stoploss en takeprofit in procenten, en ordergrootte berekend op account-equity. Test met een startkapitaal van €10.000–€25.000 voor realistische vergelijking.

Voeg slippage toe per timeframe: 0,05% voor 5 minuten, 0,1% voor 15 minuten, 0,15% voor 1 uur.

Commissies instellen: bijvoorbeeld €0,01 per aandeel of 0,1% bij crypto. Loop de backtest voor elk timeframe en sla op: equity curve, drawdown, winrate, gemiddelde winst/verlies, aantal trades. Vermijd de fout om te optimaliseren op equity curve; kijk naar out-of-sample prestaties. Code-idee in woorden: laad data, maak signaalreeks, initialiseer broker, voer trades uit op dezelfde momenten per timeframe, log resultaten. Vergeet niet dat het belang van tick data vs minute data voor nauwkeurige backtests cruciaal is voor je resultaten.

Houd een dictionary bij met per timeframe een dataframe van resultaten. Gebruik vectorbt voor snelheid: een vectorized benadering kan duizenden runs in seconden verwerken, inclusief de recovery time van je strategie berekenen.

Stap 4: Synchroniseer signalen en uitvoering

Een uitdaging is dat signalen op verschillende timeframes op andere momenten voorkomen. Los dit op door een gemeenschappelijke tijdindex te gebruiken en de uitvoering te bepalen op het fijnste timeframe.

Bijvoorbeeld: als je op 5 minuten een signaal krijgt om 10:00, voer je uit op 10:00.

Op 15 minuten en 1 uur kijk je of er op dat moment een signaal is en voer je ook uit. Gebruik een lookahead-bias check: zorg dat je alleen data gebruikt die op dat moment beschikbaar was. Resample de hogere timeframes correct naar het lagere timeframe zonder in de toekomst te kijken.

Een praktische aanpak: bouw een event-driven engine die per minuut of per seconde de signalen van alle timeframes verzamelt en dan pas uitvoert. Veelgemaakte fout: per ongeluk trades combineren van verschillende timeframes zonder limiet.

Stel een maximaal aantal gelijktijdige trades in, bijvoorbeeld 3–5 posities. Beperk het totale risico: max 2% per trade en max 6% totaal open risico. Zo voorkom je dat je portfolio explodeert als meerdere timeframes tegelijk signaleren.

Stap 5: Analyseer en vergelijk resultaten

Maak een overzichtelijk dashboard per timeframe. Toon de equity curve, drawdown, winrate, profit factor en gemiddelde hold-time.

Gebruik een simpele Excel-sheet of een notebook met tabellen. Let op consistentie: als de 5 minuten een winrate van 55% heeft en de 1 uur maar 48%, onderzoek waarom.

Misschien is de stoploss te strak voor de hogere timeframe. Vergelijk ook de verdeling van trades. Bij 5 minuten verwacht je 50–100 trades per maand; bij 1 uur 10–20.

Als de aantallen te laag zijn op hogere timeframes, verleng de testperiode of voeg extra instrumenten toe. Check de kostenimpact: bij 100 trades per maand met €0,50 per trade kom je op €50 maandelijkse kosten; bij 10 trades is dat €5. Let op de risico-rendementsverhouding. Een strategie met een gemiddelde winst van €80 en een gemiddelde verlies van €60 heeft een R:R van 1,33.

Als die op alle timeframes boven de 1,2 ligt, is de strategie robuust.

Vermijd de fout om alleen naar totale winst te kijken; drawdown is minstens zo belangrijk voor levensvatbaarheid.

Stap 6: Valideer met out-of-sample en live-paper trading

Deel je dataset op: 70% in-sample, 30% out-of-sample. Draai de strategie op de in-sample data en pas alleen parameters aan die logisch zijn voor je setup (bijvoorbeeld stoploss 1–3% en risk-per-trade 1–2%).

Test daarna op de out-of-sample periode zonder aanpassingen. Als de prestaties sterk achteruitgaan, is je model teveel gefinetuned.

Voer daarna een paper trading test uit via je broker-API. Laat de bot 1–2 weken live draaien met nepgeld en vergelijk de uitvoering met de backtest. Check slippage, orderfill en eventuele foutmeldingen.

Bij Interactive Brokers kun je een paper account koppelen; bij crypto-exchanges werkt een testnet zoals Binance Testnet. Veelgemaakte fout: te snel overstappen naar live trading.

Wacht tot je minimaal 3 maanden out-of-sample data en 2 weken paper trading stabiele resultaten laat zien. Zorg dat je risicomanagement op orde is: automatische stoploss, position sizing en een kill-switch voor extreme marktbewegingen.

Verificatie-checklist

  • Timeframes geselecteerd: 3–4, passend bij je strategie (bijv. 5m/15m/1u of 1u/4u/dag).
  • Data opgehaald via broker-API, consistent in tijdzone en formaat, zonder gaten.
  • Backtest-script gebouwd met aparte runs per timeframe en gezamenlijke output.
  • Slippage en commissies ingesteld: 0,05–0,15% afhankelijk van timeframe, €0,01–0,1% per trade.
  • Startkapitaal en risico ingesteld: €10.000–€25.000, 1–2% risico per trade, max 6% totaal.
  • Resultaten vergeleken: equity curves, drawdown, winrate, profit factor, R:R.
  • Out-of-sample test uitgevoerd: 70/30 verdeling, geen parameterwijzigingen achteraf.
  • Paper trading gedraaid: minimaal 2 weken, resultaten vergeleken met backtest.
  • Documentatie bijgewerkt: keuzes per timeframe, aannames en kosten.
  • Live trading start pas na positieve verificatie en met risicobeheer.

Als je deze checklist afvinkt, weet je dat je strategie op meerdere timeframes is getest en klaar is voor de volgende stap. Zo bouw je vertrouwen op en voorkom je verrassingen zodra de markt sneller of langzamer beweegt.

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 Backtesting & Validatie Strategieën
Ga naar overzicht →