Signal Pilot
🟠 Gevorderd • Les 70 van 85

Machinaal leren als filter

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

Les 69 liet deze pagina een raster na. Zes hyperparameters met elk vijf waarden zijn 15.625 configuraties, een raster dat een beginner bescheiden zou noemen, en het rekenwerk van les 64 zegt dat een zoektocht van die breedte, beoordeeld over 156 trades, 0,318 R per trade fabriceert voordat de markt ook maar iets heeft gedaan. Dat is het bekende bezwaar tegen machinaal leren in de handel en het is het bezwaar waarop antwoord bestaat: tel het raster, leg de lat van 1,645 naar 4,507 en kijk of het model eroverheen komt. Het bezwaar waarop dat antwoord niet werkt bevat helemaal geen model. Een filter maakt geen trades, het haalt er weg, dus het kan je alleen de verliezers teruggeven die het heeft weten te vangen, en een strategie die er goed uitziet heeft er bijna geen om te vangen. De winnende regel uit les 63 heeft zes winnaars en één verliezer. Een filter dat even goed is in winnaars houden als in verliezers weren zou het bij 96,04 procent van de ongeziene trades bij het rechte eind moeten hebben om op die regel alleen al quitte te spelen, en een volmaakt filter, dat de ene verliezer vangt en verder niets aanraakt, zou de regel met 4,30 procent verbeteren.

Vereisten: Les 64, voor de formule van het verwachte maximum en de lat die een aantal configuraties oplegt, les 63, voor de zeven trades die deze pagina uit elkaar haalt, en les 17, voor de twee getallen waaruit een profitfactor bestaat.

Wat een raster kost voordat het een prijs heeft gezien

Een regel heeft parameters en les 64 telde ze. Een model heeft hyperparameters, wat hetzelfde is onder een andere naam, en het heeft één dimensie die een regel niet heeft: welke kenmerken erin gaan. Beide vermenigvuldigen zich uit, en het rekenwerk dat een zoektocht beprijst maakt geen onderscheid tussen die twee. Het telt configuraties, en het aantal staat vast voordat er iets draait.

Neem het raster dat de vooruitblik naliet. Zes hyperparameters met elk vijf waarden zijn 15.625, en de invulling staat er volledig zodat niets hiervan op gezag hoeft te worden aangenomen. Eén gedeeld door 15.625 is 0,0000640, en de waarde van de standaardnormale verdeling die zoveel in de bovenstaart laat is 3,83028. Vervolgens is 15.625 maal e gelijk aan 42.473, één gedeeld daardoor is 0,0000235, en de bijbehorende normale waarde is 4,06963. Weeg die twee met 0,4228 en 0,5772 en dat geeft 3,96843, en dat is een t. Deel door de wortel uit 156, dus door 12,49, en het gefabriceerde voordeel is 0,318 R per trade. De lat waar een zoektocht van die breedte overheen moet voordat slechts vijf procent van de waardeloze zoektochten hem verslaat, ligt op 4,507.

Nu de dimensie die niemand telt. Een lijst van twintig kenmerken met de opdracht er drie tot zes uit te kiezen is de gebruikelijke vorm van deze oefening, en die opdracht leest als een vereenvoudiging. Het is een zoektocht. Precies vier uit twintig kiezen zijn 4.845 verschillende modellen, drie tot zes kiezen zijn er 60.249, en de lijst stond vast voordat je begon, dus het aantal is beschikbaar voor iedereen die het wil. Vermenigvuldig het getal van vier uit twintig met het hyperparameterraster en het werk van één middag is 75.703.125 configuraties.

Wat je hebt gevarieerdConfiguratiesLat bij vijf procentGefabriceerde R per trade over 156 trades
Drie hyperparameters, elk vijf waarden1253,3460,209
Vier hyperparameters, elk vijf waarden6253,7690,250
Zes hyperparameters, elk vijf waarden15.6254,5070,318
Vier kenmerken gekozen uit een lijst van twintig4.8454,2520,295
De laatste twee samen75.703.1256,0610,453

