Hoe voorkom je dat je bot crasht door een 'Memory Leak'?

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Alex de Vries
Quantitatief Analist & Algo-Trading Expert
Dev-Ops & Infrastructuur voor Traders · 2026-02-15 · 6 min leestijd

Een onverwachte crash van je handelsbot is als een koude douche, vooral als je net een mooie winstgevende strategie draait.

Je zit rustig te kijken hoe je Python-script zijn werk doet, en dan is het opeens stil. Niets meer. Het scherm geeft een vage foutmelding of gewoon niks. Vaak is de boosdoener een 'memory leak': je bot eet stiekem al het werkgeheugen op totdat je server het begeeft.

Dat is niet alleen vervelend, het kost je geld. Elke minuut dat je bot down is, mis je kansen of loop je risico. Voorkomen is beter dan genezen, en gelukkig kun je een hoop ellende voorkomen met een paar slimme stappen.

Stap 1: Zet je bot in de gaten met psutil

Je kunt een probleem pas oplossen als je het ziet. De meeste traders weten precies wat hun bot verdient, maar niet hoeveel geheugen 'ie gebruikt.

  1. Installeer de bibliotheek: pip install psutil. Kost je 5 seconden.
  2. Importeer 'm in je hoofdscript: import psutil en import os.
  3. Maak een simpele functie die je aanroept na elke 'cycle' of elke paar minuten. Gebruik deze code:
    process = psutil.Process(os.getpid())
    geheugen_mb = process.memory_info().rss / 1024 / 1024
    print(f"Geheugen gebruik: {geheugen_mb:.2f} MB")
  4. Schrijf deze output naar een logbestand of stuur een notificatie naar je Telegram als het boven een drempelwaarde komt, bijvoorbeeld 500 MB.

Dat is een gemiste kans. We gaan een simpele monitor in je bot bouwen zodat je live ziet wat er gebeurt.

Dit doe je met de Python-bibliotheek psutil. Het is licht, snel en geeft je exact de data die je nodig hebt. Tijdsindicatie: 15 minuten om te implementeren.
Veelgemaakte fout: De functie alleen in de debug-modus aanzetten en dan in productie vergeten. Zet het standaard aan, altijd.

Stap 2: Verwijder oude data en sluit verbindingen netjes af

Een veelvoorkomende oorzaak van geheugenlekken bij trading bots is het vasthouden van data die je niet meer nodig hebt. Je API van Interactive Brokers of Binance stuurt je duizenden prijzen per uur.

  1. Check je data-opslag. Gebruik je een Pandas DataFrame voor candle-data? Verwijder oude rijen met df.drop(df.index[:-100], inplace=True) om alleen de laatste 100 candles te behouden. Je hebt een complete historie vaak niet nodig voor een snelle beslissing.
  2. Sluit je API-verbindingen expliciet. Veel Python-bibliotheken voor brokers (zoals ccxt of ib_insync) houden connecties open. Gebruik een context manager (de with statement) of roep client.close() aan na je request.
  3. Check je event listeners. Luister je naar WebSocket data? Zorg dat je oude listeners verwijdert als je strategie van instrument wisselt. Een losse listener blijft draaien en vult je geheugen met data van een markt die je niet meer gebruikt.
  4. Loop eens door je code en kijk naar globale variabelen. Die blijven bestaan tot het script stopt. Gebruik lokale variabelen binnen functies waar mogelijk; die worden automatisch opgeruimd.

Die sla je op in een lijst, DataFrame of dictionary. Als je die lijst nooit leegmaakt, groeit hij oneindig.

Je bot begint langzaam, maar na een paar uur of dagen zit je RAM vol. Tijdsindicatie: 30 minuten voor een grondige check.
Veelgemaakte fout: Een 'keepalive' timer vergeten uitzetten bij een WebSocket, waardoor de verbinding blijft proberen te herstellen en geheugen opslokt.

Stap 3: Gebruik een 'Guardian' Process met Docker

Als je bot een memory leak heeft die je niet direct vindt, is je volgende verdedigingslinie de infrastructuur. Je wilt niet dat je hele server crasht, maar alleen die ene bot. De oplossing?

