Pairs Trading: Hoe verdien je geld aan gecorreleerde aandelen?
Stel je voor: je zit achter je laptop, een bak koffie naast je, en je ziet twee aandelen die als hand in handschoen bewegen.
Ze stijgen samen, ze dalen samen, en toch loopt er af en toe een klein scheef. Dat scheve is jouw kans.
Pairs trading draait precies om die kleine scheurtjes tussen gecorreleerde aandelen, en je kunt er serieus geld mee verdienen zonder dat je hoeft te raden of de markt omhoog of omlaag gaat. In dit stuk leg ik je in heldere stappen uit hoe je zo’n strategie bouwt, test en live zet, gewoon vanaf je keukentafel.
Wat je nodig hebt voordat je begint
Je hebt een computer nodig die Python aankan, bijvoorbeeld een laptop met i5-processor en 8 GB RAM. Voor backtesting werken tools zoals Backtrader of Zipline soepel, en voor data gebruik je Yahoo Finance (gratis) of een betaalde broker-API zoals Interactive Brokers (vanaf €0,01 per transactie). Een broker met API-toegang is essentieel voor live trading; denk aan Interactive Brokers, Degiro via een wrapper, of TradingView webhooks naar een Python-script.
Reken op een startkapitaal van €500 tot €2000 om te oefenen. Een goede Python-omgeving installeer je met Anaconda, en je notebooks draaien in Jupyter.
Zorg voor een virtuele omgeving om bibliotheekconflicten te voorkomen. Tot slot heb je een eenvoudige database nodig voor logs, bijvoorbeeld SQLite of een CSV-mapje.
Tip: begin klein. Test je strategie eerst met één aandelenpaar en een beperkte dataset om je pipeline te valideren.
- Python 3.9+ met pip en virtualenv
- Backtrader of Zipline voor backtesting
- YFinance of broker-API voor data
- SQLite of CSV voor logging
- Interactive Brokers of vergelijkbare broker voor live trading
Stap 1: kies een geschikt aandelenpaar
Zoek twee aandelen die historisch sterk gecorreleerd zijn, bijvoorbeeld Shell en BP, of ASML en Applied Materials.
Gebruik een correlatiematrix over de laatste 12 tot 24 maanden; een correlatie van 0,80 of hoger is een goed startpunt. Vermijd exotische aandelen met weinig volume; kies voor liquiditeit en lage spread. Pas deze stappen toe:
- Download dagkoersen van de laatste 24 maanden via YFinance of je broker-API.
- Bereken de Pearson-correlatie tussen de twee sluitkoersen.
- Kies een paard met correlatie ≥ 0,80 en een gemiddelde dagvolume boven 1 miljoen.
- Controleer de spread (prijsverschil) op afwijkingen; een stabiele spread helpt bij stationariteit.
Veelgemaakte fouten: een paard kiezen op basis van één week data, of een paard met heel lage volume waardoor spreads oplopen. Tijd indicatie: 30 tot 60 minuten voor data ophalen en eerste correlatie check.
Concrete maatvoering: houd een minimum spread van €0,10 tot €0,50 tussen de aandelen, afhankelijk van de koersgrootte.
Voor ASML/BPM kun je een spread van €5 tot €15 verwachten; zorg dat je spread-kosten meerekent.
Stap 2: bereken de spread en bepaal je entry-regels
De spread is het prijsverschil tussen de twee aandelen, gecorrigeerd voor hun verhouding.
Je normaliseert de prijzen of gebruikt een hedge-ratio, vaak via een eenvoudige lineaire regressie (OLS). De spread moet stationair zijn; anders loopt je strategie uit de bocht. Begrijp je hoe trading bots profiteren van de spread, dan heb je een streepje voor.
- Bereken de hedge-ratio: ruis = aandeel A − ratio × aandeel B.
- Gebruik een rolling window van 60 dagen om de ratio periodiek bij te stellen.
- Zet de spread om in een Z-score: (spread − gemiddelde) / standaarddeviatie.
- Entry-regel: short de spread als Z-score > 1,5; long als Z-score < −1,5.
Zo bouw je de spread: Maatvoering: kies een Z-score drempel tussen 1,5 en 2,0. Voor risicovollere paarden pak je 2,0; voor stabielere paarden 1,5. Stop-loss op Z-score 3,0 tot 4,0, afhankelijk van volatiliteit.
Tijd indicatie: backtest-script bouwen kost 2 tot 4 uur; een eerste iteratie van je entry/exit-regels test je in 30 minuten.
Veelgemaakte fouten: een vaste hedge-ratio gebruiken zonder rolling update, en de Z-score niet herberekenen op nieuwe data.
Denk aan de kern: je verdient geld aan de tijdelijke uitschieters tussen twee correlerende aandelen, niet aan de richting van de markt.
Stap 3: backtest je strategie met Python
Gebruik Backtrader voor een eenvoudige backtest-pipeline. Bouw een strategy-klasse om een pairs trading algoritme op te zetten, waarbij je de Z-score berekent, posities opent en sluit, en transactiekosten meeneemt. Log elke trade, inclusie entry/exit Z-score, spread, en kapitaal.
Stappenplan: Maatvoering: transactiekosten €0,01 per aandeel of 0,1% bij sommige brokers; neem dit mee.
- Laad de historische data van beide aandelen in Backtrader.
- Voeg een feed voor de spread toe en bereken de Z-score per dag.
- Definieer long/short signalen en position sizing: risico per trade 1% tot 2% van je totale kapitaal.
- Run de backtest op minimaal 2 jaar data; splits 70/30 voor train/test.
- Evalueer Sharpe-ratio, max drawdown, winstpercentage en gemiddelde winst/verlies.
Voor een €10.000 account riskeer je €100 tot €200 per trade. Verwacht 40–60 trades per jaar voor een typisch aandelenpaar.
Veelgemaakte fouten: geen transactiekosten meenemen, te grote posities nemen, en de train/test-splitsing overslaan. Tijd indicatie: een volledige backtest duurt 1 tot 2 uur inclusief optimalisatie van Z-score drempels. Resultaat-check: een Sharpe-ratio boven 1,0 en een max drawdown onder 10% zijn gezond voor dit type strategie. Begrijp bij het automatiseren ook de psychologische strijd tussen handmatig en algoritmisch traden. Gebruik een benchmark zoals de S&P 500 of de AEX voor context.
Stap 4: risicomanagement en live trading met een broker-API
Live trading vraagt om strakke risicobewaking. Zet een daily loss limit van 2% tot 3% van je kapitaal en een per-trade limiet van 1% tot 2%.
Gebruik een stop-loss op spread-niveau en een time-based exit: sluit een positie na maximaal 5 tot 10 dagen als de spread niet terugkeert. Implementatie-stappen:
- Sluit een broker-account met API-toegang, bijvoorbeeld Interactive Brokers (TWS API).
- Bouw een Python-script dat elke 5 minuten de Z-score berekent en signalen verstuurt.
- Gebruik bracket orders: entry, take-profit en stop-loss in één order packet.
- Log elke actie naar SQLite; stuur een e-mail of push-bericht bij grote afwijkingen.
- Monitor de spread dagelijks; corrigeer de hedge-ratio wekelijks.
Maatvoering: houd de positiegrootte beperkt tot 5% tot 10% van je totale kapitaal per paard. Voor een €10.000 account betekent dit max €1.000 exposure per kant (long en short). Zorg dat je short-selling mag bij je broker; controleer de leenbaarheid en kosten. Veelgemaakte fouten: vergeten om API-limieten te respecteren, geen fallback bij data-uitval, en te veel paarden tegelijk traden. Tijd indicatie: live setup kost 3 tot 6 uur; dagelijks onderhoud 10 tot 15 minuten.
Een goede risicomanager is je beste vriend. Zonder hem loop je sneller vast dan je denkt.
Verificatie-checklist
Gebruik deze lijst voordat je live gaat. Vink elk punt af en noteer je bevindingen.
- Paar geselecteerd met correlatie ≥ 0,80 over 12–24 maanden.
- Spread is stationair; Z-score is stabiel en reproduceerbaar.
- Entry/exit-regels helder: Z-score drempel 1,5–2,0, stop-loss 3,0–4,0.
- Backtest uitgevoerd op 2 jaar data; train/test 70/30.
- Transactiekosten en spread meegenomen; resultaten boven de benchmark.
- Risicolimieten ingesteld: daily loss 2–3%, per-trade 1–2%.
- Broker-API geconfigureerd; bracket orders getest in paper trading.
- Logging en alerts actief; herstelplan bij data-uitval.
Sluit af met een kleine live run van 1 tot 2 weken op een beperkt kapitaal, bijvoorbeeld €1.000. Vergelijk de live resultaten met je backtest en pas de parameters geleidelijk bij. Zo bouw je vertrouwen en houd je je emoties onder controle.
