Maximum Drawdown limieten instellen in je trading code
Stel je voor: je hebt een mooie bot gebouwd in Python, je backtest draait soepel via de API van Interactive Brokers of Alpaca, en de resultaten zien er veelbelovend uit.
Maar dan komt de echte wereld: een paar onverwachte marktschokken en je equity curve zakt als een steen. Zonder een vangnet verlies je niet alleen geld, maar ook vertrouwen.
Daarom is een maximum drawdown limiet in je code niet optioneel, het is je reddingsboei. Het is een harde grens die je bot automatisch stopt voordat de schade onherstelbaar wordt.
Wat is een maximum drawdown limiet eigenlijk?
Maximum drawdown (MDD) is het pijnlijkste cijfer in je trading rapport. Het meet de grootste val van je totale vermogen van een piek naar een bodem, uitgedrukt als percentage.
Stel je begint met €10.000, je portfolio stijgt naar €12.000, en zakt daarna terug naar €8.500.
Je drawdown is dan (12.000 - 8.500) / 12.000 = 29,2%. Een maximum drawdown limiet is een drempel die je instelt, bijvoorbeeld op 15%. Als je bot deze grens raakt, stop je alle handel direct.
Die limiet is geen advies, het is een automatische actie. Je script checkt continu je equity curve, berekent de huidige drawdown ten opzichte van de recentste piek, en zet de bot stil als het te ver doorschiet.
Het is een simpele, effectieve manier om je kapitaal te beschermen tegen verliezen die je niet meer kunt inhalen zonder extreme risico’s te nemen. Waarom is dit zo cruciaal? Omdat verliezen niet lineair zijn. Een verlies van 50% vereist een winst van 100% om terug te keren. Met een drawdown limiet beperk je die pijn tot een niveau dat je nog kunt herstellen, zonder je hele account leeg te trekken.
Waarom je deze limiet nú in je code moet bouwen
Veel traders denken: “Ik kijk wel als het misgaat.” Maar op het moment dat de markt ontploft, is je emotie hoog en je reactietraag. Een bot die door blijft draaien tijdens een crash kan je account in een paar uur vernietigen.
Kijk naar de Flash Crash van 2010 of de coronacrash van 2020 – zonder stoppen verdampte kapitaal in minuten.
Een maximum drawdown limiet beschermt je tegen jezelf en tegen de markt. Het voorkomt dat je door blijft traden met een verlies dat je niet meer kunt dragen. Je bot stopt, je ademt even, en je kunt rustig beslissen of je de boel reset of de strategie aanpast.
Denk ook aan je broker. Bij Interactive Brokers of Saxo Bank krijg jeMargin Calls als je te ver onder je onderhoudsmarge zakt. Een drawdown limiet voorkomt dat je die grens nadert. Het houdt je bot levensvatbaar en je relatie met je broker gezond.
Hoe je een drawdown limiet in Python bouwt
Begin met het bijhouden van je equity curve. In je trading script log je na elke trade je totale vermogen.
Je hebt een variabele voor de hoogste piek (peak) en een voor de huidige drawdown.
De formule is simpel: drawdown = (peak - current) / peak. Als deze waarde je limiet overschrijdt, activeer je een stop-mechanisme. Gebruik een globale flag in je bot, bijvoorbeeld is_trading_stopped.
Als drawdown > limiet, zet je deze op True en sluit je alle open posities. Voorbeeld in pseudocode:
if current_drawdown > max_drawdown_limit:
is_trading_stopped = True
close_all_positions()
send_alert("Drawdown limiet bereikt!")
Integreer dit met je broker API. Bij Alpaca of Interactive Brokers kun je via REST of WebSocket je posities sluiten. Test dit in je backtest met historical data van minimaal 5 jaar, inclusief crashes. Gebruik libraries als backtrader of zipline om de limiet te simuleren.
Zorg dat je limiet reëel is: voor een agressieve bot misschien 20%, voor een defensieve 10%.
Vergeet niet om de limiet per timeframe te bekijken. Een dagelijkse drawdown van 5% kan op jaarbasis 30% worden als je elke dag verliest. Stel je limiet in op een niveau dat past bij je strategie en je risicotolerantie. Test met verschillende waarden: 10%, 15%, 20% en kijk wat het doet met je winstgevendheid in de backtest.
Verschillende modellen en hun prijsindicaties
Er zijn verschillende manieren om je drawdown limiet in te richten. Een eenvoudig model is de vaste percentage-limiet: je kiest een vaste grens, bijvoorbeeld 15%, en houdt die strikt aan.
Dit is makkelijk te implementeren en werkt goed voor beginnende bots. De kosten? Niks, behalve wat rekenkracht op je server. Een dynamisch model past de limiet aan op basis van volatiliteit.
Gebruik de ATR (Average True Range) of de standaarddeviatie van je equity curve. Bij hoge volatiliteit verlaag je de limiet naar 12%, bij lage verhoog je naar 18%.
Dit vereist meer code, maar beschermt beter in wisselende markten. Je kunt deze data halen uit je broker API, zoals de historische prijzen van de S&P 500 via Interactive Brokers.
Een derde model is het portfolio-niveau: je stelt een limiet in op je totale account, niet per strategie. Als je meerdere bots draait, bijvoorbeeld een voor aandelen en een voor crypto, en je totale drawdown bereikt 15%, stop je alle bots. Dit voorkomt dat één slechte bot je hele account meesleurt. Prijstechnisch: je hebt geen extra kosten, maar je moet wel een centraal monitoring script bouwen, wat een uur of 4 ontwikkeling kost.
Een geavanceerde optie is de Kelly-criterium-aanpassing voor je positiegrootte: je limiet wordt dynamisch gebaseerd op je winstpercentage en gemiddelde winst/verlies. Dit is ingewikkelder en vereist wiskundige kennis, maar kan je drawdown beperken tot 10-12% zonder je winst te veel in te perken.
Voorbeeld: als je winstpercentage 60% is en je gemiddelde winst €50 per trade, stel je limiet in op 12% om ruimte te laten voor variance. Kies een model dat past bij je ervaring. Beginners: pas de veilige 1% regel toe voor je risicomanagement.
Gevorderden: probeer een volatiliteit-gestuurde limiet. Test altijd in een backtest met echte data van je broker, inclusief transactiekosten en slippage, en let op of je niet onbewust aan over-leveraging doet.
Zo voorkom je verrassingen in de live-omgeving.
Praktische tips voor implementatie en monitoring
Test je drawdown limiet grondig voordat je live gaat. Gebruik een paper trading account bij je broker om de limiet in echte marktcondities te zien werken.
Loop scenario’s: een flash crash, een langzaam dalende markt, en een zijwaartse beweging. Zorg dat je bot altijd reageert, ook als je slaapt. Stel alerts in via Telegram of email.
Als de limiet wordt bereikt, krijg je direct een bericht. Gebruik een service zoals Twilio voor SMS, of de Telegram API voor snelle notificaties.
Dit kost een paar euro per maand, maar het is het waard voor gemoedsrust. Houd je code simpel en leesbaar. Gebruik comments om aan te geven waar de drawdown limiet wordt berekend en waar de stop wordt geactiveerd. Sla je equity data op in een CSV of database, zoals SQLite, voor latere analyse.
Dit helpt je om je limiet bij te stellen op basis van echte resultaten. Onthoud dat een drawdown limiet geen magische oplossing is.
Het is een hulpmiddel in een breder risicomanagementplan. Combineer het met position sizing, stop-losses per trade, en diversificatie over meerdere strategieën. Zo bouw je een bot die niet alleen winstgevend is, maar ook veerkrachtig.
