Mean Reversion uitgelegd: De wiskunde achter het terugkeren naar het gemiddelde
Je kent dat gevoel wel: een aandeel schiet omhoog, je koopt te snel, en dan zakt het weer terug naar waar het was. Of je ziet een munt crashen en denkt: dit kan niet waar zijn, het herstelt wel.
Dat gevoel is niet zomaar iets. Het heet mean reversion, en het is een van de fundamenten in algoritmische trading. In deze gids leg ik je rustig uit wat het is, hoe de wiskunde erachter werkt, en hoe je het kunt gebruiken in je eigen Python-bots.
We blijven lekker praktisch, zonder ingewikkelde woorden. Je zit gewoon aan tafel met een bak koffie, en we praten over cijfers die terugkeren naar hun gemiddelde.
Wat is mean reversion eigenlijk?
Mean reversion betekent simpelweg dat een prijs of waarde op de lange termijn geneigd is terug te keren naar zijn historisch gemiddelde.
Stel je voor: je meet de temperatuur in Amsterdam over een jaar. De gemiddelde temperatuur is 10 graden.
Als het in januari -5 is, verwacht je dat het later in het jaar weer wat warmer wordt. Hetzelfde geldt voor aandelen, crypto of valuta’s. De prijs zwalkt heen en weer, maar uiteindelijk trekt die terug naar een stabiel niveau. Bij trading zie je dit vaak bij aandelen die tijdelijk uit de pas lopen.
Een aandeel van Shell staat op €20, maar door een nieuwsbericht schiet het naar €24.
De kans is groot dat het na een paar dagen weer richting €20 beweegt. Die beweging is niet toeval; het is een statistisch patroon. In algoritmische trading gebruiken we dit idee om koop- en verkoopmomenten te bepalen.
Het werkt niet altijd, maar het geeft een duidelijk kader. Waarom is dit belangrijk?
Omdat het je helpt om emoties uit te schakelen. In plaats van te gokken op een stijgende lijn, zoek je naar momenten waarop de prijs te ver is afgeweken.
Dat voelt rustiger en is beter te automatiseren. Je bouwt een bot die signaleert: “Dit is te ver, tijd om in te stappen.” Dat is de kern van mean reversion in een notendop.
De wiskunde erachter: gemiddelde en afwijking
Het wiskundige idee is helder. Je berekent het gemiddelde (mean) over een bepaalde periode, bijvoorbeeld de laatste 20 dagen.
Dan kijk je hoe ver de huidige prijs daarvan afwijkt. Die afwijking noem je de error.
Als de error groot is, is de prijs “overdreven” en verwacht je een correctie. In Python kun je dit makkelijk berekenen met libraries zoals pandas of numpy. Je laadt de prijsdata van je broker via een API, berekent het moving average, en vergelijkt de huidige prijs ermee.
Een simpel voorbeeld: de sluitingsprijs van een aandeel is €50, het 20-daags gemiddelde is €48. De afwijking is €2, oftewel 4%.
Als die afwijking groter wordt dan een drempel die je instelt, bijvoorbeeld 5%, geeft je bot een signaal. Je kunt een long positie openen als de prijs te laag is, of short als die te hoog is. De wiskunde is eenvoudig: prijs - gemiddelde = afwijking. Die afwijking vertelt je of het tijd is om te handelen.
In de praktijk werkt dit met statistiek. Je kunt de standaardafwijking (standard deviation) berekenen om te zien hoe ver de prijs gemiddeld afwijkt.
Als de afwijking meer dan twee standaardafwijkingen is, noem je dat een uitschieter. Dat is een sterk signaal voor mean reversion. In Python gebruik je hiervoor de functie std() van numpy.
Je backtest dit op historische data om te zien hoe vaak het werkt. Bijvoorbeeld: op 100 trades wint er 60, met een gemiddelde winst van €50 per trade. Dat is een solide basis.
Waarom mean reversion werkt (en waarom het soms faalt)
Mean reversion werkt omdat markten niet perfect efficiënt zijn. Er zijn tijdelijke schokken door nieuws, emoties of grote orders die de prijs tijdelijk verstoren.
Die storingen trekken weg, en de prijs keert terug. Bijvoorbeeld: een crypto-munt zoals Bitcoin schiet omhoog door hype, maar na een paar dagen zakt het weer in.
Je ziet dit terug in de data: prijzen bewegen in bands rond een gemiddelde. Maar het faalt ook. In sterke trends blijft de prijs ver van het gemiddelde. Stel de markt is bullish en een aandeel stijgt van €20 naar €30.
Je bot opent short omdat het “te hoog” is, maar de prijs stijgt door naar €35. Je verliest geld.
Daarom is context belangrijk: combineer mean reversion met trendanalyse. Gebruik een simpele trend-indicator, zoals een 50-daags moving average, om te zien of de markt stijgt of daalt. Alleen mean reversion toepassen in zijwaartse markten.
Een ander risico is de timing. Als je te vroeg instapt, kun je nog meer verlies lijden.
Daarom stellen traders een drempel in, bijvoorbeeld 3% afwijking. En ze gebruiken stop-losses.
Bij een bot in Python zet je een stop-loss op 2% onder je instapprijs. Zo beperk je de schade. Backtesten is essentieel: probeer verschillende drempels uit op data van brokers zoals Interactive Brokers of eToro. Begrijp de invloed van dark pools op jouw asset, of het nu aandelen, forex of crypto is.
Modellen en varianten voor mean reversion
Er zijn verschillende modellen om mean reversion toe te passen. Een populaire is het Ornstein-Uhlenbeck model.
Dit is een wiskundig model dat beschrijft hoe een prijs terugkeert naar een gemiddelde met een bepaalde snelheid.
Het is wat complexer, maar je kunt het implementeren in Python met libraries zoals statsmodels. Voor een aandeel met een gemiddelde van €50 en een herstelsnelheid van 0,1 per dag, voorspelt het model dat een prijs van €55 binnen 5 dagen terugkeert naar €52,5. Handig voor het instellen van je bot.
Een andere variant is de Bollinger Bands-strategie. Hierbij teken je een band rond het moving average, gebaseerd op de standaardafwijking. Als de prijs de onderste band raakt, koop je; als die de bovenste raakt, verkoop je. Stel: voor een crypto-paar zoals ETH/USD is het 20-daags gemiddelde €2.000, met een band van €50.
Als de prijs zakt naar €1.950, is dat een koopsignaal. Je kunt dit bouwen in een Python-script met de pandas_ta-library, en testen via de API van een broker zoals Binance.
Voor prijsindicaties kijk je naar concrete getallen. Bij een aandeel van €100 met een 10-daags gemiddelde van €98, en een afwijking van 3%, stel je een drempel in op 4%.
Je bot opent een long als de prijs onder €96 zakt. Voor risicomanagement zet je een take-profit op €102 (terug naar gemiddelde) en een stop-loss op €94. In Python kun je dit automatiseren met een loop die elke minuut de data ophaalt via de API van je broker. Wil je meer spreiding? Ontdek de grid trading bot en gebruik een backtesting-tool zoals Backtrader om het te valideren: op 1.000 trades win je er 650, met een gemiddelde winst van €20 per trade.
Praktische tips voor algoritmische trading
Start klein. Gebruik een Python-omgeving zoals Jupyter Notebook om je eerste bot te bouwen.
Haal data via de API van je broker, bijvoorbeeld Alpaca voor aandelen of Coinbase voor crypto. Bereken het moving average of ga dieper in op de VWAP, en zet een eenvoudig signaal: als afwijking > 4%, koop; als < -4%, verkoop. Test dit op een demo-account voordat je echt geld inzet.
Zo voorkom je dure fouten. Kies de juiste tijdsframe.
Mean reversion werkt beter op kortere termijnen, zoals 5- of 15-minuten data, voor dagtrading. Voor swingtrading gebruik je dagelijkse data. Pas de drempels aan op basis van backtesting: probeer 2%, 3% en 5% afwijking.
Kijk naar de winst-risico-verhouding. Een goede bot heeft een winstpercentage van boven de 50% en een gemiddelde winst die hoger is dan het gemiddelde verlies.
Risicomanagement is key. Gebruik nooit meer dan 1-2% van je kapitaal per trade.
Zet stop-losses in, en diversifieer over meerdere assets. Bijvoorbeeld: handel niet alleen in Apple-aandelen, maar ook in S&P 500 ETF’s of EUR/USD. Monitor je bot elke dag. Als de markt trendt, schakel mean reversion uit en schakel over op een trendvolgende strategie.
Zo blijf je flexibel en bescherem je je portfolio. Sluit af met een test.
Bouw een simpele bot in Python, backtest hem op data van de laatste 2 jaar, en kijk naar de resultaten. Als het werkt, ga live met een klein bedrag. Bedenk dat geen enkele strategie perfect is, maar mean reversion geeft je een duidelijke, wiskundige basis. Zo blijf je rationeel handelen, zonder emotie. Succes!
