Hyperparameters optimaliseren met Grid Search of Bayesian Optimization

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Alex de Vries
Quantitatief Analist & Algo-Trading Expert
Machine Learning & AI in Trading · 2026-02-15 · 7 min leestijd

Stel je voor: je hebt een prachtige trading bot geschreven in Python. Je strategie zit slim in elkaar, je data is schoon, en je broker API draait soepel.

Maar als je de bot live zet, presteert hij een stuk minder dan je had gehoopt.

Hij is te voorzichtig, of juist veel te agressief. Hij mist kansen of neemt te veel risico. Het probleem zit 'm vaak niet in je idee, maar in de knoppen die je hebt staan.

Die knoppen, dat zijn je hyperparameters. En hoe je die precies instelt, kan het verschil maken tussen een bot die geld verliest en een die consistent winst boekt. Denk aan de 'fast period' en 'slow period' van een MACD-indicator. Of de standaardafwijking (sigma) voor een Bollinger Band-strategie.

Of de hoeveelheid geld die je bot maximaal in één trade mag riskeren.

Dit zijn geen parameters die je zomaar op gevoel instelt. Je wilt de beste combinatie vinden die in het verleden werkte, en die hopelijk in de toekomst ook werkt.

Dat proces heet hyperparameter optimalisatie, en de twee meest gebruikte methoden daarvoor zijn Grid Search en Bayesian Optimization. Laten we ze even rustig bekijken, alsof we aan de keukentafel zitten met een bak koffie.

Waarom je niet zomaar kunt gokken

Je zou kunnen denken: "Ik probeer gewoon even een paar waardes uit, kijk wat het doet." Dat is als autorijden door lukraak aan het stuur te draaien. Je komt misschien vooruit, maar de kans dat je netjes op de weg blijft is klein.

In de wereld van algoritmische trading bots is elke verkeerde instelling een directe weg naar verlies. Te veel risico in een trade en je hele account is in één keer leeg. Te weinig risico en je bot haalt net niet genoeg winst om de transactiekosten van je broker (denk aan €2-€5 per trade) te dekken.

Hyperparameter optimalisatie is dus geen luxe, het is een basisbehoefte. Je wilt een robuuste bot die niet alleen werkt op de data die je nu hebt, maar die ook kan omgaan met onverwachte marktbewegingen.

Door systematisch te testen welke instellingen het beste werken, bouw je vertrouwen op. Je weet dan dat je bot niet zomaar in de fout gaat omdat jij de 'risk-per-trade' toevallig op 5% had gezet in plaats van de veiligere 2%.

De eenvoudige, maar trage aanpak: Grid Search

Grid Search is de meest intuïtieve manier van optimaliseren. Je maakt een 'raster' van mogelijke waardes.

Je geeft je computer een lijstje met opties en zegt: "Test alles." Stel je een RSI-strategie voor.

Je wilt weten welke RSI-periode het beste is: 14, 21 of 28? En welke oversold-waarde: 20, 25 of 30? Grid Search maakt hier een tabel van.

Het test alle 9 combinaties (3 x 3). Het is een brute-force methode. Simpel, maar effectief. De werking is helder. Je backtesting script (in Python, met een library als Backtrader of Zipline) draait een marathon.

Eerst draait het met RSI=14 en oversold=20. Dan met RSI=14 en oversold=25. Enzovoort.

Na elke run kijkt het naar een metric, bijvoorbeeld de totale winst, de Sharpe Ratio of de maximale drawdown. Aan het eind heb je een overzicht en kun je de combinatie kiezen die het beste scoort.

Het voordeel is de eenvoud. Je weet precies wat er getest wordt. Het nadeel? Het kan ongelooflijk traag zijn.

Als je te veel variabelen en te veel waardes toevoegt, groeit het aantal tests exponentieel.

Een simpele Grid Search kan zo ineens 24 uur of langer duren.

Grid Search is als een schiettent op de kermis: je probeert alle gaten af te schieten in de hoop dat je de hoofdprijs raakt. Je mist misschien de beste plek net tussen de gaten in.

De intelligente aanpak: Bayesian Optimization

Waar Grid Search blind alle hoeken van de speeltuin afgaat, is Bayesian Optimization een stuk slimmer.

Het is alsof je een gids hebt die al een beetje weet waar de schat ligt. Deze methode begint met een paar willekeurige tests.

Op basis van die resultaten bouwt het een 'model' van hoe de parameters en de uitkomst (winst) met elkaar te maken hebben. Het kijkt niet naar elke mogelijke combinatie, maar voorspelt welke combinatie de grootste kans heeft om de winst te verhogen. Stel, de eerste test met een 'lookback period' van 20 dagen levert een matige winst op. De tweede test met 50 dagen doet het iets beter.

