Hoe simuleer je een 'Black Swan' event in je backtest?

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Alex de Vries
Quantitatief Analist & Algo-Trading Expert
Backtesting & Validatie Strategieën · 2026-02-15 · 6 min leestijd

Stel je voor: je hebt een prachtige Python trading bot gebouwd, maandenlang getest en je backtests laten zien dat je strategie consistent winst maakt. Dan gebeurt het: de markt stort in, je bot gaat failliet en je zit met een gat in je portfolio. Het probleem?

Je backtest had geen Black Swan events gesimuleerd. Dit is exact wat we gaan oplossen.

Een Black Swan is een extreem onvoorspelbare gebeurtenis met enorme impact. Denk aan de coronacrash van 2020, de Zwitserse franc-ontkoppeling in 2015 of de Brexit-stemming. Deze events zijn zeldzaam maar vernietigend voor onvoorbereide strategieën. Laten we stap voor stap bekijken hoe je ze realistisch in je backtest opneemt.

Wat je nodig hebt voordat je begint

Voordat we starten, zorg dat je de juiste tools bij de hand hebt. Je hebt een werkende Python-omgeving nodig met libraries zoals Backtrader, Zipline of Pandas.

Gebruik je Interactive Brokers of Saxo Bank? Dan heb je toegang tot hun API nodig voor historische data.

Voor deze handleiding gaan we uit van een data set van minimaal 10 jaar, bij voorkeur van een broker zoals IBKR of Alpaca. Je hebt ook een basistrategie nodig die je al hebt getest. Zonder een bestaande strategie heeft het geen zin om een Black Swan toe te voegen.

Zorg dat je strategie minimaal 100 trades heeft gedraaid in je backtest, anders is de data te dun. Tijd: reken op 2-3 uur om alles op te zetten en te testen.

Budget: meestal gratis als je bestaande data gebruikt, tenzij je extra historische data moet aanschaffen (€20-€50). Veelgemaakte fouten: te weinig data gebruiken (minder dan 5 jaar), vergeten om transaction costs mee te nemen, of je broker API niet correct configureren. Check dit eerst, dan bespaar je jezelf een hoop frustratie.

Stap 1: Kies de juiste Black Swan event

Je kunt niet zomaar een willekeurige crash simuleren. Kies een event dat relevant is voor je handelsstrategie.

Handel je in aandelen? Kijk naar de coronacrash van maart 2020. Handel je in valuta?

De Zwitserse franc-ontkoppeling in januari 2015 is een klassieker. Voor crypto is de Mt.

Gox-hack in 2014 of de Terra-Luna crash in 2022 relevant. Zoek een event dat minstens 10% beweging in één dag of week veroorzaakt. Download de historische data voor dit event. Gebruik je broker API (bijvoorbeeld Interactive Brokers TWS API) of een dienst als Yahoo Finance of Quandl.

Zorg dat je data hebt op minuut- of uur-basis voor de week rondom het event. Voor de coronacrash download je bijvoorbeeld data van 15 februari tot 15 april 2020.

Dit kost je ongeveer 30 minuten tijd. Veelgemaakte fouten: een te klein tijdsvak kiezen (bijvoorbeeld alleen de dag van het event), waardoor je geen context hebt. Of een event kiezen dat niet relevant is voor je strategie, zoals een oliecrash als je in tech-aandelen handelt. Neem de tijd om de juiste data te vinden, het loont zich.

Stap 2: Pas je backtest data aan

Nu ga je je bestaande backtest data aanpassen om het Black Swan event te integreren.

Werk met Python en Pandas om je data te laden. Gebruik een DataFrame met kolommen: 'date', 'open', 'high', 'low', 'close', 'volume'.

Voeg de data van het Black Swan event toe aan je bestaande dataset. Zorg dat de data naadloos aansluit, zonder gaten. Simuleer de impact door extreme prijsbewegingen toe te voegen. Voor de coronacrash: verlaag de close-prijs met 30-40% in de week van 16-20 maart 2020.

Gebruik een script zoals dit:

import pandas as pd

# Laad je bestaande data
data = pd.read_csv('your_data.csv', parse_dates=['date'])

# Voeg Black Swan data toe (bijv. coronacrash)
black_swan_data = pd.read_csv('corona_crash.csv', parse_dates=['date'])
combined_data = pd.concat([data, black_swan_data]).drop_duplicates('date').sort_values('date')