De laatste regel is het eerlijke aantal voor één middag, en 6,061 is een t die een paar honderd trades niet gaan opleveren hoe goed het idee ook was. Lees de derde kolom echter van boven naar beneden en de vorm is milder dan dat klinkt: van 15.625 configuraties naar 75.703.125 gaan is 4.845 keer zoveel zoeken en verschuift de lat met 1,554. De straf groeit met de logaritme van het aantal, en dat snijdt aan de kant die niemand noemt. Je hebt geen modieus model nodig om er slecht voor te staan. Vier hyperparameters en helemaal geen kenmerkselectie zitten al op 3,769.

Stel dus dat je dat allemaal netjes doet. Stel dat je het raster telt, over de lat komt en een model in handen hebt dat je eigen setups werkelijk beter rangschikt dan het toeval. De rest van deze pagina gaat erover of dat iets waard is, en die heeft geen aantal configuraties nodig, geen simulatie en geen aanname over markten.

Zet het op zoals het geld werkelijk loopt. Een filter vindt geen nieuwe trades. Het gaat op de setups zitten die je methode toch al levert en haalt er een paar weg, dus de eerlijke vergelijking is de totale winst over dezelfde oorspronkelijke kansen en niet de winst per genomen trade. Schrijf je trefkans als p en je uitbetaling als b, allebei uit les 17, zodat een winnaar b betaalt en een verliezer één kost. Laat het filter een fractie s van de winnaars houden en een fractie t van de verliezers terecht afwijzen. Per oorspronkelijke trade laat het p maal één min s maal b liggen, en bespaart het één min p maal t. Het is de moeite waard zodra het tweede minstens het eerste is:

(1 − p) t  ≥  p (1 − s) b

Deel dat op twee manieren en het zegt twee verschillende nuttige dingen. Deel door p maal één min s en de verliezers die het filter weggooit moeten de winnaars die het weggooit met minstens b overtreffen, je payoff ratio, en dat is een toets die je op een logboek kunt uitvoeren met twee tellingen en zonder enige statistiek. Deel in plaats daarvan door één min p en de rechterkant wordt p b op één min p, oftewel brutowinst op brutoverlies, de grootheid die gewoonlijk profitfactor heet en de enige nieuwe naam op deze pagina. Het zijn de twee getallen uit les 17 als één geschreven.

Is het model in beide richtingen even goed, zodat s en t hetzelfde getal a zijn, dan valt de voorwaarde terug op een drempel voor de nauwkeurigheid alleen: a moet minstens de profitfactor gedeeld door één plus de profitfactor zijn. Omgekeerd verdient een filter met nauwkeurigheid a zijn plek bij elke strategie waarvan de profitfactor onder a gedeeld door één min a ligt.

Bij 52 procent nauwkeurigheid bij elke strategie met een profitfactor onder 1,08.

Bij 55 procent onder 1,22.

Bij 60 procent onder 1,50.

Bij 65 procent onder 1,86.

Tweeënvijftig procent is geen opvulling. Gu, Kelly en Xiu hebben deze hele familie modellen buiten de steekproef gemeten op maandrendementen van duizenden aandelen, en hun beste netwerk haalde een maandelijkse R-kwadraat buiten de steekproef van ongeveer vier tiende van één procent. Vertaal dat naar de taal van deze pagina: onder een tweedimensionale normale verdeling is de kans dat het teken van een voorspelling overeenkomt met het teken van de uitkomst een half plus de boogsinus van de correlatie, gedeeld door pi; de correlatie is de wortel uit de R-kwadraat, dus 0,0632, en de nauwkeurigheid is 52,01 procent. Het beste gepubliceerde resultaat van het vakgebied is een filter voor strategieën met een profitfactor onder 1,08.

Bijna niemand die een model op zijn eigen trades heeft gepast, heeft zijn brutowinst door zijn brutoverlies gedeeld en de twee getallen naast elkaar gelegd. Het zijn twee sommen uit een logboek en één deling, en daarin zit de hele beslissing.

Het blad dat deze module sinds les 62 opbouwt krijgt geen negende kolom. Hier wordt het ingelost, alle acht tegelijk, op de ene regel die de cursus sinds les 63 volgt.

Het blad, ingelost op één regel

Les 63 doorzocht 253 configuraties van voortschrijdende gemiddelden over zestig slotkoersen en hield een gemiddelde over 2 bars tegen een over 5: zeven trades, 10,70 per aandeel bruto, 9,84 na kosten, tegen 5,68 voor aanhouden. Vul de acht kolommen in en het blad leest zo.

