We testten 240 parametercombinaties. De beste liet een Sharpe-ratio van 2.1 zien; de mediaan was 0.1; en slechts 17 kwamen boven 1.0 uit. Die cijfers lijken op een ontdekking, totdat je beseft dat een zoekopdracht van deze omvang zelfs wanneer geen enkele strategie een werkelijk voordeel heeft, toevallig een veelbelovende winnaar kan opleveren.
Het verrassende getal is 240. In een backtestrapport wordt de geselecteerde strategie meestal behandeld alsof die als enige is getest. Zo verloopt onderzoek niet. Elke parameterwijziging, functiewissel, universumwijziging en nieuwe run na een tegenvallend resultaat geeft ruis opnieuw de kans om op een signaal te lijken.
Waarom zorgt het proberen van meer strategieën ervoor dat de hoogste Sharpe stijgt?
Stel je 240 onafhankelijke strategieën voor zonder werkelijk voordeel en met ruis in de geschatte Sharpes. De meeste schattingen liggen dicht bij nul, maar het maximum is doorgaans positief. Hoe meer kandidaten je bekijkt, hoe verder dat maximum van de werkelijkheid kan afdrijven.
Ter illustratie: stel dat de geschatte Sharpe van elke kandidaat een standaardfout van 0.5 heeft. Bij 240 onafhankelijke trekkingen kan de hoogste schatting alleen door selectie ongeveer 1.4 standaardfout boven het gemiddelde uitkomen, oftewel circa 0.7 Sharpe. Echte strategievarianten zijn onderling gecorreleerd, dus dit is geen correctie die je zomaar in een rapport kunt invullen. Het laat zien waarom “de winnaar versloeg nul” zwak bewijs is na een brede zoektocht.
En de zoektocht beperkt zich zelden tot het parameterrooster. Misschien heb je drie signaalfamilies geprobeerd, er twee afgewezen nadat je hun curves had gezien, het handelsuniversum gewijzigd en de overgebleven variant opnieuw uitgevoerd met een ander herbalanceringsschema. Als de prestaties die keuzes hebben beïnvloed, horen ze thuis in de onderzoeksgeschiedenis.
Wat telt als een backtesttest?
Tel een beslissing als een test wanneer het resultaat van invloed kan zijn geweest op de strategie die je koos. Dat geldt ook voor runs die je niet publiceerde en varianten die je voortijdig stopte omdat de vermogenscurve er slecht uitzag. Een compileerfout is geen prestatietest; een run met een tegenvallende Sharpe meestal wel.
| Onderzoeksactie | Meestal meetellen? | Waarom |
|---|---|---|
| Een terugkijkperiode wijzigen van 20 naar 30 na het bekijken van de resultaten | Ja | Het eerste resultaat beïnvloedde de volgende kandidaat |
| Dezelfde vaste strategie uitvoeren op een vooraf vastgelegde nieuwe datumbereik | Meestal geen nieuwe selectietest | De regel lag vast voordat je dat bewijs zag |
| Het universum wijzigen nadat je hebt gezien welke assets wonnen | Ja | De universumselectie kan het resultaat rooskleuriger doen lijken |
| Een syntaxisfout oplossen en de ongewijzigde code opnieuw uitvoeren | Nee | Geen onderzoeksbeslissing hing af van de prestaties |
De grens ligt bij de vraag of je een uitkomst hebt gebruikt om een keuze te maken. Dat is achteraf lastig uit je geheugen te reconstrueren. Daarom hoort een experimentenlog voor elke run de hypothese, code- of configuratieversie, dataperiode, kostenaannames en het resultaat vast te leggen.
Kan ik corrigeren voor multiple testing?
Er bestaan methoden om selectiebias in te schatten of de significantie voor veel tests te corrigeren. Die kunnen nuttig zijn, maar vereisen aannames over de onderlinge samenhang tussen kandidaten en het gedrag van rendementen. Een nominale p-waarde of één deflated-Sharpe-schatting kan een zoektocht waarvan de werkelijke geschiedenis verloren is gegaan niet redden.
Begin met de onderdelen waar je controle over hebt. Leg een definitieve specificatie vast voordat je een echt onaangeroerde periode evalueert. Houd de volledige verzameling kandidaten zichtbaar. Groepeer verwante varianten bij het testen op basis van de beslissing waaruit ze voortkwamen, in plaats van te doen alsof elke variant een onafhankelijke ontdekking was. Rapporteer ook de zoektocht, naast de winnaar: het aantal tests, de selectieregel en of de eindevaluatie tot verdere aanpassingen heeft geleid.
Een nuttige test: Als het resultaat op de holdout tegenvalt, ga je de strategie dan aanpassen en dezelfde periode opnieuw een holdout noemen? Zo ja, dan maakt die periode nu deel uit van het onderzoek. Voor de volgende evaluatie heb je nieuw bewijs nodig.
Wat moet een AI-onderzoeksagent loggen?
Een agent kan sneller kandidaten genereren dan iemand ze in het werkgeheugen kan bijhouden. Daarom hoort het bijhouden van tests thuis in het onderzoekssysteem zelf, niet alleen in een rapportageklus. Sla elke kandidaat op voordat die wordt uitgevoerd, inclusief het bovenliggende experiment en de reden waarom de kandidaat bestaat. Bewaar mislukte en afgewezen runs. Leg vast wanneer een mens of agent de prestaties heeft bekeken en welke beslissing daarop volgde.
Maak het selectieproces vervolgens reproduceerbaar: met dezelfde verzameling kandidaten en dezelfde regel moet steeds dezelfde winnaar worden gekozen. Als een agent na het zien van resultaten zijn prompt, doelstelling of beperkingen blijft aanpassen, maken ook die wijzigingen deel uit van de zoektocht.
Een Sharpe van 2.1 kan nader onderzoek waard zijn. Wat die betekent, hangt af van de weg ernaartoe. Als de onderzoekslog vermeldt dat 240 kandidaten om de koppositie streden, kun je de juiste vervolgvraag stellen: welk bewijs is er nog over dat niet al door die keuzes is opgebruikt?
← Alle artikelen