# Pas de prijzen aan voor het event (bijv. -35% in week 12 van 2020)
combined_data.loc[(combined_data['date'] >= '2020-03-16') & (combined_data['date'] <= '2020-03-20'), 'close'] *= 0.65

combined_data.to_csv('backtest_data_with_black_swan.csv', index=False)

Check of de data klopt: plot een grafiek van de aangepaste data en vergelijk met een echte chart van je broker. Begrijp waarom resultaten bij je broker afwijken van je eigen code. Duur: 45 minuten. Veelgemaakte fouten: vergeten om de volume data aan te passen (bij een crash stijgt volume vaak enorm), of de datumformaten verwarren, wat leidt tot scheve data. Test altijd met een kleine subset eerst.

Stap 3: Integreer de data in je backtesting framework

Laad je aangepaste data in je backtesting tool. Wil je meer weten over de architectuur? Leer hoe je een event-driven backtester bouwt. Gebruik je Backtrader? Dan ziet je code er zo uit:

import backtrader as bt

class BlackSwanStrategy(bt.Strategy):
    def __init__(self):
        self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=20)
    
    def next(self):
        if self.data.close[0] < self.sma[0] * 0.8:  # Verkopen bij extreme daling
            self.sell()

cerebro = bt.Cerebro()
data_feed = bt.feeds.GenericCSVData(dataname='backtest_data_with_black_swan.csv', 
                                     dtformat=('%Y-%m-%d'))
cerebro.adddata(data_feed)
cerebro.addstrategy(BlackSwanStrategy)
cerebro.run()
cerebro.plot()
Als je Zipline gebruikt, importeer je de data met ingest() en voeg je de aangepaste CSV toe. Test je bot op de volledige dataset, inclusief het Black Swan event.

Kijk of je bot overleeft: hoeveel drawdown heeft ie? Is de maximale verliespositie onder de 20% van je kapitaal?

Duur: 30-60 minuten om te runnen en analyseren. Veelgemaakte fouten: je bot te snel laten handelen zonder rekening te houden met spreads (voeg transaction costs toe, bijv. €0,01 per aandeel). Of vergeten om de stop-loss orders te testen tijdens het event. Gebruik altijd realistische slippage, zoals 0,1% tijdens normale dagen en 1% tijdens de crash.

Stap 4: Analyseer de resultaten en pas risicomanagement aan

Nadat je backtest draait, analyseer je de metrics. Kijk naar de maximale drawdown: als die boven de 25% uitkomt, is je strategie te kwetsbaar.

Check de winst/verlies ratio: een Black Swan moet je bot niet volledig vernietigen, maar een gecontroleerde verliespost opleveren. Gebruik Python libraries zoals PyFolio voor gedetailleerde analyse:

import pyfolio as pf

returns = cerebro.getstrategies()[0].analyzers.returns.get_analysis()
pf.create_full_tear_sheet(returns)

Pas je risicomanagement aan op basis van de resultaten. Voeg bijvoorbeeld een dynamische stop-loss toe die tighter wordt tijdens extreme volatiliteit.

Of verlaag je positiegrootte: handel met maximaal 1-2% van je kapitaal per trade tijdens een Black Swan. Test deze aanpassingen door je backtest te herhalen met de nieuwe parameters. Tijd: 1-2 uur voor analyse en aanpassingen. Veelgemaakte fouten: te veel vertrouwen op één backtest, terwijl je voldoende trades voor een statistisch significante backtest moet opnemen (minimaal 3-4 events).

Of risicomanagement overslaan, wat leidt tot over-optimisme. Onthoud: een goede backtest laat zien dat je strategie overleeft, niet alleen dat hij wint.

Verificatie-checklist

  • Heb je minimaal 10 jaar data gebruikt, inclusief 3-4 Black Swan events?
  • Zijn de aangepaste prijzen realistisch? (bijv. 30-50% daling in één week)
  • Heb je transaction costs en slippage toegevoegd? (minimaal 0,1% normaal, 1% tijdens crash)
  • Is je maximale drawdown onder de 25% na het simuleren van een Black Swan?
  • Heb je je risicomanagement aangepast en opnieuw getest?
  • Is de data geplot en vergeleken met echte broker data voor accuraatheid?

Als je alle items kunt afvinken, is je backtest klaar voor de echte wereld.

Je bot is nu beter voorbereid op het onverwachte. Test regelmatig, blijf leren en bouw aan een strategie die overleeft, zelfs als de markt instort.

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 Backtesting & Validatie Strategieën
Ga naar overzicht →