De zin, uit les 62: ga long wanneer het gemiddelde over 2 bars van de slotkoersen boven dat over 5 kruist, ga vlak wanneer het terugkruist, voer uit op de volgende slotkoers.

Het paar, uit les 63: 4,16 boven de maatstaf, tegen 52,5 procent van de structuurloze zoektochten die 4,16 of meer opleveren.

De lat en het aantal, uit les 64: 253 cellen, een lat van 3,537, een t van 3,65, die erover komt totdat je een minimum aantal trades vastlegt, waarna de fractie loopt van 0,68 procent bij een ondergrens van zeven tot 50,48 procent bij een ondergrens van twee.

De vooraf vastgelegde trades, uit les 65: leeg. De zeven zijn de trades die toevallig plaatsvonden.

Het blootstellingsaandeel, uit les 66: 0,5085, en van de 10,70 bruto leverde de markt 2,95.

De diepte waarop je stopt, uit les 67: leeg.

De capaciteit, uit les 68: een gemiddelde trade van 0,9101R is 1,4055 per aandeel, wat bij een prijs rond 103 neerkomt op 136 basispunten, dus in de small cap van les 68 draagt de trade 1.390.545 dollar en is de beste enkele positie 618.020.

De positiegrens en het toetsinterval, uit les 69: leeg.

Drie lege vakjes, en een tweede kolom waarvan de twee getallen verkeerd om staan. Dat is het oordeel, en het komt voordat het blad half gelezen is. Loop het toch helemaal af, want de vraag van deze pagina is niet of de regel deugt. Ze is of een model de regel beter zou kunnen maken, en die vraag heeft ook voor een waardeloze regel een antwoord.

De zeven trades na kosten zijn 2,577, 1,877, 2,377, 1,377, min 0,423, 1,177 en 0,877. Zes winnaars die samen 10,262 opleveren en één verliezer van 0,423, dus de profitfactor is 24,26, de gemiddelde winnaar is 1,1075R, de gemiddelde verliezer is 0,2739R en de payoff ratio is 4,04. Zet nu de andere kolommen van het blad aan het werk en kijk wat er gebeurt terwijl elke kolom wordt toegepast. De laatste regel van de tabel hieronder is het nulmodel van les 63 zelf, opnieuw gedraaid voor deze pagina: de 59 bewegingen van bar naar bar getrokken met teruglegging, 4.000 reeksen vanaf zaad 20260903, dezelfde zoektocht over 253 cellen op elk ervan, bij dezelfde ondergrens van zeven trades waaraan de winnaar zelf voldeed, en de profitfactor van de cel die wint. De mediaan daarvan is 2,34, en 3,08 procent van die structuurloze zoektochten levert een winnaar op met een profitfactor van 24,26 of meer.

Wat er is afgetrokkenProfitfactorNauwkeurigheid die een filter moet overtreffenHet meeste dat een volmaakt filter zou kunnen toevoegen
Niets36,6797,35 %2,80 %
Kosten, volgens de afspraak van les 6324,2696,04 %4,30 %
Kosten, en het aandeel van de markt uit les 6614,2293,43 %7,57 %
Wat dezelfde zoektocht op niets oplevert, mediaan2,3470,01 %74,91 %

De vierde kolom is die waar het de moeite waard is bij stil te staan, en het is een tweede zuiver getal dat uit dezelfde ongelijkheid valt. Een volmaakt filter haalt elke verliezer weg en houdt elke winnaar, dus het meeste dat het kan toevoegen is het hele brutoverlies, en als aandeel van wat de strategie netto al maakt is dat één gedeeld door de profitfactor min één. Bij deze regel is dat 4,30 procent. Niet 4,30 procent als het model goed is: 4,30 procent als het model foutloos is, want er staat maar één verliezer in het logboek en die is 0,423 van 9,839 waard.

Lees de twee middelste kolommen samen, van boven naar beneden, en ze bewegen om dezelfde reden de tegengestelde kant op. Naarmate de profitfactor richting de waarheid wordt leeggelaten — eerst de kosten, dan het aandeel van de markt, dan wat een zoektocht van dezelfde breedte oplevert op data waar niets in zit —, daalt de nauwkeurigheid die het filter nodig heeft van 97,35 procent naar 70,01, en stijgt de prijs van 2,80 procent naar 74,91. De zoektocht fabriceerde het voordeel en in dezelfde beweging de reden waarom geen model het kon verbeteren.

