Gewogen voortschrijdende gemiddelden berekenen met Pandas

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 · 7 min leestijd

Stel je voor: je hebt een prachtige trading strategie gebouwd in Python. Je script draait soepel, de data van je broker via de API zit erin, en je backtests laten veelbelovende resultaten zien.

Maar dan kom je thuis van je werk, checkt je dashboard en ziet een gat van €500 in je portemonnee. De markt is een paar procent gezakt en jouw strategie zat er net naast. Je voelt je gefrustreerd.

Had je dit niet kunnen voorkomen? Jazeker. Het probleem is vaak niet de strategie zelf, maar hoe je marktbewegingen gladstrijkt.

De standaard voortschrijdende gemiddelde (SMA) is een prima begin, maar hij behandelt elke prijs even zwaar. De prijs van gisteren telt even hard mee als die van 30 seconden geleden. Dat is niet realistisch. De markt reageert sneller op recente data. Hier komt de gewogen variant in het spel: een slimmere, snellere manier om de trend te zien.

Waarom een gewogen gemiddelde echt beter is

Een simpel voortschrijdend gemiddelde (SMA) neemt de slotprijzen van de laatste 20 candles, telt ze bij elkaar op en deelt door 20. Klaar. Makkelijk te berekenen, zeker.

Maar hij heeft een serieus nadeel: hij is traag en gevoelig voor oude data. Stel dat de Bitcoin prijs 30 dagen lang stabiel rond de €60.000 bewoog, en vandaag schiet hij opeens naar €62.000. Je 30-dagen SMA zal heel langzaam omhoog kruipen omdat de oude €60.000 data nog steeds zwaar meetelt.

Je mist de snelle momentum shift. Een gewogen voortschrijdend gemiddelde (WMA) lost dit op.

Het geeft recente data een veel hogere weging. De prijs van vandaag telt misschien 30 keer zwaarder mee dan die van 29 dagen geleden. Het gevolg? Je WMA beweegt veel sneller mee.

Als de markt opeens vaart krijgt, pik je dat eerder op. In de wereld van algoritmische trading bots kan dat het verschil betekenen tussen winst en verlies.

Het is een simpele wiskundige tweak met een enorme impact op je risicomanagement.

Je bot reageert scherper op veranderingen. Denk aan een EMA (Exponentieel Gemiddelde). Die doet ook zoiets, maar met een vaste formule die langzaam afvlakt. Een WMA geeft je de volledige controle over de weging.

Je kunt een lineaire weging toepassen (1, 2, 3... tot n) of een custom weging die past bij jouw frequentie. Handel je op de 5-minuten chart van de S&P 500?

Dan wil je misschien de laatste 10 candles extreem zwaar laten tellen. Handel je op de dagelijkse chart van AEX fondsen? Dan misschien iets minder. De flexibiliteit is key.

De kern: hoe je het berekent in Python

Laten we de handen uit de mouwen steken. We gaan dit doen met Pandas, de onmisbare library voor elke quantitative trader. We gebruiken geen Excel of handmatige formules; we schrijven code die je direct in je trading bot kunt integreren.

Je hebt een DataFrame nodig met een kolom 'Close'. Stel, je haalt data op via de API van Interactive Brokers of een andere broker.

Je hebt een serie van 100 prijzen, bijvoorbeeld van een future op de DAX of een crypto-paar op Binance. De meest simpele vorm van een WMA bereken je door de prijzen te vermenigvuldigen met hun positie in de reeks.

De oudste prijs (index 0) krijgt gewicht 1, de volgende gewicht 2, en zo verder tot de laatste prijs (index n-1) het hoogste gewicht krijgt. In Python ziet dit er elegant uit. We gebruiken Pandas om de data te rollen en NumPy voor de snelle rekenkracht.

Een veelgebruikte functie in de trading community ziet er zo uit: je maakt een array met getallen van 1 tot en met het window (bijv. 20).

Vervolgens draai je deze array om, zodat de nieuwste prijs het hoogste gewicht krijgt. Dan pas je de `rolling()` functie toe van Pandas voor financiële data-analyse. Het resultaat is een nieuwe kolom in je DataFrame die de WMA waardes bevat. Dit is sneller dan een simpele loop en werkt perfect met grote datasets van duizenden candles.

Waarom doen we dit niet met de ingebouwde functies? Als je Pandas voor financiële tijdsreeksen configureert, zie je dat de standaard `rolling().mean()` slechts een SMA is.

