Voortschrijdende gemiddelden (SMA) berekenen met de Pandas rolling functie

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

Stel je voor: je hebt een Python script dat elke dag de koers van een aandeel zoals ASML of de Bitcoin uitleest via een broker API. Je wilt niet elke keer opnieuw rekenen hoe de gemiddelde prijs over de laatste 20 dagen beweegt.

Met de Pandas rolling functie bereken je voortschrijdende gemiddelden (SMA) supersnel, zonder ingewikkelde formules. Dit is de basis voor bijna elke algoritmische trading bot en helpt je om in één oogopslag te zien of een trend stijgt of daalt. Een voortschrijdend gemiddelde (SMA) is een simpel gemiddelde van een bepaald aantal recente prijzen.

Bij een SMA20 tel je de slotprijzen van de laatste 20 dagen op en deel je door 20.

Elke dag schuift het venster één dag op: de oudste prijs valt eruit, de nieuwste komt erbij. Zo ontstaat een vloeiende lijn die ruis filtert en richting laat zien. In Python gebruik je hiervoor de rolling functie van Pandas, die deze berekening direct voor je doet.

Waarom SMA’s zo nuttig zijn in algoritmische trading

SMA’s geven je een helder beeld van de trend zonder dat je naar elke piek en dal hoeft te staren.

Een stijgende SMA20 op de DAX future bijvoorbeeld, laat zien dat de markt kortetermijnmomentum heeft. Een dalende SMA20 op de EUR/USD waarschuwt voor neerwaartse druk.

Je kunt deze signalen gebruiken om entries te timen of om je risicomanagement strakker te maken. In een backtest op een broker zoals Interactive Brokers of DEGIRO check je of een SMA-crossover (bijvoorbeeld SMA20 kruist SMA50) winstgevend is op aandelen, crypto of forex. Je ziet snel of je te veel transacties maakt en of de spread en fees je winst opsouperen. SMA’s helpen ook bij het bepalen van stop-loss niveaus: een dalende SMA kan dienen als dynamische ondergrens.

Algoritmische bots vertrouwen op consistente berekeningen. Met Pandas rolling voorkom je fouten en hou je je code onderhoudbaar.

Je kunt makkelijk switchen tussen tijdframes (15 minuten, 1 uur, dag) en tussen producten (aandelen, crypto, futures). Zo bouw je een flexibele strategie die je op meerdere markten test, van de AEX tot aan de S&P 500 future.

Hoe de Pandas rolling functie werkt: stap voor stap

Je begint met een DataFrame met een kolom ‘close’ die je via een API van je broker of data-provider binnenhaalt.

df['SMA20'] = df['close'].rolling(window=20).mean()

Zorg dat de index een datetime is, want Pandas rekent dan makkelijk met tijdreeksen. De rolling functie maakt een venster over een aantal periods en past daarop een berekening toe, zoals .mean() voor het gemiddelde.

Deze regel berekent voor elke dag het gemiddelde van de vorige 20 slotprijzen. Als je minder dan 20 data-punten hebt, krijg je NaN (not a number), want er is dan geen volledig venster. Je kunt het venster ook op 50 of 200 zetten voor een medium- of langetermijnlijn, afhankelijk van je strategie. Wil je gewogen voortschrijdende gemiddelden berekenen voor snellere signalen? Gebruik dan .ewm(span=20).mean().

Een EMA reageert sterker op recente prijsbewegingen dan een SMA. Voor backtests is het slim om beide te vergelijken: een EMA crossover geeft vaak eerder signalen, maar kan ook meer valse signalen geven.

Een praktische tip: gebruik .rolling(window=20, min_periods=10).mean() als je toch al snel een indicatie wilt, zelfs als er minder dan 20 data-punten zijn. Zo voorkom je te veel NaN-waarden in de eerste dagen van een nieuwe dataset. Zorg dat je Pandas correct hebt geconfigureerd voor financiële tijdsreeksen, en test dit altijd met je broker data, want bij intraday-koersen kunnen openingstijden en weekenden gaten geven.

Verschillende SMA-modellen en prijsindicaties

Het klassieke model is de SMA-crossover: een korte SMA (bijvoorbeeld 20) kruist een lange SMA (bijvoorbeeld 50).

Koop als de korte SMA boven de lange uitkomt, verkoop als hij eronder duikt. Dit werkt op aandelen zoals Shell, crypto zoals BTC/USD en forex paren zoals EUR/USD. Let wel op de spread: bij smallere marges moet je rekening houden met kosten. Een tweede model is de trendfilter: alleen traden als de prijs boven de SMA200 ligt.

Dit filtert bear-markten en helpt je om long-only strategieën veiliger te maken. Voor short-only strategieën draai je het om: prijs onder SMA200.

In een backtest op een broker API zie je vaak dat deze filter het aantal trades verlaagt, maar de winst per trade verhoogt.

Een derde model is de price-channel met SMA: combineer een bovenkanaal (SMA20 + 2%) en een onderkanaal (SMA20 - 2%). Koop bij een bounce op het onderkanaal, stop bij het bovenkanaal. Dit werkt goed op stabiele aandelen en futures met lage volatiliteit.

Pas de percentages aan op basis van historische volatiliteit, bijvoorbeeld 1,5% voor rustige aandelen en 3% voor crypto. Prijsindicaties kun je vertalen naar concrete niveaus: bij een SMA20 van €150 op een aandeel en een target van 2% winst, ligt je doel op €153.

Bij een EUR/USD positie met SMA50 op 1,0800 en een risico van 20 pips, zet je stop-loss op 1,0780. In je bot kun je deze niveaus automatisch berekenen, zodat je emoties buiten spel blijven.

Praktische tips voor backtesting en risicomanagement

Test je SMA-strategie altijd op meerdere markten en tijdframes. Gebruik een broker API die historische data biedt, zoals Interactive Brokers of een crypto exchange met een Python wrapper.

Zorg dat je data schoon is: verwijder nullen, splits en dividendcorrecties meenemen, en check voor gaps in het weekend bij crypto. Beperk je transactiekosten. SMA-crossovers genereren veel trades, dus tel de spread en fees mee.

Een trade van €10.000 met een spread van 0,05% en een fee van €2 kost al €7.

Als je strategie €10 winst per trade maakt, ben je al snel break-even. Pas je SMA-vensters aan om het aantal trades te verlagen, of filter met een tweede indicatie zoals RSI. Beheer risico’s met position sizing.

Bereken je positie op basis van stop-loss en accountgrootte. Bij een account van €10.000 en een max risico van 1% per trade (€100) zet je een stop bij 2% afstand: je positie wordt €5.000.

In je Python bot bouw je deze berekening in, zodat je nooit te groot inzet en je Bollinger Bands met NumPy en Pandas berekent voor je entry-signalen.

Gebruik een trailing stop langs de SMA voor dynamisch risicobeheer. Log elke trade en elke SMA-waarde. Sla je resultaten op in een CSV of database, zodat je later kunt analyseren wat werkt. Check of je strategie overleeft na een flash crash of een lange bear-markt.

Een goede backtest laat niet alleen winst zien, maar ook drawdown, winstfactor en het aantal opeenvolgende verliezen. Zo bouw je een bot die robuust is en je helpt om met vertrouwen te traden.

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 →