Wat is 'Resampling' en hoe maak je 5-minuten candles van tick data?

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Alex de Vries
Quantitatief Analist & Algo-Trading Expert
Data Acquisitie & Opschonen · 2026-02-15 · 6 min leestijd

Stel je voor: je hebt een berg aan tick data van Bitcoin, elke prijsbeweging tot op de milliseconde.

Je wilt daar bruikbare 5-minuten candles van maken voor je Python trading bot. Hoe pak je dat aan? Resampling is het antwoord. Je neemt rauwe tick data en vouwt die als het ware op tot compacte candles.

In dit stuk leg ik je uit hoe je dat stap-voor-stap doet, zonder ingewikkelde theorie, maar meteen aan de slag. Je krijgt de precieze code, timing en valkuilen.

Want als je bot verkeerde candles krijgt, faalt je backtest. En dat wil je niet.

Wat is resampling eigenlijk?

Resampling betekent simpelweg: neem een berg data en verpak die in nieuwe tijdseenheden. Tick data is elke transactie, elke prijsverandering.

Dat is extreem gedetailleerd, maar te veel voor een bot die op 5-minutenbasis handelt.

Je wilt samenvattingen: open, high, low, close. Zo’n candle is een kleine container met de belangrijkste info over een periode. Denk aan een Excel-sheet met duizenden rijen.

Je wilt die groeperen per 5 minuten. In Python doe je dat met Pandas. De functie resample() is je beste vriend. Je zet je tijd-index om en kiest een frequentie, bijvoorbeeld ‘5T’ voor 5 minuten.

Je data verandert van ruis naar inzicht. Waarom 5-minuten candles?

Omdat ze perfect zijn voor korte-termijn analyse. Te snel voor paniek, te langzaam voor noise.

Je bot kan hierop scalpen of swingen. Voor lange-termijn trends pak je candles van 1 uur of 1 dag. Voor snelle trades: 5 minuten. Simpel.

Wat je nodig hebt

Voordat je start: verzamel je materiaal. Een computer met Python 3.9 of nieuwer.

Een broker met API-toegang, bijvoorbeeld Interactive Brokers via IB-insync of Binance via ccxt. Je tick data haal je uit een CSV-bestand of direct via de API. Zorg dat je data timestamp-gegevens heeft, prijs en volume. Geen data? Gebruik een testdataset van je broker.

Je hebt ook libraries nodig: Pandas, NumPy en eventueel ccxt voor API-connecties. Installeer ze via pip.

Voor backtesting kun je backtrader of vectorbt gebruiken. Voor risicomanagement: een eenvoudige functie die je drawdown berekent.

Zorg dat je weet wat je risicopercentage is, bijvoorbeeld 1% per trade. Dat is je anker. Timing: reken op 30 minuten voor de eerste keer.

Eenmaal ingesteld, duurt een resample van 100.000 ticks maar seconden. De foutmarge is klein, maar een verkeerde tijdzone kan je data verpesten. Let op UTC. Altijd.

Stap-voor-stap: 5-minuten candles maken van tick data

Volg deze stappen nauwkeurig. We werken met Python en Pandas. Ik geef je de code, de timing en de veelgemaakte fouten.

Resultaat: een DataFrame met 5-minuten candles, ready voor je algoritmische trading bot.

  1. Laad je tick data in – Gebruik Pandas om je CSV te laden. Zorg dat de kolommen ‘timestamp’, ‘price’ en ‘volume’ heten. Zet de timestamp om naar datetime met pd.to_datetime(). Timing: 2 minuten. Fout: vergeten de tijdzone te zetten. Doe dit: df['timestamp'] = pd.to_datetime(df['timestamp'], utc=True).
  2. Maak een tijd-index – Zet de timestamp als index van je DataFrame. Dit is nodig voor resampling. Gebruik df.set_index('timestamp'). Timing: 1 minuut. Fout: index niet uniek. Check met df.index.is_unique. Herstel dubbele timestamps door te groeperen op tijd.
  3. Resample naar 5-minuten candles – Gebruik df.resample('5T'). Voor elke candle: open is de eerste prijs, high is hoogste, low laagste, close laatste. Volume tel je op. Code: candles = df.resample('5T').agg({'price': ['first', 'max', 'min', 'last'], 'volume': 'sum'}). Timing: 5 minuten voor 100.000 ticks. Fout: verkeerde volgorde. Sorteer je data eerst op tijd.
  4. Hernoem en schoon op – Flatten de kolomnamen: ‘open’, ‘high’, ‘low’, ‘close’, ‘volume’. Verwijder lege candles zonder volume. Timing: 2 minuten. Fout: NaN-waarden niet behandelen. Vervang ze met de vorige waarde of verwijder.
  5. Check de data – Plot een candle met Matplotlib of kijk in je bot. Timing: 5 minuten. Fout: verkeerde tijdseenheid. Gebruik ‘5T’ niet ‘5min’ – dat werkt anders in Pandas.
  6. Integreer met je bot – Zet de candles in een database of feed naar je backtesting-tool. Voor risicomanagement: voeg een stop-loss toe van 2% op basis van de candle-high. Timing: 10 minuten. Fout: te weinig data voor backtest. Gebruik minimaal 3 maanden tick data voor realistische resultaten.

