Hoeveel variabelen zijn te veel? De 'Curse of Dimensionality' in trading

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Alex de Vries
Quantitatief Analist & Algo-Trading Expert
Strategie Optimalisatie & Tuning · 2026-02-15 · 7 min leestijd
Stel je voor: je hebt een prachtige trading strategie gebouwd in Python. Je gebruikt de API van een broker als Interactive Brokers of Alpaca, je backtest honderden parameters en het resultaat ziet er fenomenaal uit. Je strategie kent de koers op de millimeter nauwkeurig. En dan... verliest hij meteen geld zodra je hem live zet. Wat is er misgegaan? Waarschijnlijk heb je teveel variabelen gebruikt. Je bent slachtoffer geworden van de 'Curse of Dimensionality'. Laten we dit ontwarren, stap voor stap, zodat je bot niet bezwijkt onder zijn eigen intelligentie.

Stap 1: De diagnose – Herken je eigen 'Sluipmoordenaar'

Voordat je een cent verliest, moet je weten of je strategie ziek is. De 'Curse of Dimensionality' betekent simpelweg dat elke extra variabele (een extra indicator, een extra filter, een extra parameter) de oppervlakte van je 'mogelijke oplossingen' exponentieel groter maakt. Je bot verdwaalt in een doolhof.

Je hebt een diagnose nodig. Pak je backtesting code erbij (gebruik je libraries zoals Backtrader, Lean, of een pandas-script). We gaan tellen.

  1. Tel je onafhankelijke parameters: Een RSI-periode is er één. Een EMA-lengte is er één. Een stop-loss percentage is er één. Een entry-volume filter is er één. Tel ze allemaal op.
  2. Check je 'Look-ahead Bias': Gebruik je data die je op dat moment (in de backtest) nog niet had? Dit is een veelgemaakte fout die de 'Curse' verbergt.
  3. Bekijk je 'Sample Size': Hoeveel data-punten heb je? Als je 5 variabelen optimaliseert met elk 10 mogelijke waarden (10^5 combinaties), en je hebt maar 1000 trades in je dataset, dan is elke 'winaar' puur geluk.

Veelgemaakte fout: Denken dat meer filters (bijv. "als RSI laag is EN volume stijgt EN MACD kruist") een strategie veiliger maakt.

Meestal maakt het hem alleen stiller en kwetsbaarder voor specifieke marktomstandigheden. Tijdsindicatie: 30 minuten. Schrijf het op een kladblok.

Stap 2: De voorbereiding – Je gereedschapskist (Python & Broker API)

Je hebt geen dure software nodig, maar je hebt wel de juiste tools nodig om de complexiteit in te dammen. We gaan een experiment opzetten.

Wat je nodig hebt: Specifieke setup: Zorg dat je API-sleutels veilig zijn opgeslagen (gebruik environment variables, nooit hardcoden!).

  • Een Python omgeving (lokaal of in de cloud zoals Google Colab).
  • Libraries: Pandas (voor data), NumPy (voor rekenwerk), Scikit-learn (voor feature selectie), en je backtesting library van voorkeur (bv. Backtrader of VectorBT).
  • Data: Minimaal 2 jaar historische data (via je broker API of een dienst als Tiingo/Polygon). Voor intraday: minimaal 6 maanden aan 1-minuut bars.
  • Een broker account voor 'Paper Trading' (nep-geld). Denk aan Interactive Brokers (via TWS API) of TradingView (Pine Script API).

Je script moet in staat zijn om data te laden en een simpele 'Buy & Hold' strategie te draaien voordat je begint. Als dat niet werkt, stop hier.

Veelgemaakte fout: Meteen beginnen met optimaliseren terwijl de data-feed rauw en ongefilterd is. Schoon je data eerst op (verwijder NaN-waarden, splits stock splits). Tijdsindicatie: 45 minuten installatietijd.

Stap 3: De basisstrategie – Minimalisme als wapen

Nu bouwen we een bot die zo simpel is dat hij pijn doet. Dit is onze controlegroep. We doen dit om te zien wat complexiteit toevoegt (of weghaalt).

Schrijf een Python script voor een strategie met maximaal 2 variabelen. Echt, hou je in.

  1. De variabelen: Laten we een Donchian Channel breakout strategie nemen. Variable A: Window (20 dagen). Variable B: Exit Window (10 dagen). Dat is alles. Geen RSI, geen volume, geen Fibonacci.
  2. De logica: Koop als de huidige prijs hoger is dan de hoogste prijs van de afgelopen 20 dagen. Verkoop als de prijs onder de laagste van de afgelopen 10 dagen duikt.
  3. Backtesten: Run deze strategie op je historische data. Noteer de resultaten: Total Return, Sharpe Ratio, Max Drawdown. Dit is je benchmark.
  4. Visualiseren: Plot de equity curve. Zorg dat deze stabiel is (misschijt met weinig winst, maar geen enorme gaten).

De test: Als deze simpele bot al verliest of extreem grillig is, heeft het geen zin om variabelen toe te voegen. Dan is je basisconcept (de 'edge') gewoon niet sterk genoeg. Veelgemaakte fout: Een simpel idee meteen opgeven omdat de winst nihil is.