Bayesian Optimization concludeert: "Oké, waarden rond de 50 dagen zijn veelbelovend. Laten we de volste stap dichter bij de 50 proberen, en misschien ook een stapje verder, naar 60 of 70." Het balanceert slim tussen 'exploreren' (nieuwe gebieden testen) en 'exploiteren' (de beste gebieden verfijnen).

Je bespaart hiermee enorm veel tijd. Waar een Grid Search misschien 1000 runs nodig heeft, vindt Bayesian Optimization vaak een net zo goed of zelfs beter resultaat in 50 tot 100 runs. De bekendste library hiervoor in Python is scikit-optimize (skopt).

Het is dus een iteratief proces. Elke nieuwe run voedt het model met meer informatie, waardoor de volgende suggestie steeds beter wordt.

Dit is vooral handig voor complexe strategieën met veel parameters, zoals een machine learning model voor trading dat voorspelt welke aandelen je moet kopen.

Je wilt niet 10 parameters met elk 10 opties testen, want dat zijn 10 miljard runs. Bayesian Optimization vindt een goede weg door dit doolhof.

Hoe je dit in de praktijk aanpakt met Python

Oké, genoeg theorie. Hoe begin je? Stel, je gebruikt de library Backtrader voor je backtests.

Je hebt een strategie die een 'moving average crossover' gebruikt. Je hebt twee hoofdknoppen: de 'short_window' (bijvoorbeeld 40 dagen) en de 'long_window' (bijvoorbeeld 100 dagen). Je wilt de beste combinatie vinden. Met Grid Search schrijf je een simpele Python-lus die over lijsten met waardes gaat.

Een lijst voor short_window: [20, 30, 40, 50]. Een lijst voor long_window: [80, 100, 120, 140].

Je script draait dan 4 x 4 = 16 backtests. Voor Bayesian Optimization wordt het iets ingewikkelder, maar de principes blijven hetzelfde.

Je gebruikt een library zoals Hyperopt of scikit-optimize. Je definieert een 'search space' – de limieten voor je parameters. Bijvoorbeeld: short_window tussen 10 en 60, long_window tussen 70 en 150.

Je definieert ook een 'doel functie' (objective function). Dat is een functie die de backtest draait en een getal teruggeeft, zoals de 'Sharpe Ratio'.

De optimizer probeert dit getal te maximaliseren. Je geeft de optimizer de vrijheid om slim te zoeken. Je betaalt de 'prijs' van de compute-time, maar die is vaak lager.

Een backtest van 50 runs op een redelijke laptop (€800-€1200) duurt misschien een uur.

Een Grid Search van 1000 runs kan een dag duren. Denk ook aan de broker API.

Sommige brokers rekenen kosten per API-call of backtest-data aanvraag. Door te kiezen voor een efficiëntere optimalisatiemethode, hou je niet alleen tijd over, maar bespaar je ook op eventuele datakosten.

Zorg dat je je resultaten goed logt, zodat je later nog precies weet welke parametercombinatie tot welke uitkomst leidde.

Praktische tips voor succes

Een veelgemaakte fout is 'overfitting'. Je bot presteert fantastisch op de data van 2020-2022, maar in 2023 gaat het mis. Bij het kiezen van je aanpak helpt het om te kijken naar traditionele statistiek vs machine learning om te zien wat voor jouw strategie beter werkt.

Je hebt je bot te strak afgesteld op die specifieke periode. Om dit te voorkomen, gebruik je 'out-of-sample' data.

Deel je data op: gebruik 70% voor het optimaliseren (de training) en de andere 30% voor de finale test. Als je bot op de onbekende 30% nog steeds goed presteert, is de kans groter dat hij robuust is. Focus niet alleen op totale winst.

Een bot die €10.000 wint maar een drawdown heeft van 60% is extreem gevaarlijk. Kijk naar de Sharpe Ratio (risicogecorrigeerde return), de Max Drawdown (grootste verliesgolf) en het Aantal Trades.

Een bot die 1000 trades doet met een winst van €500 is vaak beter en stabieler dan een bot die 10 trades doet voor €600 winst. Risicomanagement is de hoeksteen van trading. Zorg dat je optimalisatie dit beloont. Start klein.

Begin met Grid Search om een gevoel te krijgen voor je parameters.

Als je strategie complexer wordt of je ziet dat het te lang duurt, overweeg dan eens hoe een genetic algorithm werkt voor strategie-optimalisatie. Vergeet niet dat de markt verandert. Een optimalisatie die je vandaag doet, is over drie maanden misschien niet meer relevant.

Plan regelmatige her-evaluaties in. En tot slot: wees realistisch.

De perfecte parametercombinatie bestaat niet. Je zoekt naar een set waardes die goed genoeg zijn om met vertrouwen te handelen, met een risico dat bij jouw slaap past.

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 Machine Learning & AI in Trading
Ga naar overzicht →