Wat ik leerde van het verliezen van 50% van mijn account door een bug
Je zit rustig achter je scherm, je Python-bot draait en je account groeit gestaag.
Tot je wakker wordt en ziet dat er ineens 50% van je kapitaal weg is. Geen hack, geen marktcrash, maar een stomme bug in je eigen code.
Ik heb het meegemaakt, en het voelde alsof ik mezelf in mijn eigen voet had geschoten. In dit verhaal deel ik wat ik heb geleerd, zodat jij niet dezelfde fouten maakt.
De bug die alles veranderde
Ik was aan het handelen op Binance met een Python-bot die ik zelf had gebouwd. De bot gebruikte de CCXT-bibliotheek om via de API orders te plaatsen.
Mijn strategie was een eenvoudige mean-reversion op BTC/USDT, met een backtest die er veelbelovend uitzag.
In de backtest draaide de bot soepel en liet hij een winst van 15% zien over drie maanden. In de live-omgeving ging het mis. De bug zat in de risicomanagement-laag: de stop-loss werd niet correct berekend bij een kleine wijziging in de tick size.
De bot plaatste per ongeluk een market order met een te groot volume, waardoor de liquiditeit op de exchange niet toereikend was. De order werd gedeeltelijk uitgevoerd tegen een veel slechtere prijs, en de rest van de positie werd met verlies gesloten. De schade was direct zichtbaar: een verlies van 50% van mijn account in één nacht. Geen fraude, geen exotische derivaten, gewoon een fout in mijn eigen code. Het voelde alsof ik mezelf had opgelicht, maar dan zonder slechte bedoelingen.
Waarom deze fouten zo pijnlijk zijn
Een bug in je trading-bot is geen technisch detail, het is een directe bedreiging voor je kapitaal.
In de wereld van algoritmisch traden gaat het snel: een verkeerde API-call kan in seconden duizenden euro’s kosten. Je broker, zoals Interactive Brokers of Binance, geeft je geen waarschuwing als je eigen code een fout maakt.
Backtesting geeft een vals gevoel van veiligheid. Mijn backtest liet een mooie equity curve zien, maar die was gebaseerd op historische data zonder rekening te houden met slippage, spread en liquiditeit. In de realiteit zijn die factoren cruciaal, vooral bij grotere volumes. Risicomanagement is de ruggengraat van elke bot.
Zonder goede stop-losses, position sizing en limieten op het aantal transacties, loop je het risico je hele account te verliezen.
Een bug in die onderdelen is erger dan een verkeerde voorspelling, want het vernietigt je kapitaal zonder dat de markt iets hoeft te doen.
Hoe het misging: de technische details
De bug zat in de functie die de stop-loss prijs berekende. Ik gebruikte een eenvoudige formule: entry_prijs * (1 - stop_loss_percentage).
Maar ik had geen rekening gehouden met de tick size van BTC/USDT, die op Binance 0,01 USDT is. De bot stopte een getal dat niet valide was, en de API weigerde de order. In plaats van te stoppen, probeerde de bot een market order te plaatsen, wat leidde tot een gedeeltelijke uitvoering tegen een veel lagere prijs.
De API van Binance reageerde met een foutmelding, maar mijn error-handling was niet robuust.
De bot probeerde opnieuw, zonder limiet, waardoor er meerdere orders werden geplaatst. Dit resulteerde in een cascade van transacties, elk met hogere kosten en slechtere prijzen. De backtest had deze fout niet ontdekt omdat de historische data geen tick-size beperkingen simuleerde. Bovendien had ik geen stress-test uitgevoerd met extreme scenario’s, zoals een plotseling dalende liquiditeit. In de live-omgeving kwamen deze factoren samen en werd de bug fataal.
Wat ik heb geleerd en hoe je het voorkomt
Ik heb een aantal lessen getrokken uit deze ervaring, die ik graag met je deel:
- Test je code met realistische scenario’s: Gebruik niet alleen historische data, maar simuleer ook slippage, spread en liquiditeit. Tools zoals Backtrader of Zipline kunnen hierbij helpen, maar je moet ze zelf configureren met realistische parameters.
- Implementeer robuuste error-handling: Zorg dat je bot stopt bij een API-fout, in plaats van te blijven proberen. Gebruik try-except blokken en log alle fouten.
- Gebruik een sandbox-omgeving: Test je bot eerst op een demo-account of in de sandbox van je broker. Bij Binance kun je dit doen met de testnet-API.
- Monitor je bot in real-time: Stel alerts in voor ongewone activiteit, zoals een plotseling hoog volume of een ongeldige order. Tools zoals Grafana of een eenvoudige Discord-bot kunnen hierbij helpen.
- Beperk je risico met position sizing: Gebruik nooit meer dan 1-2% van je account per trade. In mijn geval had dit het verlies beperkt tot een paar procent in plaats van 50%.
Een andere belangrijke les is om je code regelmatig te reviewen, zelfs als je denkt dat het goed werkt. Ik heb nu een checklist die ik doorloop voordat ik een bot live zet: is de stop-loss logica getest? Zijn de API-calls beveiligd? Is de position sizing correct?
Praktische tips voor je eigen bot
Als je net begint met algoritmisch traden, begin dan klein. Gebruik een broker met lage kosten en een goede API, zoals Binance of Interactive Brokers.
Voor Python is de CCXT-bibliotheek een goede start, maar zorg dat je de documentatie goed leest. Investeer tijd in risicomanagement. Gebruik libraries zoals PyPortfolioOpt voor optimalisatie, maar pas op voor overfitting. Een realistische case study over winstgevendheid laat zien dat een backtest die te mooi lijkt, dat vaak ook is.
Test je bot met verschillende marktomstandigheden, zoals een bull market, bear market en zijwaartse bewegingen. Bekijk bijvoorbeeld deze case study over mean reversion en stel een budget in voor fouten.
Ik heb nu een apart account voor experimenten, met een maximum van €500.
Als er een bug optreedt, beperkt het de schade. Ook heb ik een verzekering in de vorm van een stop-loss op accountniveau: als mijn totale verlies 10% bereikt, stopt de bot automatisch. Leren van extreme marktcondities is essentieel; zo heb ik zelf geanalyseerd hoe mijn bot de corona-crash van 2020 overleefde. Tot slot, wees niet te trots om hulp te vragen.
Community’s zoals Reddit’s r/algotrading of Discord-groepen voor Python-traders zijn geweldige plekken om kennis te delen. Ik heb mijn bug uiteindelijk gevonden dankzij een mede-trader die mijn code reviewde.
Verliezen hoort bij traden, maar een bug die je account vernietigt, is vermijdbaar. Met de juiste voorbereiding en een kritische blik op je code, kun je deze pijnlijke ervaring overslaan. Succes!
