De gids voor 'Pairs Trading' met Co-integratie (Engle-Granger test)

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Alex de Vries
Quantitatief Analist & Algo-Trading Expert
Geavanceerde Quant Concepten · 2026-02-15 · 5 min leestijd

Stel je voor: je hebt een prachtige backtest in Python gedraaid, je pairs-trading bot ziet er onverslaanbaar uit, en de resultaten op historische data zijn groen tot je erbij neervalt. Dan zet je hem live op een zero-spread account en binnen twee weken is je account gesneuveld.

Dit scenario speelde zich af in 2024 met een MQL5 Expert Advisor.

Het is een harde les voor elke quant: wat in de backtest werkt, faalt vaak in de echte wereld door uitvoeringsproblemen. In deze gids duiken we in de wereld van pairs trading met cointegratie, specifiek de Engle-Granger test, en laten we zien hoe je deze valkuilen omzeilt.

Success on backtest, failure on realtime

Backtests zijn de hoeksteen van algoritmische trading, maar ze zijn geen glazen bol.

The main problem: execution

In het voorbeeld van de MQL5 EA uit 2024 toonden backtests winstgevendheid, maar een live demo op een zero-spread account leidde tot een catastrofaal verlies. Waarom? Omdat backtests vaak ideale omstandigheden aannemen, zoals perfecte orderuitvoering en geen slippage, wat in de praktijk zelden voorkomt.

Het grootste struikelblok is de uitvoering van orders. In een backtest met Python of MQL5 worden transacties vaak gesimuleerd tegen de mid-prijs, zonder rekening te houden met spreads, commissies of vertragingen. In de echte wereld, zelfs op een zero-spread account, kunnen kleine verschillen in uitvoering je spread-strategie verstoren. Bij pairs trading, waar je gelijktijdig long en short gaat, is synchronisatie cruciaal—een vertraging van enkele seconden kan je winst veranderen in een verlies.

Denk aan een broker zoals Interactive Brokers of MetaTrader 5: hun API's (bijvoorbeeld IB-insync of mql5-lib) bieden tools voor risicomanagement, maar je moet zelf slippage en marktslipage integreren in je backtest.

Gebruik historische tick-data voor een realistischere simulatie en test altijd op een live demo-account voordat je echt geld inzet. Zo voorkom je dat je blindelings vertrouwt op mooie backtest-cijfers.

An Introduction to Cointegration for Pairs Trading

Cointegratie is een concept uit de econometrie, geïntroduceerd door Granger in 1981—een prestatie die hem in 2003 een Nobelprijs opleverde. Het beschrijft hoe twee time-series, zoals aandelenkoersen, op de lange termijn samenhangen, zelfs als ze op korte termijn fluctueren.

Voor pairs trading is dit goud: je zoekt twee assets die cointegreren, zodat hun prijsverschil (de spread) stabiel blijft en je kunt profiteren van afwijkingen.

Stel je voor: je koopt €10.000 aan aandeel A en short €10.000 aan aandeel B, omdat hun koersen historisch samenhangen. Wanneer de spread afwijkt, ga je short op A en long op B om te profiteren van een terugkeer naar het gemiddelde. Dit werkt omdat de spread stationair is—een eigenschap die cointegratie garandeert.

What is Cointegration?

Zonder cointegratie is het gewoon gokken op toeval. Een tijdreeks is stationair als zijn gemiddelde, variantie en autocovariantie niet veranderen over tijd. Bij cointegratie zijn twee niet-stationaire series (zoals aandelenkoersen, die vaak een random walk volgen) gecombineerd tot een stationaire spread. In de kern regresseert de Engle-Granger test y₁ₜ − γy₂ₜ = μ + rₜ, waarbij y₁ en y₂ de log-prijzen zijn, γ de hedge-ratio, en rₜ de residual.

Je test vervolgens rₜ op stationariteit met een Augmented Dickey-Fuller (ADF) test—als de p-waarde laag is (bijv. <0.05), is de spread stabiel en geschikt voor trading. Wil je dieper graven in de prijsdynamiek? Check dan ook de Variance Ratio test.

Stel je voor dat aandeel A €50 noteert en B €40. De hedge-ratio γ kan 1.25 zijn, dus de spread is A - 1.25*B.