Een filter kan je alleen je verliezers teruggeven, en een goede strategie heeft er bijna geen.

Daarom telt de onderste regel zwaarder dan hij eruitziet. Een profitfactor van één is een strategie met precies geen verwachting, en daar ligt de drempel op vijftig procent en is een filter van 52 procent werkelijk de moeite waard. Tel het uit over driehonderd trades bij een uitbetaling van twee: honderd winnaars die twee betalen en tweehonderd verliezers die één kosten zijn samen nul. Houd 52 van de winnaars en 96 van de verliezers en je hebt 104 min 96, dus 8R over de oorspronkelijke driehonderd, oftewel 0,027 R per trade. Het filter verbetert de strategie niet. Het is de hele strategie, en die is klein. Ga omhoog naar een profitfactor van twee en hetzelfde filter van 52 procent haalt 0,22R per trade weg bij een strategie die er 0,50 maakt.

Tel dus je winnaars op, tel je verliezers op, deel, en lees het antwoord als de nauwkeurigheid die elk filter moet overtreffen voordat je het bouwt.

Wat dit niet oplost

Dat het filter in balans is. De nauwkeurigheidsdrempel gaat ervan uit dat het model precies even goed is in winnaars houden als in verliezers weren, en de ongelijkheid waar hij uit komt gaat daar helemaal niet van uit: die vraagt alleen dat de specificiteit gedeeld door één min de sensitiviteit boven de profitfactor uitkomt. Een model dat hard is afgesteld op het weren van verliezers, en op de koop toe neemt dat het bijna elke winnaar houdt die het ziet, kan die lat halen bij een totale nauwkeurigheid ver onder de drempel, en dat is de richting waarin het de moeite waard is te bouwen. Deze pagina drukt het getal in balans af omdat dat het getal is dat een classificatiemodel standaard rapporteert, en dat is een uitspraak over software en niet over markten.

Dat de trades die het filter houdt betalen wat de weggegooide zouden hebben betaald. Houdt het model bij voorkeur de grote winnaars, dan wordt het rekenwerk beter en zakt de drempel, en een model dat trades rangschikt op verwachte omvang in plaats van ze op teken te sorteren is een ander en beter voorwerp dan wat hier beprijsd wordt. De pagina beprijst een classificatiemodel omdat dat is wat mensen bouwen, en omdat het nauwkeurigheidscijfer dat het vakgebied aanhaalt alleen daarvoor gedefinieerd is.

Dat een profitfactor berekend over zeven trades een getal is. Het is een verhouding van twee sommen, en één van die sommen heeft één term. Had de ene verliezende trade uit les 63 1,423 gekost in plaats van 0,423, dan was de profitfactor 7,21 geweest, de drempel 87,82 procent en de prijs 16,10 procent, bij dezelfde regel op dezelfde slotkoersen. Over een paar honderd trades komt de verhouding tot rust, maar precies is ze nooit, en de tweede decimaal van elke drempel die eruit volgt is versiering.

Dat 52 procent de juiste maatstaf voor jouw model is. Gu, Kelly en Xiu voorspellen maandrendementen over een dwarsdoorsnede van duizenden aandelen met bijna honderd voorspellers, en dat is een ander probleem dan het beoordelen van setups die je eigen methode al heeft opgeleverd: zij hebben veel meer data en geen toegang tot jouw instapregel, en bij jou is het omgekeerd. Het cijfer staat op deze pagina als toets van de orde van grootte die het beste werk in het vak haalt, en het is geen voorspelling van wat jouw eigen model zal doen.

Dat de configuraties telbaar zijn. Dit is de toegeving van les 64 en een model maakt haar erger in plaats van beter. De hyperparameters die je in een raster hebt getypt zijn telbaar. Het kenmerk dat je hebt gebouwd, geplot, niet mooi vond en wiste is dat niet, en evenmin het doel dat je hebt geherdefinieerd van de richting van de volgende bar naar die van de volgende drie omdat het eerste niet wilde trainen. Elke hertraining op verse data is nog een configuratie, en een schema dat twee jaar lang maandelijks hertraint heeft er stilletjes vierentwintig extra gedraaid.

