Wat is 'Walk-Forward Analysis' en waarom is het beter dan een normale backtest?
Je kent het wel: je hebt een strategie getest, de cijfers zien er fantastisch uit, en dan ineens presteert hij in de echte markt een stuk minder. Dat gevoel van frustratie herken je vast.
Walk-Forward Analysis (WFA) is een krachtige backtest-methode die dit probleem direct aanpakt.
In plaats van je hele dataset voor de backtest te gebruiken, beweeg je als het ware een venster door de tijd heen. Je traint op een stuk historie, test op de komende periode, en schuift dan weer op. Dit bootst de realiteit veel beter na, want de markt verandert voortdurend. Je ziet direct hoe je strategie presteert op data die hij nog nooit heeft gezien, wat cruciaal is voor algoritmische trading bots.
Waarom een normale backtest vaak te mooi is om waar te zijn
Stel je voor: je bouwt een Python bot die handelt op basis van een simpel crossover-systeem met een 50- en 200-dagen voortschrijdend gemiddelde.
Je neemt 10 jaar aan data van een broker zoals Interactive Brokers, draait de backtest en ziet een winst van €50.000 op een startkapitaal van €10.000. Je staat op het punt om live te gaan, maar dan gebeurt er iets vervelends. De markt verandert, de volatiliteit neemt toe, en je bot begint te verliezen. Waarom? Omdat de normale backtest een valkuil heeft: overfitting.
Je strategie is te veel afgestemd op de specifieke patronen in die ene dataset. Het is alsof je een Formule 1-auto bouwt die perfect is voor één specifiek circuit, maar die onderuit gaat zodra het regent of het asfalt anders is.
Een normale backtest gebruikt alle historische data tegelijkertijd. Je optimaliseert parameters – zoals de periode van je voortschrijdend gemiddelde – op basis van die volledige dataset.
Dit leidt tot schitterende resultaten op papier, maar de praktijk is wreed. De markt is niet statisch; economische omstandigheden, nieuwsgebeurtenissen en handelsgedrag veranderen voortdurend. Je strategie moet robuust zijn en zich kunnen aanpassen.
Een normale backtest geeft je geen inzicht in hoe je bot presteert onder nieuwe omstandigheden. Het is een momentopname, geen toekomstgerichte voorspelling.
Daarom vertrouwen professionele quants niet op één enkele backtest; ze willen zien hoe hun systeem presteert in verschillende marktscenarios. Denk aan de kosten: bij een broker als Interactive Brokers betaal je transactiekosten en spreads. Als je bot te veel trades maakt op basis van overfitting, vreten die kosten je winst op.
Risicomanagement wordt ook moeilijker, want je weet niet of je drawdown beperkt blijft in onbekende markten.
Walk-Forward Analysis lost dit op door je strategie regelmatig te testen op verse data. Het voelt alsof je een trainingsschema volgt: je oefent op de sportschool (trainingsperiode), test je kracht op een nieuwe oefening (testperiode), en past je aanpak aan. Zo bouw je een bot die echt werkt, niet alleen op papier.
Hoe Walk-Forward Analysis precies werkt: stap voor stap
Walk-Forward Analysis is eenvoudig uit te leggen, maar krachtig in de uitvoering.
Je verdeelt je historische data in twee delen: een in-sample periode (trainingsvenster) en een out-of-sample periode (testvenster). Stel je hebt 10 jaar data van de AEX-index, van 2014 tot 2024. Je kiest een trainingsvenster van 3 jaar en een testvenster van 1 jaar. Eerst optimaliseer je je strategie op de data van 2014-2016.
Je past parameters aan, zoals de lengte van je RSI-indicator of de stop-loss instellingen, om de beste performance te halen. Vervolgens test je die geoptimaliseerde strategie op de data van 2017.
Als de resultaten goed zijn, schuif je het venster op: train op 2015-2017, test op 2018, enzovoort.
Dit herhaal je tot je bij de huidige datum bent. In Python kun je dit implementeren met libraries zoals Backtrader of Zipline. Stel je bouwt een bot die handelt op basis van een momentum-strategie met een API van een broker zoals DEGIRO of Interactive Brokers.
Je script begint met het laden van de data via de API – bijvoorbeeld dagelijkse sluitingsprijzen van aandelen als ASML of Philips. Vervolgens definieer je de vensters: een trainingsperiode van 750 dagen (ongeveer 3 jaar) en een testperiode van 250 dagen (1 jaar).
Je optimaliseert parameters zoals de entry-threshold voor je momentum-indicator (bijvoorbeeld een waarde tussen 5 en 15) op de trainingsdata. Dan draai je de backtest op de testdata en meet je de winst, drawdown en Sharpe-ratio. Je herschrijft de parameters niet op basis van de testdata – dat zou vals spelen zijn – maar je bewaart de resultaten voor evaluatie.
De kern van WFA is de herhaling. Je schuift het venster stapsgewijs op, meestal met een overlap of zonder overlap, afhankelijk van je aanpak.
Bijvoorbeeld: na elke testperiode schuif je 250 dagen op, zodat je testdata altijd nieuw is. Dit geeft je een reeks out-of-sample resultaten die de realiteit nabootsen.
In plaats van één winstcijfer, krijg je een distributie van prestaties over tijd.
Je ziet of je bot consistent winstgevend is of alleen in bepaalde markten floreert. Met Python kun je dit automatiseren: gebruik Pandas voor data-manipulatie, NumPy voor berekeningen, en matplotlib voor visualisaties. De totale kosten voor zo’n setup? Een snelle laptop (€800-€1200) en een betaalde data-feed van €50-€100 per maand, afhankelijk van je broker.
Een praktisch voorbeeld: je test een bot op de S&P 500 van 2010-2020. Train op 2010-2013, test op 2014; train op 2011-2014, test op 2015, enzovoort. Begrijp hierbij goed waarom je out-of-sample testen maar één keer mag uitvoeren.
Je ontdekt dat je momentum-strategie goed presteert in stijgende markten (2010-2013) maar slecht in bear-markten (2015-2016).
Dit inzicht helpt je om risicomanagement toe te voegen, zoals een dynamische stop-loss die zich aanpast aan volatiliteit. Zonder WFA had je deze zwakte nooit gezien, totdat je live ging en geld verloor.
Waarom WFA beter is dan een normale backtest: de voordelen op een rij
Walk-Forward Analysis is superieur omdat het de tijd als factor meeneemt. Een normale backtest behandelt alle data als gelijkwaardig, maar markten evolueren.
WFA simuleert hoe je bot presteert in verschillende fasen: bull-markten, bear-markten, zijwaartse bewegingen en periodes van hoge volatiliteit.
Je krijgt een realistischer beeld van de robuustheid. Stel je bot haalt in een normale backtest een jaarlijkse return van 15% met een drawdown van 10%. Met WFA zie je misschien dat in de out-of-sample periodes de return daalt naar 8% en de drawdown stijgt naar 15%.
Dat is niet ontmoedigend – het is eerlijk. Het helpt je verwachtingen bijstellen en je risicomanagement te verbeteren, zoals het instellen van een maximale positiegrootte van 2% per trade.
Een ander groot voordeel is het verminderen van overfitting. Bij normale backtests kun je eindeloos tunen tot je strategie perfect past op historische data. Maar met WFA wordt elke optimalisatie beperkt tot het trainingsvenster. Je test op onbekende data, wat de kans op curve-fitting verkleint.
Onderzoek toont aan dat WFA-strategieën vaak 20-30% beter presteren in live trading dan normale backtests, omdat ze zijn gebaseerd op herhaalde out-of-sample tests.
Bovendien geeft WFA inzicht in de gevoeligheid van je parameters. Als kleine veranderingen in je RSI-periode (bijv. van 14 naar 16) de performance enorm beïnvloeden, weet je dat je strategie kwetsbaar is. Je kunt dan kiezen voor robuustere instellingen of meer diversificatie toevoegen, zoals handelen in meerdere assets via een API.
Praktisch gezien bespaart WFA je geld op de lange termijn. Stel je start met €10.000 en een bot die op basis van een normale backtest €50.000 zou genereren.
Live verliest hij €2.000 door onverwachte marktveranderingen. Met WFA had je die strategie al afgekeurd of aangepast, wat je €2.000 had bespaard. Bovendien integreert WFA naadloos met risicomanagement.
Je kunt tijdens elke testperiode stop-losses, take-profits en position sizing testen. Bijvoorbeeld: een trailing stop van 5% op een volatiele aandeel als Tesla, getest op verschillende vensters.
Dit zorgt voor een bot die niet alleen winstgevend is, maar ook beschermd tegen grote verliezen.
Ten slotte maakt WFA je strategie toekomstbestendig. In plaats van te vertrouwen op één dataset, bouw je een systeem dat zich aanpast. Denk aan de impact van COVID-19 of renteveranderingen – je kunt ook een stress test uitvoeren op je strategie met kunstmatige data om te zien hoe je bot reageert op zulke schokken.
Het is als een auto-upgrade: je past je algoritme aan na elke test, zodat het meegroeit met de markt. Resultaten van WFA zijn vaak conservatiever, maar eerlijker. Je zult merken dat je bot minder “magisch” presteert, maar wel betrouwbaarder is voor live trading.
Variante: rolling window vs expanding window
Er zijn twee hoofdvarianten van Walk-Forward Analysis: rolling window (schuivend venster) en expanding window (uitbreidend venster). Bij rolling window houd je de grootte van het trainingsvenster constant, bijvoorbeeld altijd 3 jaar.
Je schuift het venster elke keer op met een vaste stap, zoals 1 jaar.
Dit is handig voor markten die snel veranderen, zoals crypto of forex, waar patronen snel vervagen. Stel je test een bot op Bitcoin-data van 2018-2023: train op 2018-2020, test op 2021; train op 2019-2021, test op 2022. Dit zorgt voor een gelijkmatige verdeling en voorkomt dat oude data te veel invloed heeft.
Prijzen voor data-feeds van crypto via APIs zoals Binance kosten zo’n €20-€50 per maand. Bij expanding window groeit het trainingsvenster met elke stap.
Je begint met een klein venster, bijvoorbeeld 1 jaar, en voegt elke keer een jaar toe. Test op het volgende jaar, enzovoort. Dit is nuttig voor stabielere markten zoals aandelenindices, waar historische patronen langer relevant blijven. Voor een S&P 500-bot train je eerst op 2010-2011, test op 2012; dan train op 2010-2012, test op 2013, en zo door.
Het voordeel is dat je strategie profiteert van meer data naarmate de tijd vordert, wat de robuustheid vergroot.
Een nadeel: oude, mogelijk irrelevante data blijft meespelen, wat bij snelle marktveranderingen problemen kan geven. De keuze hangt af van je strategie en markt. Voor momentum-strategieën op aandelen werkt expanding window goed, omdat trends langer aanhouden.
Voor mean-reversion op forex is rolling window beter, vanwege de snelle ommekeer. Combineer beide voor een hybride aanpak: gebruik expanding window voor de langetermijntraining en rolling window voor kortetermijntests.
In Python kun je dit eenvoudig bouwen met loops: voor elke stap, selecteer de data, optimaliseer, test, en sla de resultaten op. Meet de gemiddelde Sharpe-ratio over alle out-of-sample periodes – een waarde boven 1.0 is een goed teken voor een live bot.
Praktische tips voor het implementeren van WFA in je trading bots
Begin klein: pak een eenvoudige strategie, zoals een EMA-crossover op één asset, en implementeer WFA in Python met Backtrader.
Gebruik gratis data van Yahoo Finance voor testen, of sluit een betaald abonnement af bij een broker zoals Interactive Brokers (vanaf €10/maand voor data). Stel je vensters in op basis van je handelsfrequentie: voor daghandel, gebruik kortere vensters (6 maanden trainen, 3 maanden testen); voor swing trading, langere (2 jaar trainen, 1 jaar testen).
Optimaliseer niet te veel parameters – beperk je tot 3-5, zoals stop-loss, entry-threshold en positiegrootte, om overfitting te voorkomen. Integreer risicomanagement vanaf het begin. Voeg tijdens elke testperiode regels toe, zoals een maximaal risico van 1% per trade of een dagelijkse drawdown-limiet van 5%. Monitor de resultaten met metrics als winstfactor (winst/verlies), profit factor (totale winst gedeeld door totaal verlies) en maximum drawdown.
Gebruik visualisaties in Python – bijvoorbeeld een equity curve per venster – om patronen te zien.
Als je bot in 70% van de out-of-sample periodes positief presteert, is dat een goed teken. Voer een robustness test uit op meerdere assets om diversificatie te waarborgen: combineer aandelen, indices en forex via één API. Test live na WFA: begin met een paper trading-account om je aangepaste bot te valideren zonder echt geld.
Bij brokers zoals DEGIRO of Plus500 kun je dit gratis doen. Pas je parameters aan op basis van de WFA-resultaten, maar forceer niet – de markt blijft verrassen.
Houd rekening met kosten: transactiekosten van €5-€10 per trade en spreads van 0.1-0.5% kunnen je winst aantasten.
Tot slot, documenteer elke WFA-cyclus. Schrijf op wat je leert, zoals “momentum werkt beter in stijgende markten, voeg een volatiliteitsfilter toe”. Dit helpt je bot te blijven verbeteren, stap voor stap, tot hij klaar is voor de live markt.
