Een OHLCV dataframe maken met Pandas vanuit een CSV bestand

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Alex de Vries
Quantitatief Analist & Algo-Trading Expert
Python Libraries voor Algoritmische Trading · 2026-02-15 · 5 min leestijd

Stel je voor: je hebt een CSV-bestand vol met ruwe handelsdata van bijvoorbeeld Interactive Brokers of Degiro, en je wilt daar direct mee aan de slag in Python voor je backtesting script. Je wilt geen uren rommelen met Excel.

Je wilt gewoon een schoon, betrouwbaar dataframe hebben met open, high, low, close en volume data. Dat is precies wat we hier doen. We bouwen een OHLCV dataframe met Pandas, stap voor stap, zonder gedoe.

Wat is een OHLCV dataframe en waarom heb je het nodig?

Een OHLCV dataframe is een gestructureerde tabel met vijf kolommen: Open, High, Low, Close en Volume. Deze data komt rechtstreeks uit je broker API of CSV export en vormt de basis voor elke algoritmische trading bot.

Zonder deze structuur kun je geen betrouwbare backtests draaien of technische indicatoren berekenen.

Waarom is dit zo cruciaal? Omdat elke trading strategie, of het nu gaat om een eenvoudige moving average crossover of een complexe machine learning bot, begint met schone, tijdgestempelde data. Een verkeerde kolomnaam of ontbrekende data kan je hele risicomanagement model ontregelen.

Stel je voor dat je bot een verkeerde entry neemt omdat de 'Close' kolom per ongeluk de 'Adj Close' was – dat kan zomaar €500 schade per trade opleveren. Met Pandas laad je de CSV in en transformeer je deze direct tot een bruikbaar dataframe. Je bent direct klaar voor de volgende stap: technische analyse of het testen van je entry- en exit-regels. Dit bespaart je uren handmatig werk en voorkomt fouten die je later pas ontdekt als je live gaat.

Je CSV laden en de basisstructuur zetten

Begin met het importeren van Pandas. Geen zorgen, dit is simpel: import pandas as pd.

Daarna laad je je CSV-bestand. Stel je hebt een bestand van je broker, bijvoorbeeld bitcoin_data.csv, met kolommen als 'Date', 'Open', 'High', 'Low', 'Close', 'Volume'. Gebruik dan deze regel:

df = pd.read_csv('bitcoin_data.csv') Direct controleer je of de data goed is geladen.

Tik df.head() in om de eerste vijf regels te zien. Je ziet nu een tabel met de kolomnamen. Misschien staat de datum nog als tekst, dat lossen we zo op. Kijk ook naar df.info() om te checken of alle kolommen het juiste datatype hebben.

Als 'Volume' als string staat, bijvoorbeeld '1.000', dan moet je dat nog omzetten. Een veelvoorkomend probleem bij brokers zoals Binance of Kraken is dat de datumkolom niet als datum herkend wordt.

Los dit op door direct bij het inladen de 'Date' kolom te specificeren als index. Gebruik: df = pd.read_csv('bitcoin_data.csv', parse_dates=['Date'], index_col='Date') Nu heb je een dataframe met de datum als index, wat essentieel is voor tijdreeksanalyse. Je data is nu klaar voor de volgende stap: het hernoemen en selecteren van de juiste kolommen.

OHLCV kolommen selecteren en hernoemen

Niet elke CSV heeft perfecte kolomnamen. Soms staat er 'Open Price' in plaats van 'Open', of 'Volume (BTC)' in plaats van 'Volume'.

Je wilt een standaardstructuur: Open, High, Low, Close, Volume. Pak de kolommen die je nodig hebt en hernoem ze direct.

Stel je CSV heeft deze kolommen: 'timestamp', 'o', 'h', 'l', 'c', 'vol'. Dan doe je dit: df = df[['timestamp', 'o', 'h', 'l', 'c', 'vol']]
df.columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume']

Als je datum al als index staat, hoef je alleen nog maar de datakolommen te selecteren. Check of je de juiste volgorde hebt: Open, High, Low, Close, Volume.

