Bitsgap logo
 Zoeken
Walk-forward testen voor crypto-bots: een uitgewerkt voorbeeld

Walk-forward testen voor crypto-bots: een uitgewerkt voorbeeld

Kies instellingen op eerdere data, bevries deze voor een latere periode en behoud het vermogensverloop. Werk het datumtraject, de selectieregel, het compounding en de beslissingen over openstaande posities uit.

Je test twintig botconfiguraties op dezelfde grafiek en kiest degene met het hoogste rendement. De instellingen daarvan zijn nu gebaseerd op informatie uit die hele periode. Als je deze opnieuw op dezelfde data draait, levert dat geen nieuw bewijs op.


Walk-forward testen kiest herhaaldelijk instellingen op een eerdere trainingsperiode, bevriest deze voor een latere testperiode en combineert de resultaten van die latere periodes. Het helpt je om een selectieproces te beoordelen onder wisselende omstandigheden, terwijl toekomstige prijzen buiten elke selectiebeslissing worden gehouden.

Voor GRID- en DCA-strategieën is er een extra boekhoudkundig probleem: munten en open posities kunnen de grens van het venster oversteken. Een nuttige test heeft een regel nodig voor die posities voordat het eerste resultaat verschijnt.

Trainen, testen en forward demo betekenen verschillende dingen

TermWat je doetWat het kan laten zien
In-sample trainingVergelijk toegestane instellingen op een eerder historisch vensterWelke kandidaat jouw selectieregel zou kiezen
Out-of-sample historische testVoer de gekozen instellingen uit op het volgende venster zonder opnieuw af te stemmenHoe die selectie zich gedraagt op latere historische data
Walk-forward sequenceHerhaal training en testen terwijl de tijd vordertHet gecombineerde gedrag van het selectieproces
Forward demoBevries een setup en observeer nieuwe marktdata met virtuele fondsenOf de workflow en het gedrag overeenkomen met je plan in een nieuwe periode

De algemene backtesting-gids behandelt de bredere beperkingen van historische simulatie. Walk-forward voegt een herhaalde tijdssplitsing toe; het neemt de aannames over uitvoering, dataverlies of de verleiding om regels aan te passen na het zien van resultaten niet weg.

QuantConnect's walk-forward documentatie beschrijft parameterselectie over voortschrijdende periodes en de afweging in optimalisatiefrequentie. Vaker opnieuw optimaliseren leidt tot meer beslissingen en meer kansen om recente ruis te overfitten.

Walk-forward testen voor crypto-bots: een uitgewerkt voorbeeld-1

Schrijf het protocol uit voordat je de resultaten vergelijkt

Kies de markt, het data-interval, de tijdzone en de exacte kandidaat-instellingen. Houd de kandidatenlijst klein genoeg om te kunnen beoordelen. Een test met drie vooraf vastgestelde configuraties is makkelijker uit te leggen dan een zoektocht door duizenden niet-gedocumenteerde combinaties.

Geef daarnaast ook aan:

  • De trainingsduur en testduur, inclusief de exacte grens-tijdstempels.
  • De selectiemaatstaf, minimale bewijslast en beslissingsregel bij gelijke stand.
  • Kosten, slippage, minimale omvang, afronding en het fill-model.
  • De behandeling van posities en openstaande orders bij elke grens.
  • De startposities en herbalanceringsregels van de benchmark.

Een hypothetisch protocol zou bijvoorbeeld kunnen kiezen voor het hoogste trainingsrendement onder drie kandidaten waarvan de training drawdown onder een vooraf bepaalde limiet blijft. Als geen van de kandidaten voldoet, houdt de strategie de volgende testmaand cash aan. Stel de drawdownlimiet en de fallback vast voordat je naar de testmaanden kijkt.

De limiet is een selectiebeperking, geen garantie over toekomstige drawdown. Een strategie die hieraan voldoet tijdens de trainingsperiode kan deze in de testperiode alsnog overschrijden.

Splits de datums zonder een testmaand dubbel te tellen

Gebruik drie maanden voor de trainingsperiode en één maand voor de testperiode in dit illustratieve rollende schema. Elke tijdsaanduiding hieronder is in UTC, en elk interval bevat het beginpunt maar sluit het eindpunt uit.

RondeTrainingsperiodeOnaangeroerde testperiode
11 jan. t/m 1 apr.1 apr. t/m 1 mei
21 feb. t/m 1 mei1 mei t/m 1 jun.
31 mrt. t/m 1 jun.1 jun. t/m 1 jul.
41 apr. t/m 1 jul.1 jul. t/m 1 aug.

