Wat is 'Sensitivity Analysis' voor je trading parameters?
Stel je voor: je hebt een prachtige trading bot gebouwd in Python.
Hij draait soepel, scant de markt met een API van Interactive Brokers, en je backtests laten winsten zien die je doen glimlachen. Je zet hem live en... boem.
De bot draait als een kip zonder kop. Hij handelt te veel, verliest te veel, of zit stil op de verkeerde momenten. Wat is er misgegaan? Je parameters waren te strak getuned voor die ene, specifieke marktperiode die je getest hebt. Dit is waar 'Sensitivity Analysis' binnenkomt: je zekerheidsvest tegen de storm van de echte markt.
Wat is Sensitivity Analysis eigenlijk?
Denk aan Sensitivity Analysis als het gecontroleerd oprekken van je parameters om te zien waar de stukken breken. Het is een manier om je strategie te testen onder verschillende omstandigheden, zonder meteen al je geld op het spel te zetten.
Je vraagt niet alleen: "Is mijn strategie winstgevend?", maar "Hoeveel winst verliest mijn strategie als de markt 10% volatieler wordt?"
Stel je een eenvoudige EMA crossover bot voor. Je hebt je parameters ingesteld op een snelle EMA van 12 en een langzame van 26. In je backtest op data van de afgelopen 3 maanden presteert dit perfect.
Sensitivity Analysis betekent nu dat je die 12 en 26 niet ziet als vaste getallen, maar als een range. Je test 10 & 20, 11 & 24, 13 & 28, enzovoort.
Je kijkt niet naar het allerbeste resultaat, maar naar hoeveel de resultaten verslechteren als je net iets verder van je 'perfecte' instelling afzit. Het doel is robuustheid. Je wilt geen strategie die alleen werkt bij 21 graden en bewolking in april. Je wilt een bot die het doet als het stormt, als het rustig is, en alles daartussenin. Het helpt je de gevoelige plekken van je code bloot te leggen, zodat je weet waar je op moet letten.
Waarom je dit echt niet kunt overslaan
Zonder Sensitivity Analysis ben je gewoon aan het gokken met extra stappen.
Je hebt misschien per ongeluk je parameters gefinetuned op toeval, een fenomeen dat 'overfitting' heet. Je bot is dan als een student die precies de antwoorden van de oefenexamens heeft geleerd, maar compleet vastloopt bij het echte examen met andere vragen. De markt is nooit precies hetzelfde als je backtestdata.
De echte markt is rauw en onvoorspelbaar. Denk aan een plotse prijsstijging van Bitcoin van €40.000 naar €42.000 in een uur, of een rente-aankondiging van de ECB die de EUR/USD volatiel maakt.
Als je bot niet getest is op deze schommelingen, zal hij falen.
Sensitivity Analysis geeft je een idee van hoeveel speling je bot heeft voordat hij uit de bocht vliegt. Het is een stresstest voor je algoritme. Je bespaart er ook geld mee. Door vooraf te zien dat je bot instort bij een transactiekostenstijging van €0,01 per trade, voorkom je dat je deze fout live maakt.
Je weet dan dat je broker keuze (bijvoorbeeld van €1,50 naar €1,60 per trade) een directe impact heeft op je winstgevendheid. Het is een investering in je eigen gemoedsrust.
Hoe je Sensitivity Analysis uitvoert: de kern
Oké, laten we praktisch worden. Stel je hebt een Python script met je backtesting engine, misschien gebruik je libraries als Backtrader of vectorbt. Je start met het identificeren van je belangrijkste parameters.
Dit zijn meestal de getallen die je makkelijk aan kunt passen, zoals stop-loss percentages, winstdoelen, of de periodes van je indicatoren.
Vervolgens maak je een 'parameter grid'. Laten we zeggen dat je een RSI-strategie gebruikt.
Je normale instelling is RSI 14. Je besluit te testen van RSI 10 tot RSI 20, in stappen van 1. Je script moet dan 11 aparte backtests draaien.
Voor elke test registreer je de belangrijkste resultaten: totale winst, drawdown, en het aantal trades.
Dit kun je makkelijk automatiseren met een simpele for-loop in Python. Een andere variant is het testen van externe factoren. Wat gebeurt er als je transactiekosten 50% hoger zijn? Of als de spread verdubbelt?
Dit simuleren is essentieel. Je broker rekent vaak kosten per trade (bijv. €3,00 + 0,05% van het volume). Speel hiermee.
Verhoog deze kosten in je script en kijk of je strategie nog steeds positief is.
Als je strategie onderuit gaat bij €3,50 per trade, is hij te kwetsbaar. Het resultaat van deze analyse is een hittekaart (heatmap) of een tabel. Je ziet in één oogopslag welke combinaties werken en welke niet.
Je ziet welke parameters een 'smalle corridor' van succes hebben en welke parameters een breed succesbereik hebben. Dat is goud waard.
Modellen en prijsindicaties: wat levert het op?
Er zijn geen vaste 'prijzen' voor Sensitivity Analysis, want het is een methode, geen product. Wat het je oplevert, is echter direct in geld uit te drukken.
Als je analyse laat zien dat je strategie €500 winst maakt bij een stop-loss van 2%, maar opeens €200 verliest bij een stop-loss van 1,8%, dan is die 0,2% verschil je 'prijs' voor risico. Je kunt een model maken op basis van de uitkomsten. Stel, je ziet dat de winst piekt bij een 'take-profit' van €1,50 per aandeel, maar dat deze snel daalt als je naar €1,20 gaat.
Je model zegt dan: "Houd de take-profit tussen €1,40 en €1,60 voor een stabiele winst." Dit is geen advies, maar een richtlijn gebaseerd op data.
Een specifieke variant is de 'Monte Carlo' analyse. Dit is een stap verder. In plaats van vast te houden aan je historische data, gebruikt dit model willekeurige variaties op basis van de data die je hebt.
Het simuleert 1.000 verschillende marktscenario's die allemaal lijken op het verleden, maar net anders zijn. Dit geeft je een betrouwbaarheidsinterval.
Je weet dan: "In 95% van de gevallen zou dit systeem minimaal €500 winst moeten maken."
Voor algoritmische traders op platforms als Interactive Brokers of LMAX is deze kennis direct toepasbaar. Je weet nu dat je API-limieten (hoeveel verzoeken je mag doen) kritisch kunnen zijn. Test hoe je bot reageert als hij maar 90% van zijn data kan krijgen door vertragingen. Is hij dan nog steeds winstgevend? Het gebruik van Particle Swarm Optimization helpt je deze 'verborgen kosten' en optimale parameters te vinden.
Praktische tips om meteen te beginnen
Begin klein. Je hoeft niet meteen 50 parameters tegelijk te testen; ontdek waarom eenvoud in je strategie cruciaal is. Pak er drie.
Bijvoorbeeld: je entry-indicator, je stop-loss en je positiegrootte. Kijk wat er gebeurt als je ze één voor één oprekt. Een Python script met een simpele nested loop is vaak al genoeg.
Gebruik libraries zoals Pandas voor de data en Matplotlib voor de visualisatie van je resultaten.
Let op de kosten. Sensitivity Analysis kan rekenkracht vragen. Als je een heel fijnmazig netwerk van tests draait (bijv. elke parameter van 1 tot 100 in stappen van 1), kan dit lang duren.
Zorg dat je backtests efficiënt zijn geschreven. Test je script op een subset van data voordat je de volledige historie draait.
Dit scheelt uren wachten. Focus op de randen.
De interessantste inzichten vind je niet in het midden van je testbereik, maar aan de randen. Wat gebeurt er als je stop-loss extreem strak is? Wat als die heel ruim is? Deze extremen vertellen je hoe kwetsbaar je systeem is.
Een bot die werkt met een stop-loss van 5% maar faalt bij 4,5% is een ramp in wording. Maak er een gewoonte van.
Doe dit niet één keer aan het begin. Doe het elke keer als je een parameter aanpast. Verander je de periode van je Moving Average van 50 naar 55?
Test meteen even hoe gevoelig je strategie daarop is via robustness testing. Zo bouw je een ijzersterke trading bot, stap voor stap, met het vertrouwen van iemand die zijn zaakjes echt op orde heeft.