Het doel is nu niet rijk worden, maar een stabiele basis leggen.

Tijdsindicatie: 60 minuten coderen en debuggen.

Stap 4: De toevoeging – De 'Curse' testen

Hier gaat het mis voor de meeste traders. We gaan nu bewust variabelen toevoegen om te zien wanneer het misgaat. We gebruiken een techniek die 'Feature Engineering' heet, maar we doen het met mate.

Voeg een derde variabele toe: de RSI. De logica wordt: "Koop als prijs > Donchian Upper EN RSI < 30".

  1. Vergelijk: Is de winst gestegen? Is de drawdown gedaald? Of is het aantal trades gehalveerd?
  2. Voeg een vierde variabele toe: Een filter voor Volume. "Volume > gemiddelde volume van 20 dagen". Run het opnieuw.
  3. De magische grens: Probeer nu te optimaliseren. Geef je Python script toestemming om parameters te tunen (bv. RSI van 10 tot 50, Volume factor van 1.0 tot 2.0). Kijk naar de resultaten.

Loop de backtest opnieuw. Wat je waarschijnlijk ziet: De resultaten barsten uit elkaar. Sommige combinaties maken extreem veel winst, andere verliezen alles.

Dit is de 'Curse'. Je hebt nu een 'geoptimaliseerde' bot die alleen werkt voor de specifieke data die je net hebt ingevoerd (overfitting).

Veelgemaakte fout: De optimalisatie-loop te vaak draaien totdat je een curve ziet die omhoog schiet zonder dips. Dat is vals spelen. Je programmeert je bot om te valsspelen. Herken je de 5 tekenen dat je strategie te ver is geoptimaliseerd? Tijdsindicatie: 45 minuten.

Stap 5: De oplossing – Dimensionaliteitsreductie & Risicomanagement

Hoe los je dit op zonder je bot te doden? We moeten slimmer zijn. We gebruiken geen 10 variabelen, we gebruiken er 3, maar we kiezen ze beter.

Actie 1: Correlatie check (Feature Selection): Gebruik Python (Pandas .corr()) om te kijken of je variabelen niet gewoon hetzelfde zeggen. Als je een 20-daagse EMA en een 21-daagse SMA gebruikt, zijn ze vrijwel identiek. Gooi er eentje weg.

Je doel is variabelen die niet met elkaar correleren. Actie 2: Regularisatie (Lasso/Ridge): Als je complexe modellen gebruikt (zoals Machine Learning), gebruik dan regularisatie.

Dit is een wiskundige manier om je bot te straffen voor te complexe regels. In Python (Scikit-learn) zet je dit aan met één regel code.

Het dwingt je bot om alleen de allerbelangrijkste variabelen te gebruiken. Voer ook een sensitivity analysis uit op je trading parameters. Actie 3: Risicomanagement per trade: Je kunt de complexiteit van de markt niet wegnemen, maar je kunt je blootstelling beperken. Zet je 'Risk per Trade' op maximaal 1% van je totale kapitaal.

Zelfs als je bot door de 'Curse' wordt verleid en 10 verloren trades op een rij maakt, ben je nog steeds veilig.

Veelgemaakte fout: Denken dat "Risicomanagement" betekent dat je een Stop Loss gebruikt. Nee, risicomanagement betekent ook dat je je positiegrootte bepaalt op basis van de volatiliteit van het instrument (ATR - Average True Range). Tijdsindicatie: 60 minuten.

Stap 6: Verificatie – De 'Out-of-Sample' Reality Check

Je bent er bijna. Nu moet je bewijzen dat je bot werkt op data die hij nog nooit heeft gezien. Dit is de heilige graal van backtesting.

De splitsing: Verdeel je data in tweeën. De test: Run je strategie op de Out-of-Sample data.

  • In-Sample (Trainingsdata): Bijv. data van 2020 t/m 2022. Hier tune je je bot.
  • Out-of-Sample (Testdata): Data van 2023 t/m nu. Hier mag je NIET aan sleutelen.

Als de resultaten (winst, drawdown) ongeveer hetzelfde zijn als op de In-Sample data, heb je een robuuste bot.

Als de bot ineens verliest, was je te complex en had je teveel 'geleerd' van het verleden (overfitting). De live test: Zet de bot op 'Paper Trading' via je broker API. Laat hem 2 weken draaien.

Verificatie-checklist

  • Heb ik minder dan 5 parameters gebruikt?
  • Is elke variabele logisch en theoretisch te verklaren?
  • Heb ik de correlatie tussen variabelen gecheckt?
  • Is de 'Out-of-Sample' performance positief?
  • Staat de positiegrootte op max 1-2% risico?

Kijk of de orde-uitvoering klopt (slippage, commissies). Begrijp hierbij goed de invloed van transaction costs op je optimale parameters. Pas als dit stabiel is, ga je live met een klein bedrag (bijv. €500). Onthoud: In algoritmische trading is eenvoud vaak het echte geld. Een simpele bot die werkt, is beter dan een ingewikkelde bot die misschien werkt. Ga terug naar stap 3 en verbeter die basis. Succes!

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 Strategie Optimalisatie & Tuning
Ga naar overzicht →