De `ewm()` functie is een EMA. Voor een echte lineaire WMA moet je vaak zelf een functie schrijven of `numpy.average` gebruiken in combinatie met een rolling window.

Het is een kwestie van begrijpen wat er achter de schermen gebeurt. Je bent tenslotte een developer, niet alleen een gebruiker.

Varianten en signalen: van simple WMA tot prijsindicaties

Je kunt veel verder gaan dan een enkele lijn. De kracht van algoritmische trading zit in combinaties.

Een populaire setup is het 'crossover' systeem. Je berekent een korte WMA (bijvoorbeeld over 10 perioden) en een lange WMA (bijvoorbeeld over 50 perioden).

Als de korte WMA de lange WMA kruist van onder naar boven, is dat een koopsignaal. Kruist hij de andere kant op? Dan verkoop je. Omdat de WMA sneller reageert dan een SMA, krijg je dit signaal eerder.

In een snelle markt kan dit €50 tot €100 verschil maken per contract. Een andere variant is de 'Volume Weighted Moving Average' (VWMA).

Hierbij weeg je de prijs niet alleen met de tijd, maar met het volume. Als er tijdens een prijsstijging enorm veel volume wordt verhandeld, weegt dat zwaarder dan een stijging op lage volume. Dit filtert 'nep' bewegingen eruit. Je berekent dit door de prijs te vermenigvuldigen met het volume en dit te delen door de som van het volume over het window.

Dit is essentielie voor traders die handelen op kleine timeframes zoals de 1-minuut of 5-minuut chart.

Je kunt ook spelen met de weging zelf. In plaats van lineair (1,2,3...), kun je een logarithmische weging gebruiken. Dit is handig als je wilt dat de allerlaatste candle extreem veel invloed heeft, maar je toch wat stabiliteit wilt behouden.

Stel je voor dat de prijs van je future opeens €200 beweegt in één candle. Een lineaire WMA pakt dit op, maar een custom weging kan helpen om 'noise' te filteren.

Dit is wat professionals 'fine-tuning' noemen. Er is geen 'heilige graal'. De ene indicator werkt beter op een choppy (zijwaartse) markt, de andere op een trendmarkt.

In je backtesting software (zoals Backtrader of een custom script) moet je deze varianten testen. Kijk naar de drawdown.

Als je WMA-strategie in een choppy markt te veel valse signalen geeft, verlies je geld.

Pas de weging of het window aan totdat de curve mooi omhoog gaat zonder al te diepe dalen.

Praktische tips voor je trading bot

Als je deze indicator in je live bot zet, zorg dan dat je data van hoge kwaliteit hebt.

Een WMA is gevoelig voor 'gaps' en verkeerde data punten. Als je broker API (denk aan Degiro of een crypto exchange) een error retourneert of een prijs van €0 geeft, schiet je WMA de verkeerde kant op en trigger je verkeerde orders.

Gebruik altijd data cleaning voordat je de berekening doet. Vervang NaN waardes of verwijder ze. Wees zuinig met je rekenkracht. Als je op de 1-seconde candle handelt met een window van 1000, moet je Python script enorm veel berekeningen doen.

Test je code op snelheid. Vectorized operaties met Pandas en NumPy zijn je vriend.

Vermijd `for` loops door je DataFrame te loopen. Leer waarom Pandas essentieel is voor trading data en hoe je dit efficiënt inzet. Een berekening die 500ms duurt is te lang voor high-frequency trading, maar prima voor daghandel. Combineer de WMA met risicomanagement.

Een indicator zegt niets over hoeveel je inzet. Gebruik de output van je WMA niet als enige trigger, maar ook voor position sizing.

Als de trend sterk is (de lijn loopt steil omhoog) en de prijs zit ver onder de WMA, kan dat een entry sein zijn.

Zet dan misschien 2 contracts in in plaats van 1. Als de trend zwak is, reduceer je je positie. Dit is de basis van goed geldbeheer.

Test je strategie op meerdere markten. Een WMA op Bitcoin werkt anders dan op een AEX-index future.

De volatiliteit is anders. Pas je parameters aan per asset.

Wat voor de ene markt een goed window is (bijv. 20), is voor de ander te kort of te lang.

Schrijf je code zo flexibel dat je makkelijk kunt wisselen tussen assets en timeframes. Zo bouw je een robuust systeem dat overeind blijft in verschillende marktcondities.

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 →