Trainingsperiodes overlappen. De vier testperiodes doen dat niet. April kan, zodra deze is afgerond, historische trainingsdata worden voor de volgende ronde; je mag het koersverloop van april niet gebruiken om de instellingen te kiezen die in april zelf worden getest.

Sla de selectie op die bij elke grens is gemaakt. Een volledig overzicht bevat ook afgewezen kandidaten en hun trainingsmaatstaven, zodat een andere beoordelaar kan nagaan waarom de winnaar is gekozen.

Een volledige eerste ronde

De onderstaande tabel bevat bedachte leswaarden. Dit zijn geen gemeten backtestresultaten of marktobservaties. Stel dat de beschreven selectieregel vereist dat de training drawdown niet hoger is dan 10%, en vervolgens het hoogste netto trainingsrendement kiest. Alle rendementen zijn na de in het model vermelde kosten.

KandidaatRendement trainingsperiodeMaximale drawdown trainingsperiodeIn aanmerking?
A+5,0%8,0%Ja
B+8,0%15,0%Nee
C+4,0%6,0%Ja

Het protocol selecteert A. De hogere opbrengst van kandidaat B overschrijdt de opgegeven drawdown-voorwaarde niet. Kandidaat C blijft in het overzicht, ook al verliest deze de vergelijking.

Bevries A voor april. Stel dat het voorbeeld voor uitleg een netto rendement van −2% in april toekent. Die waarde wordt opgenomen in het out-of-sample resultaat. Overschakelen naar C omdat die april beter zou hebben gedaan, zou betekenen dat de testmaand wordt hergebruikt in de beslissing.

Op de grens van mei vergelijkt het oorspronkelijke protocol alle kandidaten opnieuw, ditmaal over februari tot en met april. Het kan C selecteren voor mei als C die nieuwe trainingsvergelijking wint. Dit is een geplande update op basis van de informatie die op dat moment beschikbaar is.

Voeg de latere testperiodes samen tot één vermogenscurve

Ga uit van de volgende selecties en testresultaten. Deze waarden zijn een vervolg op hetzelfde fictieve rekenvoorbeeld en zijn niet afkomstig uit een echte strategie-simulatie.

TestmaandGeselecteerde configuratieNetto testresultaatStartkapitaalEindkapitaal
aprilA−2,0%$1.000,00$980,00
meiC+1,0%$980,00$989,80
juniA−3,0%$989,80$960,11
juliC+2,0%$960,11$979,31

De onderliggende niet-afgeronde eindwaarden zijn 980, 989,8, 960,106 en 979,30812. Het gecombineerde rendement is:

(1 − 0,02) × (1 + 0,01) × (1 − 0,03) × (1 + 0,02) − 1 = −2,069188%.

Het optellen van de vier percentages geeft −2%, wat afwijkt van het samengestelde resultaat. Neem het eindsaldo van de vorige periode mee naar de volgende en rond alleen af voor weergave.

De waarnemingen aan het einde van de maand laten een grootste daling zien van ongeveer 3,99% ten opzichte van de initiële $1.000,00. Het eigen vermogen had binnen de maand verder kunnen dalen, dus maandelijkse waarnemingen kunnen de werkelijke maximale drawdown niet vaststellen.

Voor dit rekenvoorbeeld gaan we ervan uit dat elke grensreset is opgenomen in de vermelde netto maandrendementen. Een echte backtest moet die resets berekenen op basis van zijn posities en het execution-model.

Bepaal wat er gebeurt met openstaande GRID- of DCA-posities

Stel dat een bot april afsluit met 0,01 BTC en 400 USDT in bezit. Bij een hypothetische BTC-koers van $50.000 bedraagt de equity 900 USDT. Een nieuwe maand herstelt dit niet terug naar de oorspronkelijke 1.000 USDT.

Kies één consistente grensbeleid:

Draag de posities over. Zet de daadwerkelijke munten, het geld en de positie-status over naar de volgende testperiode. Bepaal wat een wijziging in de instellingen doet met bestaande orders en voorraad. De simulator moet deze overgang ondersteunen; een nieuwe backtest die met standaardactiva wordt gestart, geeft dit mogelijk niet weer.

Sluiten en resetten. Annuleer openstaande orders, verkoop of sluit de resterende positie met het opgegeven executiemodel, trek de kosten af en begin het volgende venster met het resulterende eigen vermogen. Als de volgende setup een startvoorraad coins vereist, modelleer dan ook die aankoop en de bijbehorende kosten.

Beide beleidsopties kunnen een reëel operationeel proces beschrijven. Ze achteraf combineren nadat je de resultaten hebt gezien, kan verliezen verhullen. Hanteer hetzelfde beleid in de benchmark waar relevant en toon het effect van een ander beleid als een apart gelabelde gevoeligheidsanalyse.