En de toegeving die het meest kost: deze pagina heeft een model beprijsd en niets gezegd over de vraag of een model ergens om gelijk zou kunnen hebben. Een filter dat trades uit de eerste vijftien minuten weigert omdat je verliezers zich daar ophopen is een regel, het is in één regel te schrijven, en het telt als één enkele configuratie met een lat van 1,645. Wat het rekenwerk op deze pagina bestraft is niet dat je iets van je eigen logboek leert. Het is er veel van leren en het beste houden, en dat is precies wat een model passen is. Les 71 opent de portefeuillemodule met de vraag wat vier regels kopen wat één regel niet koopt, meet de correlatie tussen regels in plaats van haar aan te nemen, en vindt dat de 14,7 maanden die les 67 beprijsde zakken naar 14,1 en niet naar 3,7.

Opgaven

  1. Tel je raster. Neem het laatste model dat je hebt gepast, of het laatste dat je is voorgehouden, en tel het fatsoenlijk: elke hyperparameterwaarde die je hebt geprobeerd, uitvermenigvuldigd, en dat nog eens maal het aantal kenmerkselecties dat je hebt overwogen. Lees de lat af uit de eerste tabel hierboven of reken hem uit het aantal. Tien minuten, en je houdt één getal over, de t die je model moest overtreffen, en dat is vrijwel zeker niet 1,645.
  2. Reken je eigen drempel uit. Neem je laatste tweehonderd trades, tel alles op wat de winnaars opleverden, tel alles op wat de verliezers kostten, en deel het eerste door het tweede. Een half uur, en je houdt één getal over, je profitfactor, waaruit de nauwkeurigheid die een filter moet overtreffen dat getal gedeeld door één plus dat getal is, en het meeste dat een volmaakt filter zou kunnen toevoegen één gedeeld door dat getal min één.
  3. Meet het filter dat je werkelijk zou kunnen bouwen. Knip je logboek in tijdvolgorde doormidden. Kies op de eerste helft één kenmerk waarvoor je in één zin een reden kunt geven en vind de ene drempel erop die je winnaars het best van je verliezers scheidt. Pas die ene drempel ongewijzigd toe op de tweede helft, en tel twee dingen: hoeveel verliezers hij weggooide en hoeveel winnaars hij weggooide. Eén avond, en je houdt één getal over, de verhouding van de eerste telling tot de tweede, die je payoff ratio moet overtreffen voordat het eenvoudigste filter dat je kunt bouwen iets waard is, en die je zou moeten afzetten tegen wat je verwachtte voordat je het logboek doormidden knipte.

Bronnen. 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 de formule van het verwachte maximum waaruit de eerste tabel is berekend, overgenomen uit les 64 en hier toegepast op een hyperparameterraster in plaats van op een parameterraster. Shihao Gu, Bryan Kelly en Dacheng Xiu, „Empirical Asset Pricing via Machine Learning” (The Review of Financial Studies, 2020), voor de meting buiten de steekproef die deze pagina omzet in de 52 procent waartegen elke drempel erop wordt gelezen. Marcos López de Prado, Advances in Financial Machine Learning (Wiley, 2018), voor het betoog dat gewone kruisvalidatie in de financiële wereld informatie laat weglekken en voor de correctie voor meervoudig toetsen waarvan de eerste tabel een klein geval is. Robert D. Arnott, Campbell R. Harvey en Harry Markowitz, „A Backtesting Protocol in the Era of Machine Learning” (The Journal of Financial Data Science, 2019), voor het protocol dat eist dat het aantal pogingen vóór de zoektocht wordt vastgelegd, en dat is de kolom van het blad die les 64 toevoegde en deze pagina inlost.

Gerelateerde lessen
Les 64

De prijs van zoeken

De formule van het verwachte maximum en de lat die een aantal configuraties oplegt.

Les lezen →
Les 63

Backtesting als bewijs

De zeven trades die deze pagina uit elkaar haalt, en de zoektocht die ze opleverde.

Les lezen →
Les 17

Verwachting

De trefkans en de uitbetaling waaruit een profitfactor bestaat.

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 →