Signal Pilot
🟠 Expert • Les 63 van 85

Backtesting als bewijs

Leestijd ~14 min • Module 8: Een systeem bouwen
Signal Pilot
Professionele handelseducatie
0 %
Je maakt vooruitgang!
Lees verder om deze les af te ronden

Doorzoek je 253 doodgewone regels op voortschrijdende gemiddelden over de zestig slotkoersen van deze cursus, dan komt er een winnaar uit die na kosten 9,84 dollar per aandeel maakt, tegen 5,68 voor aanhouden, op 7 transacties, bij een t-waarde van 3,65. Schud nu diezelfde zestig bewegingen van candle tot candle zo door elkaar dat er geen tijdstructuur overleeft, houd de drift en de volatiliteit precies zoals ze waren, en laat dezelfde zoektocht opnieuw lopen. Op 52,5 procent van die structuurloze reeksen verslaat de beste regel het aanhouden met minstens evenveel als de echte deed, en op 77,2 procent verslaat zij het überhaupt. Het resultaat ligt onder de mediaan van wat een markt zonder enige inhoud voortbrengt. Een backtest van één regel is een meting; een backtest van de beste van 253 is een meting van de zoektocht.

Vereisten: Les 62, voor de vierdelige zin waarin een regel geschreven moet zijn voordat zij überhaupt getoetst kan worden, les 19, voor wat zeven transacties wel en niet kunnen dragen, en les 11, voor de kosten van een rondgang die deze pagina van elk getal erop aftrekt.

De stelling, gezegd zoals zij bedoeld is

De argumenten voor backtesting zijn goed en verdienen het netjes genoemd te worden voordat er iets mee gebeurt. Een regel is een reeks instructies. Historie is een verslag van wat koersen hebben gedaan. Je kunt de instructies dus over het verslag laten lopen en uitzoeken wat de regel zou hebben opgeleverd, en dat is een doodgewone technische proef en geen bijgeloof. Verloor zij, dan heb je dat goedkoop geleerd. Won zij, dan heb je minstens vastgesteld dat het idee niet zichtbaar leeg is. Niemand met verstand beweert dat een backtest de toekomst voorspelt. De stelling is smaller en klinkt onaantastbaar: een backtest vertelt je of de regel gewerkt heeft.

Dit is wat hij je werkelijk vertelt, op data die deze cursus al heeft afgedrukt. Neem de zestig slotkoersen en één regelfamilie: long wanneer een snel voortschrijdend gemiddelde van de slotkoersen boven een langzaam kruist, uit de markt wanneer het er weer onder kruist. Snelle lengtes van 2 tot 12, langzame van 3 tot 30, de langzame altijd langer dan de snelle. Dat zijn 253 configuraties, wat naar elke maatstaf een kleine zoektocht is, en elk ervan is een regel die een redelijk mens voorgesteld had kunnen hebben.

De uitvoeringsafspraak weegt zwaarder dan zij eruitziet, dus staat zij op de pagina. Een kruising is pas zichtbaar zodra een candle gesloten is, dus wordt het signaal gelezen op het slot van candle i en de transactie gedaan op het slot van candle i plus één. Uitvoeren op de signaalcandle zelf is de vooruitblik die de helft van alle backtests op internet laat werken, en hij is hier ongeveer een derde van de schijnbare voorsprong waard. De kosten zijn een cent spread, vijf basispunten slippage per kant bij een koers rond 103 en een halve cent per aandeel commissie, wat neerkomt op 0,1230 per aandeel voor een rondgang. Elke op de laatste candle nog open positie wordt daar gesloten.

Laat alle 253 lopen en de beste is een snel 2-candle gemiddelde tegen een langzaam 5-candle gemiddelde. Zij doet 7 transacties en maakt 10,70 per aandeel bruto, 9,84 na kosten, tegen 5,68 voor kopen op de eerste slotkoers en verkopen op de laatste. Haar trefkans is 6 van 7, haar gemiddelde transactie is 0,910 van één candlestandaarddeviatie, en de t-waarde op haar eigen transactieverslag is 3,65. Elk van die getallen is het soort dat een strategie gefinancierd krijgt.

Wat dezelfde zoektocht vindt in een markt zonder enige inhoud

De toets is goedkoop. Neem de 59 bewegingen van candle tot candle waaruit deze reeks bestaat, trek er 59 willekeurig uit met teruglegging en leg ze achter elkaar vanaf dezelfde beginkoers. Het resultaat heeft dezelfde drift en dezelfde volatiliteit als het origineel, gebouwd uit letterlijk dezelfde bewegingen, en helemaal geen tijdstructuur: niets erin kan worden uitgebuit door een regel die van de volgorde van wat dan ook afhangt, want de volgorde is vernietigd. Doe dat 4.000 keer vanaf seed 20260903 en laat op elke reeks dezelfde zoektocht van 253 cellen lopen.

