Koersdata opslaan in een HDF5 bestand voor snelle toegang
Stel je voor: je hebt een prachtige backtest-omgeving gebouwd in Python, je broker API staat te popelen, en je risicomanagement-script is strak getuned.
Maar dan moet je elke keer opnieuw die koersdata ophalen bij je broker. Tragere backtests, rate limits, en frustratie. Dat is verleden tijd met HDF5. Je slaat één keer data op en haalt hem lokaal, supersnel, terug.
Even een bakkie doen terwijl je bot draait, zonder dat je server overuren maakt. HDF5 staat voor Hierarchical Data Format versie 5.
Het is een bestandsformaat dat enorm veel data compact opslaat en razendsnel uitleest.
Denk aan een ordelijke bibliotheek met kamers, planken en boeken. Je vindt wat je zoekt zonder te grasduinen. In de wereld van algoritmische trading bots is dat goud waard, zeker bij high-frequency backtests of als je meerdere tijdframes tegelijk analyseert.
Waarom HDF5 voor algoritmische trading bots?
Voor backtests wil je voorspelbare snelheid. Met HDF5 haal je data in een fractie van een seconde uit lokale opslag, zonder dat je elke keer bij je broker aanklopt.
Dat bespaart API calls, verlaagt kosten en voorkomt throttling. Je risicomanagement krijgt meer rust omdat je datasets stabiel zijn en herhaalbaar. Stel je werkt met een broker zoals Interactive Brokers of LMAX, of een crypto-exchange als Binance. Je haalt 1-minuut candles voor EUR/USD en BTC/USDT.
Als je die in HDF5 bewaart, open je het bestand en lees je in één keer duizenden regels in. Dat voelt als een sprintje in plaats van een wandeling.
Backtests met machinelearning-modellen of event-driven architecturen winnen enorm aan snelheid. Je laadt een paar groepen symbolen en tijdframes in één keer, en je bot draait verder zonder network latency.
Voor live trading gebruik je HDF5 als cache: je vergelijkt live prijzen met lokale historische data voor snelle signalen.
Hoe HDF5 werkt: datasets, groepen en attributen
Je kunt HDF5 zien als een mappenstructuur in één bestand. Groepen zijn mappen, datasets zijn bestanden.
Je kunt per broker, symbool en timeframe een groep aanmaken. Binnen die groep sla je een dataset op met kolommen als timestamp, open, high, low, close, volume.
Zo blijft het overzichtelijk en snel. Een dataset is een reeks getallen in een vaste structuur. Je definieert de datatype en vorm, bijvoorbeeld (n_rows, 6) voor OHLCV plus een tijdkolom.
HDF5 comprimeert data slim, zonder dat je inleessnelheid verliest. Voor 10 jaar 1-minuut candles van een paar valutaparen scheelt dat tientallen megabytes, terwijl je toch milliseconden leest.
Attributen zijn extra info die je bij een dataset of groep legt: broker-naam, symbool, timeframe, resolutie, tijdzone, en zelfs een versienummer van je datacleaning-stap. Dat is handig voor reproduceerbaarheid in backtests en voor je risicomanagement-controles. Je kunt data ook chunken: grote datasets opdelen in blokken. Zo laad je alleen het stuk dat je nodig hebt, bijvoorbeeld de afgelopen maand voor een snelle signalen-check. Dat is ideaal voor event-driven bots die steeds kleine stukjes data verwerken.
Praktisch: Python-code voor opslag en uitlezen
Gebruik de library h5py. Installeer met pip install h5py numpy pandas.
Voorbeeld: je maakt een bestand aan, een groep per broker, en een dataset per symbool-timeframe.
import h5py
import numpy as np
with h5py.File("data.h5", "a") as f:
grp = f.create_group("interactive_brokers")
dset = grp.create_dataset("EURUSD_1m", data=df.values, compression="gzip")
Stel je hebt een pandas DataFrame df met kolommen timestamp, open, high, low, close, volume. Zet timestamp om naar integers (UTC) voor snelheid. Zorg dat je missende data interpoleert met Pandas voordat je opslaat. Voor uitlezen pak je alleen de benodigde kolommen.
with h5py.File("data.h5", "r") as f:
dset = f["interactive_brokers/EURUSD_1m"]
data = dset[:, 2:5] # close, volume, timestamp
Dat voelt direct en licht: Wil je attributen toevoegen? Doe dit:
with h5py.File("data.h5", "a") as f:
dset = f["interactive_brokers/EURUSD_1m"]
dset.attrs["broker"] = "interactive_brokers"
dset.attrs["timeframe"] = "1m"
dset.attrs["timezone"] = "UTC"
Wil je pandas Direct voor snelheid? Je kunt datasets ook als pandas DataFrame uitlezen, maar voor pure snelheid blijf je bij arrays. Voor analyse mix je beide: Polygon.io koppelen aan Python voor ultra-snelle aandelen data, dan omzetten naar DataFrame voor signalen.
Data-integriteit en kwaliteit: schoon en consistent
Goede data is het halve werk. Let bij het kopen van historische data goed op: verwijder duplicates op timestamp, vul ontbrekende candles met forward-fill, en check voor hiaten. Zet tijdzones consistent.
Voor backtests moet je weten of je candles UTC of exchange-tijd gebruikt. Bij risicomanagement is consistentie cruciaal, anders krijg je scheve performance-metingen. Controleer op outliers: sluitkoersen die plots tien keer hoger liggen, of volumes die nul zijn bij actieve paren.
Markeer ze met attributen, zoals data_quality="clean" of data_quality="review". Je kunt ook een tweede dataset aanmaken met flags, zodat je bot tijdens live trading weet welke periodes minder betrouwbaar zijn.
Versioneer je data. Gebruik een simpel versienummer in de groepnaam, bijvoorbeeld v2, of in attributen. Zo weet je precies welke data je backtest heeft gebruikt. Dat helpt bij reproduceerbaarheid en als je later je risicomanagement-modellen bijwerkt.
Backup je HDF5-bestand regelmatig. Het is één bestand, dus makkelijk te kopiëren naar een NAS of cloud-opslag. Zet het in je pipeline: na elke batch nieuwe data, schrijf een backup en log de wijzigingen.
Prijsindicaties en varianten: keuzes voor je opslag
Er zijn verschillende manieren om HDF5 in te richten, afhankelijk van je use case. Kies wat bij je bot past. Hieronder drie varianten met indicatieve kosten en prestaties.
- Standaard groepen per broker en symbool: Eenvoudig en snel. Ideaal voor retail-bots. Een bestand van 1 GB kost circa €0,02 per maand op cloud-opslag. Leessnelheid: 10.000 rijen in 1-5 ms.
- Chunked datasets per tijdframe: Voor grotere datasets en meerdere timeframes. Je laadt alleen benodigde chunks. Een 10 GB bestand kost circa €0,20 per maand op cloud. Leessnelheid: 100.000 rijen in 50-100 ms.
- Compressie versus snelheid: gzip comprimeert veel, maar leest iets langzamer. lzf is sneller, minder compressie. Kies lzf voor live caches, gzip voor archief. Bij 5 GB scheelt compressie 30-50% ruimte.
- Multi-broker vergelijking: Groepen per broker, datasets per symbool. Handig voor cross-broker signalen. Kosten hangen af van opslagvolume, circa €0,02-€0,20 per GB per maand.
- Hybride opslag: HDF5 voor historie, lichte database voor live metadata. Combineer met Redis voor snelle signalen. Prijzen liggen rond €5-€20 per maand voor kleine cloud-instances.
Voor algoritmische trading bots die meerdere brokers gebruiken, is een duidelijke groepenstructuur essentieel. Denk: interactive_brokers/EURUSD_1m, binance/BTCUSDT_5m.
Zo blijft je pipeline overzichtelijk en je risicomanagement controleerbaar. Denk ook aan je broker API-limieten.
Door HDF5 als cache te gebruiken, beperk je calls tot alleen nieuwe data. Dat scheelt kosten en voorkomt dat je geblokkeerd wordt. Bij LMAX of IBKR kan dat flink schelen in maandelijkse kosten.
Praktische tips voor soepele workflows
Begin klein. Pak één symbool en één timeframe, bouw je pipeline, en meet de snelheid.
Voeg daarna andere paren en brokers toe. Zo blijft je systeem overzichtelijk en voorkom je complexiteit die je bot vertraagt.
Automatiseer je data-update. Plan een cron job die elke uur nieuwe candles ophaalt en in HDF5 schrijft. Log elke update met attributen: timestamp, aantal rijen, data_quality.
Dat helpt bij debugging en risicomanagement. Gebruik een eenvoudige folderstructuur op je schijf. Bijvoorbeeld: data/hdf5/interactive_brokers/1m/EURUSD.h5. Zo vind je snel wat je nodig hebt en blijft je backtest-omgeving schoon. Test je lees- en schrijfsnelheid.
Schrijf een micro-benchmark: laad 100.000 rijen en meet de tijd. Probeer verschillende compressie-instellingen.
Voor live trading wil je onder de 10 ms zitten, voor backtests onder de 100 ms per batch. Combineer met je risicomanagement.
Sla naast candles ook exposure-data op, zoals open posities en marges, in aparte datasets. Zo kun je snel vergelijken tussen live en backtest, en signalen beter valideren. Sluit af met een simpele checklist: data schoon, tijdzone consistent, attributen gevuld, backups gemaakt, compressie getest.
Met HDF5 als fundament wordt je algoritmische trading bot sneller, stabieler en betrouwbaarder.
En jij houdt tijd over voor een goede kop koffie.