Je kunt nu backtesten op Python met backtrader of vectorbt. Gebruik de API van je broker voor live data, bijvoorbeeld Binance via ccxt voor crypto.

Voor risicomanagement: voeg een functie toe die je maximum drawdown berekent op basis van je equity curve. Simpel: drawdown = (equity - equity.cummax()) / equity.cummax().

Veelgemaakte fouten en hoe je ze vermijdt

Een klassieke fout: resamplen zonder te sorteren. Zorg dat je een robuuste data pipeline bouwt die je data altijd correct sorteert.

Doe een df.sort_index() voor elke resample. Anders krijg je verkeerde candles.

Timing: 1 minuut extra. Impact: enorme fouten in je backtest. Een andere valkuil: verkeerde tijdseenheid. ‘5T’ is 5 minuten, ‘5min’ is soms anders in Python.

Test altijd met een kleine dataset. Gebruik df.head(10) om de eerste candles te checken.

Als de open en close niet kloppen, heb je een fout. Vergeet niet volume te sommeren. In tick data is volume per tick, maar in een candle moet het totaal zijn. Gebruik ‘sum’ voor volume.

Zonder dit lijkt je bot alsof er geen handel is. Ook: check op NaN-waarden.

Lege candles zijn normaal bij weinig handel, maar filter ze weg voor schone data. Tot slot: tijdzones. Altijd UTC. Als je broker local time gebruikt, converteer dan naar UTC.

Voorbeelden: Binance is UTC, Interactive Brokers is local time. Pas je code aan: df.index = df.index.tz_convert('UTC'). Dit voorkomt verkeerde candles in je backtest.

Waarom 5-minuten candles voor algoritmische trading?

5-minuten candles zijn ideaal voor korte-termijn bots. Ze zijn snel genoeg voor scalping op crypto, maar stabiel genoeg voor patronen.

Gebruik ze in Python met libraries als pandas_ta voor patronen zoals Doji of Hammer.

Voor backtesting: vectorbt is snel en ondersteunt resampled data. Je kunt je bot testen op historische data van je broker, bijvoorbeeld 1 jaar aan hoogwaardige tick data. In de praktijk: voor risicomanagement zet je een ATR (Average True Range) op 5-minuten candles.

Bereken de ATR en zet je stop-loss op 1.5x ATR. Dat beschermt tegen volatiliteit.

Voor BTC: als de candle boven de weerstand van $37.500 sluit, kan je bot een long entry nemen. Maar check altijd het volume: lage volume candles zijn minder betrouwbaar. Combineer dit met je broker API. Haal live tick data op via ccxt en resample real-time.

Voor backtesting: gebruik historical tick data van Binance of Kraken. Bepaal eerst hoeveel jaar aan data je nodig hebt voor een betrouwbare backtest. Zorg daarnaast dat je bot risico’s beheert: nooit meer dan 1% per trade.

Zo blijf je veilig.

Verificatie-checklist

Voordat je live gaat, loop deze lijst na. Elk item moet groen zijn voor een stabiele bot. Als alles klopt, is je bot klaar voor 5-minuten analyse.

  • Tick data is gesorteerd op timestamp en in UTC.
  • Resample code gebruikt ‘5T’ en correcte aggregatie (open, high, low, close, volume sum).
  • Geen NaN-waarden of lege candles in de output.
  • Data geïntegreerd in je backtesting-tool (bijv. backtrader of vectorbt).
  • Risicomanagement ingesteld: stop-loss op 2% of ATR-based.
  • Backtest uitgevoerd op minimaal 3 maanden data, resultaat gecontroleerd.
  • API-connectie met broker getest voor live data.

Je hebt nu een solide basis voor algoritmische trading. Begin klein, test veel, en bouw verder. Succes!

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.