Wat is 'Level 2' data (Orderboek data) en hoe gebruik je het?
Je kijkt naar een grafiek en denkt: “Ik ga ‘m kopen.” Maar wat gebeurt er eigenlijk op de achtergrond? Waarom stijgt de prijs plotseling?
Waarom zakt die ineens? Het antwoord zit vaak in het orderboek.
Dit is de plek waar de werkelijke vraag en aanbod leeft, ver voorbij de simpele candlesticks op je scherm. Als je serieus bent met algoritmische trading, backtesting of gewoon je risicomanagement wilt verbeteren, dan is Level 2 data je beste vriend. Laten we zonder omwegen duiken in wat dit precies is en hoe je het direct kunt gebruiken.
Wat is Level 2 data eigenlijk?
Stel je de beurs voor als een markt op een zonnige zaterdag. Level 1 data is de prijs die net is betaald – de transactie die zojuist plaatsvond.
Level 2 data is de hele kraam vol waar je nú naar kunt grijpen. Het toont het volledige orderboek: alle openstaande bied- en vraagprijzen mét hoeveelheid. Level 2 laat zien:
- De huidige bied- en vraagprijzen (bid en ask).
- Het volume achter elke prijs (hoeveelheid).
- De diepte van de markt: hoeveel lagen er onder en boven de huidige prijs liggen.
Terwijl Level 1 je de laatste transactie laat zien, toont Level 2 de intenties.
Je ziet of er een grote buy-wall staat op €102,50 of dat er een sell-wall op €103,00 ligt. Die informatie is goud waard voor algoritmische beslissingen en risicomanagement.
Level 2 is de live weergave van de markt die nog niet is uitgevoerd. Het is de plek waar je de echte druk voelt.
Wat heb je nodig om ermee te starten?
Je hebt een aantal dingen nodig voordat je kunt beginnen. Zorg dat je deze spullen paraat hebt, dan verloopt alles soepel.
- Een broker met Level 2 toegang. Denk aan Interactive Brokers (IBKR) of LMAX voor Europese aandelen en crypto. Check of je API-toegang krijgt.
- Een Python-omgeving. Gebruik Python 3.10 of nieuwer. Installeer packages zoals pandas, numpy en websocket-client.
- Een datafeed provider. Voor Level 2 kun je terecht bij Polygon.io, Tiingo, of rechtstreeks via je broker. Verwacht €20-€100 per maand voor kwalitatieve data.
- Voldoende opslag en rekenkracht. Level 2 data kan groot zijn. Zorg voor minimaal 16 GB RAM en een SSD-schijf.
- Een backtesting-omgeving. Gebruik Backtrader, Zipline of een custom opzet in Python. Test je strategieën eerst op historische Level 2 data.
Stap voor stap zorg je dat je broker-account actief is, je API-sleutels hebt en je Python-omgeving draait. Zonder deze basis stap je niet in de markt.
Stap-voor-stap: Level 2 data binnenhalen en gebruiken
Volg deze stappen om van nul naar een werkende setup te gaan. We houden het concreet en direct.
Stap 1: Kies je broker en activeer Level 2
Open een account bij een broker die Level 2 biedt. Bij Interactive Brokers vraag je via de accountinstellingen toegang aan tot “Market Data Deep”. Dit kost ongeveer €10-€15 per maand voor Europese aandelen.
Bij LMAX betaal je €50-€100 per maand voor diepgaande orderboekdata. Zorg dat je API-toegang activeert; zonder dit kun je geen automatische data ophalen.
Stap 2: Installeer Python en benodigde packages
Veelgemaakte fout: vergeten om de juiste markttoegang aan te vragen. Check altijd of je de juiste producten (aandelen, crypto, futures) hebt geselecteerd. Download Python 3.10 of nieuwer. Installeer via pip de volgende packages: pandas, numpy, websocket-client, ib-insync (voor IBKR), en eventeel ccxt voor crypto.
Doe dit in een virtuele omgeving om conflicten te voorkomen. Commando’s:
- python -m venv level2_env
- source level2_env/bin/activate (Mac/Linux) of level2_env\Scripts\activate (Windows)
- pip install pandas numpy websocket-client ib-insync ccxt
Veelgemaakte fout: packages installeren in de verkeerde omgeving. Controleer altijd welke python je gebruikt met “python --version”. Gebruik de API van je broker om live orderboekdata te ontvangen.
Stap 3: Verbind met de API en vraag Level 2 data aan
Voor IBKR met ib-insync: Voor crypto via ccxt (bijvoorbeeld Binance):
from ib_insync import IB, Stock
ib = IB()
ib.connect('127.0.0.1', 7497, clientId=1)
contract = Stock('AAPL', 'SMART', 'USD')
ib.reqMktData(contract, '', False, False) # vraag Level 2 data aan
Veelgemaakte fout: vergeten om de juiste contractdetails in te vullen, zoals exchange, valuta of tickers. Controleer altijd of je de juiste symbolen gebruikt. Ontvang de data en sla deze op in een gestructureerd bestand.
import ccxt
exchange = ccxt.binance()
orderbook = exchange.fetch_order_book('BTC/USDT')
print(orderbook['bids'][:5]) # top 5 biedingen
print(orderbook['asks'][:5]) # top 5 vraagprijzen
Gebruik CSV of Parquet voor efficiëntie. Sla de volgende kolommen op: timestamp, bid_price, bid_size, ask_price, ask_size, symbol.
Stap 4: Sla de data op en verwerk deze voor analyse
Veelgemaakte fout: te veel data tegelijk opslaan zonder compressie. Parquet is 5-10x kleiner dan CSV en sneller te laden, al moet je bij gaten in je tijdreeksen vaak missende data interpoleren met Pandas.
import pandas as pd
from datetime import datetime
data = []
for update in ib.pendingTickers():
row = {
'timestamp': datetime.now(),
'bid_price': update.bid,
'bid_size': update.bidSize,
'ask_price': update.ask,
'ask_size': update.askSize,
'symbol': 'AAPL'
}
data.append(row)
df = pd.DataFrame(data)
df.to_parquet('level2_aapl.parquet')
Reken de mid-price (bid+ask)/2, de spread (ask-bid) en de orderboekdiepte. Voorbeeld: als de spread groter is dan 0,1% van de mid-price, kan dit wijzen op lage liquiditeit. Je kunt signalen bouwen zoals “koop als de bid-side 2x groter is dan de ask-side” of “verkoop als er een sell-wall van 10.000 aandelen op €103,00 staat”.
Stap 5: Analyseer de diepte en bouw signalen
Test deze signalen eerst in een backtesting-omgeving. Gebruik Backtrader of een custom backtester.
df['mid_price'] = (df['bid_price'] + df['ask_price']) / 2 df['spread'] = df['ask_price'] - df['bid_price'] df['spread_pct'] = df['spread'] / df['mid_price'] * 100
Laad je historische Level 2 data, pas je signalen toe en meet resultaten. Let op slippage en transactiekosten; Level 2 data helpt om deze beter te schatten. Veelgemaakte fout: backtesten zonder rekening te houden met executie-impact. Grote orders verplaatsen de markt; simuleer dit met een slippagemodel.
Stap 6: Backtest je strategie op historische Level 2 data
Veelgemaakte fouten en hoe je ze vermijdt
Fout 1: Je gebruikt alleen Level 1 data voor beslissingen. Zonder Level 2 zie je geen muren of gaten in de liquiditeit.
Fout 2: Je slaat alles op zonder compressie. Gebruik Parquet of feather en partitioneer per dag. Fout 3: Je negeert de spread. Een brede spread betekent hogere kosten.
Pas je positiegrootte aan. Fout 4: Je backtest zonder slippage.
Simuleer een realistische uitvoering, bijvoorbeeld 0,05% slippage voor aandelen en 0,1% voor crypto.
Fout 5: Je vertrouwt op één broker. Verspreid je datafeeds over meerdere bronnen voor redundantie en integreer unieke alternative data voor een scherper inzicht.
Verificatie-checklist
- Broker-account actief met Level 2 toegang? ✓
- Python-omgeving werkend en packages geïnstalleerd? ✓
- API-verbinding getest en data ontvangen? ✓
- Data opgeslagen in Parquet/CSV met juiste kolommen? ✓
- Mid-price, spread en diepte berekend? ✓
- Signaallogica gebouwd en getest in backtesting? ✓
- Slippage en transactiekosten meegenomen? ✓
- Resultaten gecontroleerd en verbeterd? ✓
Als je deze checklist afvinkt, ben je klaar om Level 2 data effectief te gebruiken in je algoritmische trading, backtesting en risicomanagement. Stap voor stap bouw je een robuuste setup die je helpt betere beslissingen te nemen en je trading naar een hoger niveau te tillen.
