Backtesting en werkelijkheid: die perfecte verwachting liegt tegen je
Jouw backtest: 8R verwachting. Winstfactor 3,5. 50.000 $ winst op een account van 10.000 $.
Je gaat live. Eerste week: -2R verwachting. Winstfactor 0,4. Account 12 % omlaag.
Wat is er gebeurd? Je backtest loog.
🚨 Even eerlijk
De meeste backtests zijn pure fantasie. Ze gaan uit van perfecte uitvoeringen, nul slippage, geen spreads en magische instappen die in de echte markt niet bestaan.
Als je backtest te mooi lijkt om waar te zijn, dan is dat ook zo. Je hebt je aan de ruis aangepast, niet aan het signaal.
In deze les leer je:
- Waarom 90 % van de backtests sneuvelt zodra ze live gaan
- De 4 doodzonden: overfitting, vooruitkijkbias, onrealistische kosten en overlevingsbias
- Hoe je slippage en spreads modelleert die echt met de werkelijkheid stroken
- In-sample tegenover out-of-sample (de enige validatie die telt)
⚡ Snelle winst voor morgen (klik om uit te klappen)
- Zet realistische kosten in je backtest — Reken 0,03-0,05 % slippage per trade plus de werkelijke spread. Stort het resultaat in, dan was je voordeel nep.
- Splits je data 70/30 — Optimaliseer op 70 % van de data en valideer op de 30 % die je nooit gezien hebt. Zakt de out-of-sample, dan heb je overfit.
- Handel 30 dagen op papier voordat je live gaat — Wijken je papieren resultaten sterk af van de backtest, dan klopt er iets niet. Ga niet live tot ze overeenkomen.
Praktijkvoorbeeld: hoe een „perfecte” backtest met 1,3R verwachting live een ramp van -0,45R werd
Achtergrond: In maart 2024 bouwde Chris (samengesteld voorbeeld) na 6 maanden optimaliseren een uitbraakstrategie. De backtest zag er ongelooflijk uit: 1,3R verwachting, winstfactor 4,9, 67 % winnaars, getest op 2 jaar SPY-data (2022-2023). In april 2024 ging er 50.000 $ in. In juni 2024 stond het account 8.400 $ in het rood (-16,8 %). Dit is de volledige lijkschouwing.
De „perfecte” backtest (data 2022-2023)
| Kengetal | Waarde | Wat Chris dacht |
|---|---|---|
| Posities totaal | 156 | Prima steekproef |
| Trefkans | 67.3% (105W / 51L) | „Ongelooflijk! Ver boven gemiddeld.” |
| Gem. winst / gem. verlies | +2.4R / -1R | „Uitstekende R:R, de winnaars zijn 2,4× de verliezers.” |
| Winstfactor | 4.9 | „Een getal van professioneel niveau.” |
| Verwachting | +1,3R per trade | „Heilige graal, niet minder.” |
| Maximale drawdown | -8.2% | „Een minuscule drawdown. Bijzonder veilig.” |
| Totaalrendement (2 jaar) | +$40,600 (+406%) | „Dit is hem. Ik zeg mijn baan op.” |
Het optimalisatieproces van Chris:
- 50 verschillende EMA-perioden getest (EMA(34) bleek „perfect”)
- 20 ATR-vermenigvuldigers voor de stops getest (1,47× ATR bleek „optimaal”)
- 15 doelniveaus getest (2,8R bleek „het beste”)
- Eindstrategie: kruising van EMA(34) + stop op 1,47× ATR + doel van 2,8R
- Totaal aantal geteste combinaties: 50 × 20 × 15 = 15.000 varianten
Wat Chris níét in de backtest zette:
- Slippage (perfecte uitvoeringen tegen exacte koersen aangenomen)
- Het bied-laatverschil (spread van nul aangenomen)
- Commissies (vergeten te modelleren)
- Afgewezen orders (100 % uitvoering aangenomen)
- De out-of-sampletest (nooit op ongeziene data getest)
De werkelijkheid van het live handelen (april-juni 2024, 10 weken)
| Kengetal | Backtest | Werkelijkheid live | Verschil |
|---|---|---|---|
| Trefkans | 67.3% | 51.4% (19W / 18L) | -15,9 punten slechter |
| Gem. winst | +2.4R (+$1,200) | +1.8R (+$900) | -25 % kleiner |
| Gem. verlies | -1R (-$500) | -1.3R (-$650) | -30 % groter |
| Winstfactor | 4.9 | 1.46 | -70 % ingestort |
| Verwachting | +1.3R | -0,45R na kosten | -1,75R NEGATIEF |
| Maximale drawdown | -8.2% | -21.4% | 2,6× slechter |
| Totaalrendement (10 weken) | +9.600 $ geprojecteerd | -$8,400 (-16.8%) | 18.000 $ verschil |
De volledige kostenrekening: waar die 18.000 $ gebleven is
| Kostenpost | Omschrijving | Effect |
|---|---|---|
| 1. Overfitting (curve fitting) | EMA(34) + 1,47× ATR werkte perfect op de data van 2022-2023, maar was op historische ruis geoptimaliseerd. De marktomstandigheden van 2024 = andere ruis. | -$6,200 |
| 2. Slippage (niet gemodelleerd) | Gemiddeld 0,08 % slippage per trade × 25.000 $ gemiddelde positie × 37 keer heen en terug = 1.480 $ aan slippage-kosten | -$1,480 |
| 3. Bied-laatverschil | SPY-spread 0,01 $ × gemiddeld 500 stuks × 37 trades = 185 $. Opties (voor de hefboom gebruikt) spread = 0,03 $ per stuk × 100 stuks per contract × 20 contracten × 37 trades = 2.220 $ aan totale spreadkosten | -$2,405 |
| 4. Commissies | Opties: 0,65 $ per contract × 20 contracten × 37 trades × 2 (heen en terug) = 962 $ | -$962 |
| 5. Afgewezen orders | Bij 8 trades werden limietorders nooit uitgevoerd (5 winnaars gemist, 3 verliezers gemist). Netto gemiste kans: 5 winnaars à +1,8R gemist (-9R) minus 3 verliezers à -1,3R vermeden (+3,9R) = -5,1R = 2.550 $ | -$2,550 |
| 6. Vooruitkijkbias | De backtestcode gebruikte close[0] om de instap te berekenen en stapte in op de slotkoers van diezelfde kaars (live onmogelijk). Live stap je in op de opening van de volgende kaars. Een gemiddeld 0,3 % slechtere instap = 2.775 $ aan verslechtering | -$2,775 |
| 7. Uitvoeringsvertraging | Platformlatentie + tijd om de order na te lopen = 2 tot 8 seconden vertraging. Snelle uitbraken liepen gemiddeld 0,15 % weg voordat er werd uitgevoerd = 1.387 $ slippage door vertraging | -$1,387 |
| TOTALE VERSLECHTERING TEN OPZICHTE VAN DE BACKTEST: | -$17,759 | |
De rekensom:
- Door de backtest geprojecteerde winst (10 weken): +9.600 $
- Min de verslechteringskosten: -17.759 $
- Verwacht liveresultaat: -8.159 $
- Werkelijk liveresultaat: -8.400 $ — de rekening komt tot op 250 $ bij wat er echt gebeurd is
Wat er had moeten gebeuren: de validatie zoals het hoort
| Stap | Wat Chris deed (fout) | Wat je zou moeten doen (goed) |
|---|---|---|
| 1. Datasplitsing | Gebruikte alle data van 2022-2023 om te optimaliseren | Optimaliseer op 2022 en houd 2023 achter voor de out-of-sampletest |
| 2. Optimalisatie | Testte 15.000 parametercombinaties | Gebruik standaardparameters (EMA 20/50, stops op 2× ATR). Beperk het testen tot minder dan 10 varianten |
| 3. Kosten modelleren | Nam kosten van nul aan | Reken 0,10 % slippage + 0,01 $ spread + 2 $ commissie per trade = minstens -30 $ per trade |
| 4. Controle op vooruitkijken | Gebruikte de slotkoers van dezelfde kaars voor signaal én uitvoering | Signaal op close[0], uitvoering op open[1] (volgende kaars). Realistische timing. |
| 5. Out-of-sampletest | Nooit op ongeziene data getest | Test op de data van 2023 (onaangeroerd). Verslechtert de prestatie met meer dan 30 %, dan is de strategie overfit |
| 6. Walk-forward | Eén enkele backtestperiode | Optimalisatievensters van 6 maanden, test op de volgende 3 maanden. Rollend herhalen. Consistentie controleren. |
De out-of-sampletest die Chris had moeten doen
De juiste werkwijze:
- In-sampleperiode: Alleen op de data van 2022 optimaliseren (2023 niet aanraken)
- Parameters vinden: EMA(34) + 1,47× ATR (zelfde uitkomst, maar alleen met 2022)
- Parameters vastzetten: GEEN WIJZIGINGEN MEER. De parameters liggen vast.
- Out-of-sampletest: Precies dezelfde parameters op de data van 2023 draaien
- Resultaten vergelijken: Zakt de prestatie van 2023 onder 70 % van die van 2022, dan is de strategie overfit
Wat er gebeurd zou zijn:
| Periode | Verwachting | Winstfactor | Oordeel |
|---|---|---|---|
| 2022 (in-sample) | +1.4R | 3.1 | Geoptimaliseerde prestatie |
| 2023 (out-of-sample) | +0.4R | 1.4 | ⚠️ 71 % verslechtering |
| Conclusie: De strategie is zwaar overfit. De verwachting van 2023 is 29 % van die van 2022. Met realistische kosten (-30 $ per trade = -0,15R) blijft er een nettoverwachting van +0,25R over (nauwelijks boven nul). NIET INZETTEN. | |||
De les: de backtest van Chris was een fantasie. Wie 15.000 parametercombinaties test, vindt gegarandeerd er één die perfect om de historische ruis heen sluit. Die „perfecte” verwachting van 1,3R was curve-fitting-rommel. Een out-of-sampletest had dat aan het licht gebracht vóór die 8.400 $ verlies. Backtesting draait niet om de beste prestatie uit het verleden, maar om wat hierna gaat werken. En daarvoor heb je ongeziene data, realistische kosten en nul vooruitkijkbias nodig.
Waarom je perfecte strategie live gaat sneuvelen
Laten we met de ongemakkelijke waarheid beginnen: als je een strategie hebt geoptimaliseerd om op historische data te passen, heb je geen voordeel gevonden. Je hebt ruis gevonden.
De curve op willekeurige ruis passen
Wat het is: Parameters optimaliseren tot de backtest er perfect uitziet
Voorbeeld:
- Je test 100 verschillende EMA-perioden (10, 11, 12… 110)
- EMA(47) geeft 4,2R verwachting in de backtest
- Je denkt dat je het „magische getal” hebt gevonden
Werkelijkheid: EMA(47) paste puur toevallig op precies die dataset. En vooruit getest? -0,8R verwachting. Je hebt de ruis geleerd, niet het signaal.
Beter: Beperk het optimaliseren. Gebruik standaardparameters. Test op ongeziene data.
Toekomstige data gebruiken (live onmogelijk)
Wat het is: Code die in toekomstige kaarsen „gluurt” om nu een beslissing te nemen
Voorbeeld:
if close[0] > high[5]: # gebruikt de 5 TOEKOMSTIGE kaarsen
enter_long()
Het probleem: In backtesting heb je de toekomstige data. Live niet.
Werkelijkheid: Deze code kan live domweg niet draaien. Je backtest test een strategie die niet bestaat.
Beter: Gebruik alleen data die op het moment van beslissen beschikbaar is.
Perfecte uitvoeringen tegen perfecte koersen aannemen
Aanname in de backtest: „Ik koop precies op 100,00 $”
Werkelijkheid: De marktorder wordt uitgevoerd op 100,12 $ (spread + slippage)
Effect over 100 trades:
- Backtestwinst: 5.000 $
- Spreadkosten (0,10 $ per trade): -1.000 $
- Slippage (0,05 $ per trade): -500 $
- Commissies (2 $ per trade): -200 $
Werkelijkheid: Echte winst = 3.300 $ (34 % minder dan de backtest)
Alleen op de overlevers testen
Wat het is: Backtesting alleen op de aandelen die nu in de S&P 500 zitten
Het probleem: Je laat meer dan 200 aandelen weg die van de beurs zijn gehaald of failliet gingen
Voorbeeld:
- Backtest op de S&P 500-lijst van 2024: 1,8R verwachting, winstfactor 2,1
- Maar over die hele periode zou je long hebben gezeten in Hertz (failliet in 2020), in SVB Financial (ingestort in 2023) en in elke andere naam die naar nul ging.
Werkelijkheid: Je verwachting laat de catastrofale verliezen van beursverwijderingen buiten beschouwing. Echte verwachting: -0,2R (een verliesgevend systeem).
💡 het aha-moment
Een backtest is niet de werkelijkheid. Het is een simulatie. En als je simulatie onmogelijke aannames bevat, worden je liveresultaten net zo onmogelijk.
De verborgen kosten die strategieën om zeep helpen
Dit is wat de meeste backtests negeren — en waarom die van jou waarschijnlijk 20-40 % te optimistisch is:
Stap 1: het bied-laatverschil modelleren
Wat het is: Het verschil tussen de koopkoers en de verkoopkoers
Voorbeeld:
- SPY bied: 450,00 $ / laat: 450,01 $ → spread = 0,01 $
- Je koopt: je betaalt 450,01 $ (halve spread = 0,005 $)
- Je verkoopt: je krijgt 450,00 $ (halve spread = 0,005 $)
Kosten per keer heen en terug: $0.01
Voor 1.000 stuks: 0,01 $ × 1.000 = 10 $ per trade
100 trades: 1.000 $ aan spreadkosten
Stap 2: slippage modelleren
Wat het is: Verschil tussen de bedoelde koers en de werkelijke uitvoering
Realistische slippage per situatie:
- Normale liquiditeit: 0.01-0.02%
- Volatiele markten: 0.05-0.10%
- Dunne liquiditeit: 0.10-0.30%
- Grote positieomvang: 0.20-0.50%
Voorzichtige aanname: 0,05 % per trade
Positie van 10.000 $ × 0,05 % = 5 $ slippage per kant = 10 $ heen en terug
Stap 3: commissies modelleren
Voorbeeld: Interactive Brokers
- 0,005 $ per stuk, minimaal 1 $
- 200 stuks × 0,005 $ = 1 $ per kant
- Heen en terug = 2 $
100 trades: 200 $ aan commissies
Stap 4: totale realistische kosten
Per trade (heen en terug):
- Spread: 10 $
- Slippage: 10 $
- Commissie: 2 $
Totaal: 22 $ per trade
Levert je strategie bruto 50 $ per trade op → 28 $ netto (44 % minder!)
Rekenvoorbeeld: de backtest bijstellen
Voor en na realistische kosten
Strategie: 100 trades, gemiddeld 50 $ winst per trade
Backtest (fantasie):
100 trades × 50 $ = 5.000 $ winst
Na realistische kosten:
- Bruto: 5.000 $
- Spread: -1.000 $
- Slippage: -1.000 $
- Commissies: -200 $
Nettowinst: 2.800 $ (44 % minder)
De enige validatie die telt
Zo valideren professionals een strategie:
Splits je data in twee perioden.
- In-sample (60-70 %): Hier ontwikkel en optimaliseer je je strategie
- Out-of-sample (30-40 %): Valideren op ONGEZIENE data
🎯 Voorbeeld: 6 jaar data (2018-2024)
In-sample: 2018-2022 (hier optimaliseren)
- Test verschillende parameters
- Vind de best presterende regels
- Verfijn de in- en uitstaplogica
Out-of-sample: 2023-2024 (hier valideren)
- Draai de strategie zonder ENIGE wijziging
- Vergelijk de prestatie met die in-sample
- Vergelijkbaar → niet overfit!
- Veel slechter → overfit op de in-sampleruis
Waarschuwingssignalen van overfitting
🚩 Tekenen dat je strategie curve-fit is
- Sharpe boven 3,0: Te mooi om waar te zijn
- Verwachting boven 5R: Uiterst zeldzaam (controleer je uitvoeringsaannames)
- Maar 20-30 trades: Steekproef te klein (statistisch betekenisloos)
- Perfecte kapitaalcurve: Een gladde lijn zonder drawdowns (onmogelijk)
- Op één instrument getest: Waarschijnlijk op precies dat regime gepast
- 10 of meer geoptimaliseerde parameters: Je hebt de ruis gepast, niet het signaal
De professionele validatiemethode
In-sample tegenover out-of-sample is goed. Walk-forward is beter.
Hoe het werkt:
📊 Het walk-forwardkader
Periode 1: Trainen op 2018-2019 → testen op 2020
Periode 2: Trainen op 2019-2020 → testen op 2021
Periode 3: Trainen op 2020-2021 → testen op 2022
Periode 4: Trainen op 2021-2022 → testen op 2023
Consistent over alle perioden: Robuuste strategie
Prestatie verslechtert: Overfit of regime-afhankelijk
🎓 De kern
- Modelleer realistische kosten: Spread, slippage, commissies (20-40 % minder winst)
- Vermijd overfitting: Beperk de parameters, test op meerdere markten
- In-sample tegenover out-of-sample: Ontwikkel op 60-70 %, valideer op 30-40 %
- Walk-forwardtest: Controleer de consistentie door de tijd heen
- Waarschuwingssignalen: Sharpe boven 3,0, verwachting boven 5R, minder dan 30 trades
- Vooruit testen voordat je live gaat: Minstens 3 tot 6 maanden op papier
🎯 Oefening in backtestvalidatie
Oefening: valideer je strategie met de waarschuwingsdetector
Neem je huidige strategie (of een die je overweegt) en haal hem door de validatie:
- Backtest op 60 % van je data (in-sample). Noteer: trades, verwachting, Sharpe, maximale DD
- Noteer de gebruikte parameters (EMA's, drempels enzovoort). Heb je die geoptimaliseerd door meerdere waarden te proberen?
- Test op de overige 40 % van de data (out-of-sample). Vergelijk met het in-sampleresultaat.
- Gebruik de validatiescorekaart uit het sjabloon (8 categorieën, maximaal 60 punten)
- Tel je score op: 50-60 = doorgaan, 40-49 = herzien, onder 40 = schrappen
- Bij 50 punten of meer: handel 30 tot 60 trades op papier voordat je live gaat
Doel: Vang curve fitting, vooruitkijkbias en onrealistische aannames VOORDAT ze je echte account slopen. Beter een slechte strategie in de backtesting schrappen dan echt geld verliezen.
🎮 Snelle check
V: Je backtest een strategie: 5,2R verwachting, Sharpe-ratio 4,2, getest op 25 trades, met EMA(47) omdat die het beste resultaat gaf na 100 verschillende perioden te hebben geprobeerd. Wat klopt er niet?
Je backtest een mean-reversionstrategie op de SPY van 2010 tot 2024. Resultaten: 2,8R verwachting, 68 % winnaars, 120.000 $ winst. De data bevatten alleen de huidige onderdelen van de S&P 500 (de aandelen die er vandaag in zitten). Je gaat in 2025 live — en het mislukt. Wat ging er mis?
Je doet een walk-forwardtest van je strategie: trainen op 2018-2020, testen op 2021 (geslaagd). Trainen op 2018-2021, testen op 2022 (geslaagd). Trainen op 2018-2022, testen op 2023 (geslaagd). Je hebt slippage noch commissies gemodelleerd. Moet je deze strategie live handelen?
In backtesting is perfectie verdacht. Realisme is het voordeel. Modelleer de kosten, vermijd overfitting, test vooruit — of sneuvel live.
Gerelateerde lessen
Het tradingdagboek meesterlijk gebruiken
Volg je liveprestatie en vergelijk die met de backtestresultaten.
Les lezen →Positiegrootte
Pas in backtests een correcte positiegrootte toe, voor realistische uitkomsten.
Les lezen →Regimeherkenning
Test je strategie in alle regimes om de robuustheid te controleren.
Les lezen →⏭️ Hierna
Les #33: gevorderd risicobeheer — de professionele kaders — Leer het Kelly-criterium, dynamische positiegrootte en drawdown-protocollen.
Uitsluitend educatief. Handelen brengt een aanzienlijk risico op verlies met zich mee. Resultaten uit het verleden bieden geen garantie voor de toekomst.
💬 Discussie (0 reacties)
Reacties laden…
Klaar om met Signal Pilot te handelen?
Breng je opleiding in de praktijk met professionele indicatoren en hulpmiddelen voor marktanalyse in realtime.
Terug naar Signal Pilot →Uitsluitend educatief. Handelen brengt een aanzienlijk risico op verlies met zich mee. Dit is geen financieel advies. Resultaten uit het verleden bieden geen garantie voor de toekomst.