MaatWaarde
Beste van 253, bruto10,70
Beste van 253, na kosten9,84
Kopen en aanhouden, na kosten5,68
Voorsprong op aanhouden4,16
Structuurloze reeksen waarvan de beste cel het aanhouden verslaat0,772
Structuurloze reeksen die de echte voorsprong overtreffen0,525

Op 77,2 procent van de reeksen zonder enige structuur erin verslaat de beste van 253 regels het kopen en aanhouden. Op 52,5 procent verslaat zij het met minstens de 4,16 die de echte zoektocht vond. Het gemeten resultaat is tegen die verdeling niet louter onindrukwekkend: het ligt onder haar mediaan. Wat de zoektocht op de echte slotkoersen ook vond, een zoektocht van dezelfde omvang vindt meer dan dat, in meer dan de helft van de gevallen, in data die niets te vinden bevatten.

Merk op wat dit niet zegt. Het zegt niet dat de regel slecht is, en het zegt niet dat de reeks geen structuur heeft. Het zegt dat het getal 9,84 is voortgebracht door een procedure die toch al getallen als 9,84 voortbrengt, zodat het getal niet als bewijs over de markt kan dienen. Dat is een uitspraak over de meting, en zij is de reden dat bijna niemand tegen wie jij handelt ooit de zijne heeft nagerekend: de controle kost een avond en een hersteekproeflus, en zij kan een resultaat alleen maar wegnemen.

Twee kolommen gaan op het blad dat deze module in les 62 begon, naast de zin. Wat de backtest opleverde, hier 4,16 boven de benchmark. En wat dezelfde zoektocht opleverde op data zonder enige inhoud, hier 4,16 of beter in 52,5 procent van de pogingen. Een regel waarvan de tweede kolom niet ruim groter is dan de derde heeft niets verdiend, en het paar is meer waard dan elk van beide cijfers apart, want geen van beide betekent veel zonder het andere.

De twee aftrekposten die eraan voorafgaan

Eerst de kosten, want zij zijn het enige zekere hieraan. Een rondgang kost hier 0,1230 per aandeel, en één candlestandaarddeviatie op deze reeks is 1,5443, dus een rondgang is 0,0796 van een R. Dat klinkt klein tot je het vermenigvuldigt. De winnende regel doet 7 transacties en betaalt daarmee 0,557R aan kosten; aanhouden doet er één en betaalt 0,0796R. De vaak handelende regel begint een halve R achter voordat een van beide ergens gelijk in heeft, en dezelfde kosten zijn 0,0398R tegen een twee-sigma stop en 0,1593R tegen een halve-sigma stop, want de kosten liggen vast in centen en de R niet.

Daarna de benchmark, en dat is de aftrekpost die bijna altijd ontbreekt. De beste cel maakte 9,84. Aanhouden maakte 5,68. De bijdrage van de regel is geen 9,84, zij is 4,16, want de reeks steeg en elke regel die tijd long doorbrengt raapt die stijging op, of zij nu iets begrepen heeft of niet. Een backtest die de eigen kapitaalcurve van de strategie meldt en nooit die van de benchmark heeft het grootste van de twee getallen verstopt.

De regel die de gesplitste-steekproeftoets niet kan zien

Het gebruikelijke verweer tegen dit alles is toetsen buiten de steekproef, en dat is echt de moeite waard, dus doe het hier. Optimaliseer alleen op de eerste dertig slotkoersen. De beste cel over dat venster is opnieuw het 2-en-5-paar, dat 5,53 netto maakt op 3 transacties, over een stuk waarin kopen en aanhouden 0,82 verloor. Dat ziet eruit als een regel die iets vindt in een markt die niets bood. Bevries de parameters, raak niets aan en laat ze op de laatste dertig slotkoersen lopen.

VensterBeste regel, nettoKopen en aanhouden, nettoTrades
Candles 1 tot 30, hier geoptimaliseerd5,53-0,823
Candles 31 tot 60, parameters bevroren4,296,885

Zij slaagt. De prestatie viel van 5,53 naar 4,29, een achteruitgang van 22 procent, en elke checklist in het vak behandelt alles onder 30 procent als geslaagd. De regel was niet curve-fit in de zin die de checklist bedoelt: zij bleef echt werken op data die zij nooit had gezien.

En over diezelfde ongeziene candles maakte niets doen 6,88. De gevalideerde regel verloor van de benchmark met 2,59 op precies het venster dat haar moest rechtvaardigen, en de toets buiten de steekproef kon dat niet melden, want er zit nergens een benchmark in. De toets vraagt of een resultaat zich herhaalt. Zij vraagt nooit of het resultaat de moeite waard was.

