RSI indicator berekenen zonder externe libraries in Python
Je zit achter je scherm, je Python-script draait en je wilt een RSI indicator bouwen zonder dat je weer een bibliotheek moet installeren. Geen pandas, geen TA-Lib, geen numpy. Je wilt het snappen, het zelf maken en het direct gebruiken in je backtesting bot.
Dit is een stevige handleiding die je meteen aan de slag zet.
We bouwen de RSI vanaf nul, met simpele Python en een duidelijk verhaal.
Wat is de RSI en waarom bouw je hem zelf?
De RSI is een momentum-indicator die laat zien of een koers te hard omhoog of omlaag schiet. Meestal kijk je naar een periode van 14 candles, maar je kunt ook 7 of 21 gebruiken. De waarde loopt van 0 tot 100.
Boven de 70 is het aandeel vaak overbought, onder de 30 vaak oversold.
In algoritmische trading bots gebruiken we RSI om entry- en exit-regels vast te leggen en om risicomanagement in te bouwen. Waarom zonder externe libraries?
Omdat je dan precies weet wat er gebeurt. Je controleert elke stap, je vermijdt verborgen logica en je kunt je bot sneller debuggen. Als je later een broker-API aansluit, weet je exact welke data je nodig hebt en hoe je die verwerkt. Bovendien draait je code lichter en dat is fijn tijdens live trading en backtests.
De kern: hoe de RSI werkt in simpele stappen
De RSI vergelijkt de stijgende en dalende bewegingen in een periode. Je berekent eerst de veranderingen per candle.
Dan deel je die op in gemiddelde winst en gemiddeld verlies. De formule is simpel: RS = gemiddelde winst / gemiddeld verlies. RSI = 100 - (100 / (1 + RS)).
Er zijn twee methoden voor het gemiddelde: smoothed (exponentieel) en simple (lineair). De klassieke RSI van Wilder gebruikt een smoothed gemiddelde.
Dat betekent dat je het vorige gemiddelde meeneemt en de nieuwe candle optelt of aftrekt.
Je kunt ook een simple moving average nemen, maar dat voelt anders in de praktijk. Kies bewust, want je signaal verandert ermee. Stel: je hebt 14 candles. Op candle 15 tel je de winst en het verlies per candle.
Je telt de totale winst en het totale verlies. Je deelt door 14 voor een simple average.
Voor de smoothed variant neem je op candle 15 het gemiddelde van candle 14 en voeg je de nieuwe winst of het verlies toe. De eerste berekening is een simple average, daarna bouw je verder met de smoothing.
Python vanaf nul: code die werkt zonder libraries
De onderstaande code berekent RSI met een simple moving average voor de eerste keer en daarna met smoothing. Je kunt ook de PyRSI library gebruiken voor geavanceerde RSI berekeningen in je backtesting bot.
De input is een lijst met sluitkoersen, de output een lijst met RSI-waarden. Stap 1: basisfunctie Deze code is licht en snel.
def rsi(closes, period=14):
if len(closes) < period + 1:
return []
deltas = [closes[i] - closes[i-1] for i in range(1, len(closes))]
gains = [max(d, 0) for d in deltas]
losses = [max(-d, 0) for d in deltas]
# eerste gemiddelden (simple average)
avg_gain = sum(gains[:period]) / period
avg_loss = sum(losses[:period]) / period
rsi_values = []
# eerste RSI op positie period
rs = avg_gain / avg_loss if avg_loss != 0 else float('inf')
rsi = 100 - (100 / (1 + rs))
rsi_values.append(rsi)
# smoothing voor volgende candles
for i in range(period, len(deltas)):
avg_gain = (avg_gain * (period - 1) + gains[i]) / period
avg_loss = (avg_loss * (period - 1) + losses[i]) / period
rs = avg_gain / avg_loss if avg_loss != 0 else float('inf')
rsi = 100 - (100 / (1 + rs))
rsi_values.append(rsi)
# je wilt een lijst met dezelfde lengte als closes, met None voor de eerste periode
return [None] * period + rsi_values
Je kunt hem testen met een lijst van 50 of 100 koersen.
Je ziet direct hoe de RSI reageert op snelle bewegingen. In een backtesting omgeving kun je deze functie toepassen op elke candle, zonder dat je een externe library nodig hebt.
Backtesten en integreren met brokers en API’s
Als je een backtesting bot bouwt, laad je historische data van een broker of data-provider.
Je kunt een API zoals die van Interactive Brokers of een crypto-exchange gebruiken. Je haalt de sluitkoersen op, berekent technische indicatoren met TA-Lib en je legt je entry- en exit-regels vast. Bijvoorbeeld: koop als RSI onder 30 komt en de volgende candle sluit boven de vorige, verkoop als RSI boven 70 komt en de volgende candle sluit onder de vorige.
Risicomanagement is essentieel. Je kunt een stop-loss instellen op een vaste procentuele daling, bijvoorbeeld 2% op aandelen of 1% op crypto, afhankelijk van volatiliteit.
Je kunt ook een trailing stop gebruiken. In je bot bouw je een eenvoudige risicobeperking in: maximaal 1% van je totale kapitaal per trade, of een vaste positiegrootte van bijvoorbeeld 1000 euro per trade.
Je code blijft hetzelfde: je roept de rsi-functie aan op je prijslijst en je gebruikt de output voor je beslissingen. In een live omgeving sluit je de broker-API aan en stuur je orders via REST of WebSocket. Zorg dat je logging hebt, zodat je elke RSI-waarde en elke trade kunt controleren.
Varianten en praktische tips
Je kunt de RSI aanpassen voor verschillende markten. Voor aandelen werkt een periode van 14 vaak goed.
Voor crypto kun je 7 of 9 proberen, omdat de markt sneller beweegt. Je kunt ook een andere smoothing kiezen: in plaats van Wilder’s smoothing kun je een simple moving average gebruiken voor alle waarden. Dat maakt de RSI gevoeliger en geeft meer signalen, maar ook meer vals signalen.
Een andere variant is de RSI met een extra filter: je kijkt naar het kruisen van de RSI met een drempel en combineert dat met een prijsactie-patroon, zoals een higher low of lower high.
- Gebruik een vaste periode en hou die consistent in je backtest en live trading.
- Test met verschillende brokers en data-kwaliteit: een API kan net iets andere candles geven.
- Bouw een eenvoudige risicoregels in: vaste procentuele stop-loss en een maximum per trade.
- Log elke RSI-waarde en elke trade, zodat je later kunt analyseren wat werkt.
- Probeer de RSI op meerdere timeframes: 5 minuten voor snelle trades, 1 uur voor rustigere trades.
Je kunt ook een divergence-scanner bouwen: als de koers een hogere top maakt en de RSI een lagere top, dan is dat een signaal van verzwakking. Dat is handig voor risicomanagement en voor het timen van entries. Praktische tips voor je bot:
Als je een RSI indicator vanaf nul in Python bouwt, heb je een sterke basis voor je strategie. Je kunt hem integreren in je backtesting bot, je broker-API aansluiten en je risicomanagement op orde brengen. Zo blijf je in control en bouw je een trading systeem dat je echt begrijpt.