Als deze residual stationair is, kun je handelen wanneer de spread afwijkt van zijn gemiddelde. Gebruik Python libraries zoals statsmodels voor deze test—bijvoorbeeld met de coint functie uit de statsmodels.tsa.stattools module—en backtest je strategie met historical data van brokers zoals Alpaca of OANDA, waarbij je rekening houdt met de impact van high-frequency quote stuffing.

Discovering Cointegrated Pairs

Het vinden van cointegreerde paren begint met data-selectie. Kies assets uit dezelfde sector, zoals twee tech-aandelen (bijv.

Apple en Microsoft) of valutaparen (EUR/USD en GBP/USD). Verzamel historische prijzen via een broker API—denk aan Yahoo Finance voor gratis data of Polygon.io voor real-time tick-data.

Normaliseer de prijzen met de Normalized Price Distance (NPD), gedefinieerd als Σ(𝑝̃₁ₜ − 𝑝̃₂ₜ)², waarbij 𝑝̃ᵢₜ = 𝑝ᵢₜ/𝑝ᵢ₀. Dit helpt bij het vergelijken van paren met verschillende prijsniveaus. Een praktisch voorbeeld: voor een paar zoals Shell (€25) en BP (€5) bereken je NPD om hun prijsafstand te normaliseren.

Cointegration Tests

Gebruik Python met pandas voor data-verwerking en scikit-learn voor optimalisatie. Backtest met een bot op MetaTrader 5 of een custom Python-script—let op risicomanagement, zoals een stop-loss op 2% van je equity, om verliezen te beperken.

Onthoud: niet elk paar is cointegreerd; test altijd op meerdere tijdsframes (bijv. dagelijks vs. uurlijks) om robuustheid te garanderen. De Engle-Granger test is de hoeksteen voor pairs trading, maar combineer het met andere methoden voor zekerheid. Voer de test uit in Python: regressieer de log-prijzen, bereken de residuals, en voer een ADF-test uit op rₜ. Als de p-waarde onder 0.05 ligt, is er cointegratie.

Voorbeeld: voor een paar met ADF-statistiek -3.5 en p-waarde 0.01, bevestig je stabiliteit.

Variatie: de Johansen-test voor multivariate cointegratie, handig als je meer dan twee assets betrekt. Gebruik libraries zoals numpy en statsmodels—een eenvoudig script kost maar enkele regels code. Pas op voor fouten: test niet alleen op één dataset; valideer out-of-sample om overfitting te voorkomen. En combineer met risicomanagement: stel een maximum drawdown in van 5% en gebruik een API voor real-time monitoring, zoals die van Interactive Brokers.

Risicomanagement en Praktische Tips

Na het vinden van je paar, is risicomanagement essentieel. Backtests zijn nuttig, maar zeggen weinig over de echte wereld—implementeer een goed orderuitvoeringssysteem met slippage-modellering.

Gebruik een zero-spread account voor testen, maar houd rekening met commissies (bijv. €0.01 per aandeel bij sommige brokers).

  • Test altijd op stationariteit: Gebruik de Engle-Granger test voor elke spread; vertrouw niet op aannames.
  • Beperk positiegrootte: Riskeer nooit meer dan 1-2% van je account per trade—bij een €10.000-account is dat €100-200.
  • Monitor live: Zet een alert in je bot voor spreads die 2 standaarddeviaties afwijken; sluit posities bij een drawdown van 3%.
  • Gebruik realistische data: Backtest met tick-data van brokers zoals FXCM voor forex-paren, niet alleen dagelijkse sluitingen.
  • Voorkom fouten: Aannemen dat cointegratie eeuwig duurt? Test maandelijks opnieuw; markten veranderen.

Stel een trading bot in met Python en de mql5-lib voor MQL5-integratie, of gebruik Alpaca's API voor commission-free trading. Praktische tips: Met deze aanpak bouw je een robuuste pairs-trading strategie die niet alleen in backtests, maar ook in de live markt overeind blijft. Begin klein, experimenteer met Python-bots, en bouw vertrouwen op—de markt beloont geduld en precisie.

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 Geavanceerde Quant Concepten
Ga naar overzicht →