Dezelfde zestig slotkoersen, op vier niveaus van eerlijkheid

Niets hieronder verandert de data of de regel. De 2-en-5-kruising is op elk niveau dezelfde regel, gelopen over dezelfde zestig slotkoersen. Alleen datgene waartegen zij gemeten wordt verandert, en elk niveau is het niveau waar de meeste backtests ophouden.

Stop op het eerste niveau en de regel maakte 10,70 per aandeel op 7 transacties met 6 winnaars. Stop op het tweede en de kosten brengen haar op 9,84, wat een korting van 8 procent is en aanvoelt als zorgvuldigheid, want een pagina die kosten aftrekt ziet er nauwgezet uit. Stop op het derde en de benchmark brengt haar op 4,16, wat haar opnieuw meer dan halveert, en daarmee ben je al verder dan de meeste gepubliceerde backtests.

Het vierde niveau is het niveau dat het oordeel verandert en niet de omvang. Trek de bewegingen opnieuw, laat de zoektocht opnieuw lopen, en 52,5 procent van de structuurloze reeksen brengt een beste cel voort die het aanhouden met 4,16 of meer verslaat. De eigen t-waarde van 3,65 van de regel is niet fout; zij beantwoordt een andere vraag. Zij meet hoe zeker de 7 transacties van deze cel van nul afwijken, en zij heeft geen enkele manier om te weten dat 252 andere cellen auditie deden en afvielen. De t-waarde wordt binnen de winnaar berekend. De zoektocht vond daarbuiten plaats.

Een backtest meet de zoektocht die je hebt gedraaid, niet de markt waarop je hem draaide.

Wat overblijft is meer dan het klinkt. Een backtest doodt nog steeds regels, goedkoop en blijvend: een regel die binnen de steekproef verliest, vóór kosten, is dood, en dat op één middag uitzoeken is het meeste waarvoor de techniek bestaat. Wat hij alleen niet kan, is er een bevorderen. Bevordering heeft de benchmark, de kosten en de hersteekproefnulverdeling nodig, en de nulverdeling is één lus code.

Laat vanavond dus alle vier de niveaus over je eigen regel lopen, in die volgorde, en stop bij het eerste dat het resultaat wegneemt.

Wat dit niet oplost

Dat backtesting niet werkt. De pagina toetste één regelfamilie over één reeks van zestig candles met een zoektocht van 253 cellen, en een echt programma loopt over duizenden candles en veel instrumenten, waar de steekproefruis die deze pagina uitbuit veel en veel kleiner is. Het argument over zoekinflatie hangt van de omvang van geen van beide af, maar de concrete 52,5 procent wel, en op een langere reeks zou dezelfde zoektocht een evenredig kleinere voorsprong fabriceren. Niets hier laat zien dat de techniek nutteloos is; het laat zien wat een resultaat moet overleven voordat het iets betekent.

Dat de hersteekproeftoets de juiste nulverdeling is. Bewegingen met teruglegging trekken vernietigt alle tijdstructuur in één keer, wat er een toets van maakt op de vraag of de regel volgorde uitbuit, en op niets anders. Het vernietigt ook het clusteren van volatiliteit, dat echt is en dat een kruisingsregel wel degelijk kan verhandelen, zodat de nulverdeling in dat opzicht te makkelijk te verslaan is en het ware aandeel eerder boven 52,5 procent ligt dan eronder. Een blok-bootstrap zou een deel van die structuur bewaren en is de eerlijke volgende stap; deze pagina draait er geen.

Dat de kosten de jouwe zijn. Een cent spread en vijf basispunten slippage beschrijven een liquide instrument in kleine omvang. Op iets breeders zijn zij ernstig optimistisch, en op een diepe large cap bij honderd aandelen zijn zij pessimistisch. Elk cijfer op deze pagina beweegt met die aanname mee, en de 7-transactieregel beweegt ongeveer zeven keer zo hard als de benchmark, en dat is de richting die het aanhouden vleit.

Dat kopen en aanhouden de juiste benchmark is. Zij is hier de juiste omdat de regel alleen long is op een stijgende reeks, en zij is de verkeerde voor een regel die short gaat, of voor een stuk dat daalde. Op een dalende reeks ziet elke long-only regel er slecht uit tegen aanhouden, om een reden die niets met de regel te maken heeft, en een benchmark uitkiezen die jou vleit is dezelfde fout als een venster uitkiezen dat dat doet. De benchmark moet vóór de toets gekozen worden, en deze pagina koos haar erna, want de reeks was al geschreven.