Dit is de standaard voor elke trading API, van Alpaca tot Interactive Brokers. Soms bevat je CSV extra kolommen zoals 'Adj Close' of 'Ticker'. Die kun je veilig weglaten voor je basis OHLCV data. Gebruik df = df[['Open', 'High', 'Low', 'Close', 'Volume']] om alleen de vijf essentiële kolommen te houden.

Dit houdt je dataframe schoon en snel, wat belangrijk is voor het werken met financiële data, essentieel voor je backtesting performance.

Verifieer de data types met df.dtypes. Zorg dat Open, High, Low, Close als float zijn, en Volume als integer of float. Als er nog strings tussen zitten, gebruik dan df['Close'] = pd.to_numeric(df['Close'], errors='coerce') om ze om te zetten. Zo voorkom je errors tijdens je berekeningen.

Data schoonmaken en tijdreeks controleren

Nu je dataframe staat, is het tijd om het schoon te maken.

Controleer op ontbrekende waarden met df.isnull().sum(). Als er NaN's zijn in je Close prijs, bijvoorbeeld door een onderbreking in de data feed, vul ze dan op.

Gebruik forward fill: df.fillna(method='ffill', inplace=True). Dit kopieert de vorige geldige waarde, wat logisch is voor prijsdata. Check ook op duplicates. Handelsdata kan dubbele timestamps hebben door API fouten.

Verwijder ze met df = df[~df.index.duplicated()]. Stel je hebt een 1-minuut timeframe, dan verwacht je exact 1440 rijen per dag.

Tel ze na met df.resample('D').count() om gaps te vinden. Resample je data indien nodig. Heb je tick-data en wil je een 5-minuten timeframe? Gebruik:

df_5min = df.resample('5T').agg({'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last', 'Volume': 'sum'}) Dit aggregate de data netjes.

Voor risicomanagement is het slim om outliers te checken. Kijk naar extreme prijssprongen, bijvoorbeeld een Close van €50.000 terwijl de vorige €45.000 was.

Gebruik df.describe() voor een snelle statistiek. Verwijder of corrigeer rare data punten om je bot betrouwbaar te houden.

Praktische tips voor algoritmische trading

Sla je dataframe op als een binary file voor snel laden. Gebruik df.to_pickle('ohlcv_data.pkl') en laad het later met pd.read_pickle('ohlcv_data.pkl').

Dit is veel sneller dan CSV, vooral bij grote datasets van duizenden trades. Integreer je dataframe met een broker API. Voor Python bots kun je de data van Interactive Brokers via de TWS API halen en direct in Pandas laden. Analyseer je data in Excel door gebruik te maken van libraries als ib_insync om de data te streamen.

Test altijd met een kleine dataset eerst, voordat je live gaat. Voeg risicomanagement toe aan je dataframe.

Bereken de ATR (Average True Range) direct na het laden: df['ATR'] = (df['High'] - df['Low']).rolling(14).mean(). Wil je meer technische indicatoren toevoegen? Je kunt ook eenvoudig gewogen voortschrijdende gemiddelden berekenen met Pandas.

Dit helpt bij het instellen van stop-losses. Voor een backtesting bot, test je strategie op historical data van bijvoorbeeld de afgelopen 2 jaar. Gebruik libraries als Backtrader of Zipline voor Python.

Onthoud: altijd paper traden eerst, met een virtuele €10.000, voordat je echt geld inzet. Experimenteer met varianten.

Probeer een Heikin-Ashi candlestick patroon op je dataframe te berekenen voor betere visualisatie. Of voeg een kolom toe voor RSI indicator: delta = df['Close'].diff(); gain = (delta.where(delta > 0, 0)).rolling(14).mean(); loss = (-delta.where(delta < 0, 0)).rolling(14).mean(); rs = gain / loss; df['RSI'] = 100 - (100 / (1 + rs))

Met deze stappen heb je een robuust OHLCV dataframe dat klaar is voor elke algoritmische trading setup.

Begin klein, test veel, en bouw je bot stap voor stap op. Je bent nu een stap dichter bij een succesvolle trading strategie.

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 Python Libraries voor Algoritmische Trading
Ga naar overzicht →