Controleer het fill-model en de benchmark

Een candle die een limietprijs raakt, bewijst niet dat je order volledig gevuld had kunnen worden. Candle-data kan bovendien verbergen of eerst het koopniveau of het verkoopniveau werd bereikt. Dichte GRID-instellingen kunnen aantrekkelijk lijken in een simulatie die uitgaat van een gunstige intrabar-volgorde.

Documenteer hoe het model omgaat met gedeeltelijke fills, volgorde in de wachtrij, spread en gaps. Herhaal de analyse met minder gunstige kosten of fills als de tool dat ondersteunt. Een conclusie die verdwijnt na een kleine kostenwijziging verdient nader onderzoek.

Gebruik dezelfde data, startkapitaal en initiële activa voor de vergelijking. Een bot die voor de helft in munten en voor de helft in cash start, is niet direct vergelijkbaar met een benchmark die volledig belegd begint, tenzij je dat verschil in allocatie toelicht.

De backtest-resultaten checklist is handig om het uiteindelijke rapport te beoordelen. Houd het maandelijkse verloop, de handelsactiviteit, de exposure en de kosten naast het totale rendement.

Houd de uiteindelijke evaluatie gescheiden van het protocolontwerp

Herhaalde walk-forward testen kunnen zelf training worden. Als je alle vier de testmaanden bekijkt, de kandidatenlijst aanpast en dezelfde periode opnieuw uitvoert, heeft de aangepaste methode informatie uit die maanden gebruikt.

Leg die revisie vast en reserveer latere onaangeroerde historie of nieuwe toekomstige data voor de volgende evaluatie. Een nieuw label op dezelfde data maakt ze niet opnieuw ongezien.

Het downloadbare overzicht kan eenvoudig zijn: één rij per ronde met trainingsdata, kandidaatversie, selectiemaatstaven, gekozen configuratie, testdata, kostenmodel, grensbeleid en netto testresultaat. Bewaar de ruwe rapporten en dataverwijzingen ernaast. Het onderstaande voorbeeld bevat de fictieve tabel als exporteerbare CSV om het boekhouden te oefenen.

Voer na historische controles een vaste demorun uit

Oefen met de boekhouding van het voorbeeld

Download de vier fictieve testmaanden, inclusief begin- en eindsaldo. Dit zijn verzonnen oefenwaarden, geen backtestrapport.

Observeer je setup in Bitsgap-demo

Nadat je je historische analyse hebt afgerond in een tool die de vereiste periodes en boekhouding ondersteunt, zet je een ondersteunde botconfiguratie vast in Bitsgap-demo. Noteer de startactiva en instellingen, en observeer deze vervolgens met virtuele fondsen en actuele marktprijzen. Demo is een afzonderlijke forward-oefening; deze werkwijze gaat niet uit van een ingebouwde walk-forward optimizer.

Veelgestelde vragen

Voorkomt walk-forward testen overfitting?

Het vermindert één bron van in-sample bias door elk selectievenster te scheiden van de latere test. Herhaalde protocolwijzigingen, datalekken, onrealistische fills en selectieve rapportage kunnen nog steeds tot misleidende resultaten leiden.

Hoe lang moeten de periodes zijn?

Er is geen universele lengte. De handelsfrequentie, beschikbare historie en selectiemethode bepalen hoeveel bewijslast elk venster bevat. De verdeling van drie maanden en één maand in dit voorbeeld is bedoeld als leermiddel.

Kan ik de rendementen uit afzonderlijke testperiodes bij elkaar optellen?

Combineer de opeenvolgende rendementen wanneer elk venster begint met het eindsaldo van het vorige venster. Behoud ook het onderliggende verloop van het vermogen, de kosten en de exposure; alleen een eindpercentage verbergt belangrijke verschillen.

Is een forward demo hetzelfde als een out-of-sample backtest?

Een historische out-of-sample test gebruikt latere historische data in een simulator. Forward demo volgt nieuwe data met virtuele fondsen. Beide hebben beperkingen, en geen van beide garandeert live fills of toekomstige rendementen.

Wil je nog meer winst maken in crypto?

Bitsgap helpt crypto-handelaren 24/7 om met geautomatiseerde handelsoplossingen meer geld te verdienen.

Start Free proefperiode

*7-dagen PRO plan proefperiode. Geen creditcard vereist

Probeer Bitsgap’s PRO-plan 7 dagen gratis uit, kies later een plan.

Klaar in 3 stappen en handelt voor jou.

Al je gegevens zijn beveiligd met geavanceerde encryptie