Dat het gesplitste-steekproefresultaat algemeen geldt. Dertig candles per helft zijn veel te weinig, het venster binnen de steekproef bevat 3 transacties en dat erbuiten 5, en bij zulke kleine steekproeven draagt het cijfer van 22 procent achteruitgang bijna geen informatie. Wat het wél draagt is niet dat toetsen buiten de steekproef doorgaans slechte regels doorlaten; het is het smallere en hardere punt dat zij een regel kunnen doorlaten die van de benchmark verliest, omdat er geen benchmark in zit. Dat gebrek is structureel en hangt helemaal niet van de steekproefomvang af.

En de concessie die het meest kost: deze pagina zegt je af te trekken wat de zoektocht zou hebben opgeleverd, en geeft geen manier om dat te doen voor de zoektocht die je werkelijk hebt gedraaid. De 253 cellen zijn telbaar omdat ze gecodeerd zijn. De regels die je op een chart bekeek en liet vallen, de parameter die je twee keer verzette en terugzette, het instrument dat je eerst probeerde en liet varen omdat het lelijk was — dat zijn ook configuraties, ze zijn niet vastgelegd, en ze zijn vrijwel zeker talrijker dan 253. De correctie op deze pagina is alleen berekenbaar voor het deel van de zoektocht dat eerlijk genoeg was om opgeschreven te worden. Les 64 pakt dat probleem frontaal aan en vindt dat de inflatie vooraf voorspelbaar is uit het aantal alleen: bij een zoektocht over 15.000 configuraties en 156 transacties toont de beste cel 0,351R voorsprong voordat de markt ook maar iets heeft gedaan.

Opgaven

  1. Zet een prijs op één rondgang in R. Neem de spread van je instrument, de commissie van je broker en een slippagecijfer dat je zou verdedigen, tel ze op voor een rondgang en deel door één candlestandaarddeviatie op het tijdsbestek dat je handelt. Tien minuten, en je houdt één getal over, de kosten van een transactie in R, en dat is het bedrag dat elke backtest die je ooit gelezen hebt heeft weggelaten.
  2. Zet de benchmark naast je regel. Neem een regel die je al handelt of al gelooft, laat haar over tweehonderd candles lopen na de kosten die je zojuist berekende, en bereken op diezelfde tweehonderd candles wat kopen op de eerste slotkoers en verkopen op de laatste zou hebben opgeleverd. Een half uur, en je houdt één getal over, het gat ertussen, en dat is het enige deel van je kapitaalcurve waarvoor de regel verantwoordelijk is.
  3. Draai de nulverdeling. Neem de veranderingen van candle tot candle van diezelfde tweehonderd candles, trek er tweehonderd willekeurig uit met teruglegging, leg ze achter elkaar en laat je hele zoektocht opnieuw over de synthetische reeks lopen. Doe dat duizend keer met een seed die je opschrijft, en tel hoe vaak het beste resultaat de benchmark verslaat met minstens wat je echte zoektocht vond. Een avond, en je houdt één getal over, het aandeel, en dat is de kans dat een markt zonder enige inhoud je had gegeven wat je vond.

Bronnen. Halbert White, „A Reality Check for Data Snooping” (Econometrica, 2000), voor de bootstrapprocedure die deze les in het klein draait, en voor het argument dat de verdeling van de beste regel, en niet die van één regel, degene is waartegen een zoektocht beoordeeld moet worden. Ryan Sullivan, Allan Timmermann en Halbert White, „Data-Snooping, Technical Trading Rule Performance, and the Bootstrap” (The Journal of Finance, 1999), voor hetzelfde experiment op volle schaal uitgevoerd over een eeuw dagdata en duizenden regels, en dat is de studie waarvan deze pagina een nabootsing op zestig candles is. David H. Bailey, Jonathan M. Borwein, Marcos López de Prado en Qiji Jim Zhu, „Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance” (Notices of the American Mathematical Society, 2014), voor het resultaat dat het aantal beproefde configuraties op zichzelf al genoeg is om te voorspellen hoeveel schijnbare voorsprong opduikt, en dat is precies wat de volgende les berekent. Bradley Efron, „Bootstrap Methods: Another Look at the Jackknife” (The Annals of Statistics, 1979), voor de hersteekproefmethode waaruit de nulverdeling in deze les is gebouwd.

Gerelateerde lessen
Les 62

Wat er zou moeten gebeuren

De vierdelige zin waarin een regel geschreven moet zijn voordat zij überhaupt getoetst kan worden.

Les lezen →
Les 19

Hoe lang tot je het weet

Wat zeven transacties en een t-waarde van 3,65 wel en niet kunnen dragen.

Les lezen →
Les 11

Slippage en impact op retailomvang

De kosten van een rondgang die deze les van elk getal op de pagina aftrekt.

Les lezen →
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.

💬 Discussie (0 reacties)

0/1000

Reacties laden…

← Vorige les Volgende les →

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 →