Draai je bot in een afgesloten omgeving, een Docker container, en host je trading bot op een AWS EC2 instance, zodat deze automatisch herstart als het misgaat. Dit is je eigen 'herstart-knop' op autopiloot. Tijdsindicatie: 1 uur om Docker en compose op te zetten.
Veelgemaakte fout: De herstart-functie niet testen.

  1. Schrijf een Dockerfile. Begin simpel: FROM python:3.9-slim, kopieer je code, en draai pip install -r requirements.txt.
  2. Maak een docker-compose.yml bestand. Hier zet je de magie aan: voeg restart: unless-stopped toe aan je service. Dit zorgt ervoor dat Docker je container automatisch opnieuw opstart bij een crash.
  3. Stel een geheugenlimiet in. In je Docker Compose bestand kun je een limiet zetten: mem_limit: 1g. Als je bot hieroverheen gaat, crasht de container, maar je server draait vrolijk door. Docker herstart de bot direct.
  4. Gebruik een tooltje als Monit of Supervisor als je geen Docker wilt. Die kunnen een script monitoren en herstarten als het RAM-gebruik te hoog wordt, bijvoorbeeld boven de 80% van je totale RAM.

Zorg dat je weet wat er gebeurt als je een bot forceert om te crashen (bijvoorbeeld met kill -9).

Weet je zeker dat Docker hem opstart?

Stap 4: Automatiseer je testen met een fuzzer

Je wilt niet wachten tot je bot in de 'live' markt crasht. Je wilt het al hebben gezien tijdens het testen.

  1. Schrijf een simpele test-loop. Gebruik je favoriete backtesting-bibliotheek (zoals Backtrader of VectorBT).
  2. In plaats van nette data, maak je een dataset met extreme pieken en dalen. Een dataset van 24 uur die je in 1 minuut afspeelt.
  3. Laat deze test 10 tot 20 keer draaien. Gebruik je monitoring uit Stap 1 om te kijken of het geheugen bij elke run netjes wordt opgeruimd.
  4. Voeg een 'stress-test' toe: draai de bot op een machine met weinig RAM (bijvoorbeeld een goedkope €5/maand VPS). Als hij daar crasht, weet je dat je geheugenbeheer niet waterdicht is.

Een 'fuzzer' is een testtool die random data door je bot gooit om zwakke plekken te vinden. In de trading-wereld betekent dit: geef je bot een onmogelijke stroom aan marktdata en kijk of hij het begeeft. Tijdsindicatie: 2 uur om een degelijke test te schrijven en te draaien.
Veelgemaakte fout: Alleen testen met schone, historische data uit een CSV. Zorg er bovendien voor dat je een schone Python virtuele omgeving gebruikt, want de echte wereld is rauw en vol met haperingen.

Stap 5: De verificatie-checklist

Voordat je je bot (weer) live zet, is het verstandig om onze gids voor logging in Python even na te lopen.

  • Monitoring actief? Staat de psutil-logfunctie aan en weet je waar je de data vindt?
  • Data-opruiming? Zijn er lijsten of DataFrames die oneindig groeien? Zit er een limiet op?
  • API's netjes? Zijn alle verbindingen met de broker (via REST of WebSocket) afgesloten na elk gebruik?
  • Docker Restart? Draait je bot in een container met restart: unless-stopped?
  • Herstart getest? Weet je zeker dat je bot overeind krabbelt na een crash?

Vijf minuten werk die je een hoop stress kan besparen. Zie dit als je 'pre-flight check' voordat je het luchtruim kiest met je kapitaal.

Als je overal 'ja' op kunt antwoorden, ben je een stuk veiliger. Je bot is nu een stuk slimmer ingericht. Hij kan niet alleen winst maken, maar houdt zichzelf ook in de gaten. En mocht het toch misgaan? Dan heb je Docker die hem gewoon weer opstart. Slaap lekker.

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 Dev-Ops & Infrastructuur voor Traders
Ga naar overzicht →