Maschinelles Lernen als Filter
Lektion 69 hat dieser Seite ein Raster hinterlassen. Sechs Hyperparameter zu je fünf Werten sind 15.625 Konfigurationen, ein Raster, das ein Anfänger bescheiden nennen würde, und nach der Rechnung aus Lektion 64 stellt eine Suche dieser Breite, über 156 Trades beurteilt, 0,318 R je Trade her, bevor der Markt überhaupt etwas getan hat. Das ist der bekannte Einwand gegen maschinelles Lernen im Handel, und es ist der beantwortbare: zähl das Raster, heb die Latte von 1,645 auf 4,507 und sieh nach, ob das Modell darüber kommt. Der Einwand, der sich so nicht beantworten lässt, enthält überhaupt kein Modell. Ein Filter erzeugt keine Trades, er entfernt welche, also kann er dir immer nur die Verlierer zurückgeben, die er erwischt hat, und eine Strategie, die gut aussieht, hat fast keine zu erwischen. Die Gewinnerregel aus Lektion 63 hat sechs Gewinner und einen Verlierer. Ein Filter, der Gewinner ebenso gut behält, wie er Verlierer aussortiert, müsste bei 96,04 Prozent der ungesehenen Trades richtig liegen, um bei dieser Regel gerade eben nichts zu verlieren, und ein perfekter, der den einen Verlierer fängt und sonst nichts anfasst, würde sie um 4,30 Prozent verbessern.
Voraussetzungen: Lektion 64, für die Formel des erwarteten Maximums und die Latte, die eine Anzahl von Konfigurationen setzt, Lektion 63, für die sieben Trades, die diese Seite auseinandernimmt, und Lektion 17, für die beiden Zahlen, aus denen ein Profitfaktor besteht.
Was ein Raster kostet, bevor es einen Kurs gesehen hat
Eine Regel hat Parameter, und Lektion 64 hat sie gezählt. Ein Modell hat Hyperparameter, was dasselbe unter anderem Namen ist, und es hat eine Dimension, die eine Regel nicht hat: welche Merkmale hineingehen. Beides multipliziert sich aus, und die Rechnung, die eine Suche bepreist, kümmert sich nicht darum, was davon was ist. Sie zählt Konfigurationen, und die Zahl steht fest, bevor irgendetwas läuft.
Nimm das Raster, das die Ankündigung hinterlassen hat. Sechs Hyperparameter zu je fünf Werten sind 15.625, und die Einsetzung steht vollständig da, damit nichts davon geglaubt werden muss. Eins geteilt durch 15.625 ist 0,0000640, und der Wert der Standardnormalverteilung, der so viel im oberen Rand lässt, ist 3,83028. Dann sind 15.625 mal e gleich 42.473, eins geteilt durch das ist 0,0000235, und der zugehörige Normalwert ist 4,06963. Gewichtet man die beiden mit 0,4228 und 0,5772, ergibt das 3,96843, und das ist ein t-Wert. Teile durch die Wurzel aus 156, also durch 12,49, und der hergestellte Vorteil ist 0,318 R je Trade. Die Latte, über die eine Suche dieser Breite kommen muss, damit nur fünf Prozent wertloser Suchen sie schlagen, liegt bei 4,507.
Jetzt die Dimension, die niemand zählt. Eine Liste von zwanzig Merkmalen mit der Anweisung, drei bis sechs davon auszuwählen, ist die übliche Form dieser Übung, und die Anweisung liest sich wie eine Vereinfachung. Sie ist eine Suche. Genau vier aus zwanzig zu wählen sind 4.845 verschiedene Modelle, drei bis sechs zu wählen sind 60.249, und die Liste stand fest, bevor du angefangen hast, die Zahl ist also für jeden verfügbar, der sie haben will. Multipliziere die Vier-aus-zwanzig-Zahl mit dem Hyperparameter-Raster, und die Arbeit eines Nachmittags sind 75.703.125 Konfigurationen.
| Was du variiert hast | Konfigurationen | Latte bei fünf Prozent | Hergestelltes R je Trade über 156 Trades |
|---|---|---|---|
| Drei Hyperparameter, je fünf Werte | 125 | 3,346 | 0,209 |
| Vier Hyperparameter, je fünf Werte | 625 | 3,769 | 0,250 |
| Sechs Hyperparameter, je fünf Werte | 15.625 | 4,507 | 0,318 |
| Vier Merkmale aus einer Liste von zwanzig | 4.845 | 4,252 | 0,295 |
| Die letzten beiden zusammen | 75.703.125 | 6,061 | 0,453 |
Die letzte Zeile ist die ehrliche Zahl für einen Nachmittag, und 6,061 ist ein t-Wert, den ein paar hundert Trades nicht hergeben werden, wie gut die Idee auch war. Lies aber die dritte Spalte von oben nach unten, und die Form ist sanfter, als das klingt: von 15.625 Konfigurationen auf 75.703.125 zu gehen ist 4.845-mal so viel Suchen und verschiebt die Latte um 1,554. Die Strafe wächst mit dem Logarithmus der Anzahl, und das schneidet auf die Weise, die niemand erwähnt. Du brauchst kein modisches Modell, um schlimm ausgesetzt zu sein. Vier Hyperparameter und überhaupt keine Merkmalsauswahl liegen schon bei 3,769.
Nimm also an, du machst das alles richtig. Nimm an, du zählst das Raster, kommst über die Latte und hältst ein Modell in der Hand, das deine eigenen Setups tatsächlich besser sortiert als der Zufall. Der Rest dieser Seite handelt davon, ob das etwas wert ist, und er braucht keine Anzahl von Konfigurationen, keine Simulation und keine Annahme über Märkte.
Bau es so auf, wie das Geld tatsächlich läuft. Ein Filter findet keine neuen Trades. Er sitzt auf den Setups, die deine Methode ohnehin erzeugt, und entfernt einige davon, der ehrliche Vergleich ist also der Gesamtgewinn über dieselben ursprünglichen Gelegenheiten und nicht der Gewinn je genommenem Trade. Schreib deine Trefferquote als p und deine Auszahlung als b, beides aus Lektion 17, ein Gewinner zahlt also b und ein Verlierer kostet eins. Der Filter behalte einen Anteil s der Gewinner und weise korrekt einen Anteil t der Verlierer zurück. Je ursprünglichem Trade verzichtet er auf p mal eins minus s mal b, und er spart eins minus p mal t. Er lohnt sich, wenn das Zweite mindestens so groß ist wie das Erste:
(1 − p) t ≥ p (1 − s) b
Teile das auf zwei Weisen, und es sagt zwei verschiedene nützliche Dinge. Teile durch p mal eins minus s, und die Verlierer, die der Filter wegwirft, müssen die Gewinner, die er wegwirft, um mindestens b übertreffen, also um dein Auszahlungsverhältnis — ein Test, den du mit zwei Abzählungen an einem Handelsprotokoll durchführen kannst, ganz ohne Statistik. Teile stattdessen durch eins minus p, und die rechte Seite wird p b durch eins minus p, also Bruttogewinn durch Bruttoverlust, die Größe, die üblicherweise Profitfaktor heißt und der einzige neue Name auf dieser Seite ist. Es sind die beiden Zahlen aus Lektion 17 als eine geschrieben.
Ist das Modell in beide Richtungen gleich gut, sind s und t also dieselbe Zahl a, dann fällt die Bedingung auf eine Schwelle für die Genauigkeit allein zusammen: a muss mindestens der Profitfaktor geteilt durch eins plus den Profitfaktor sein. Umgedreht verdient sich ein Filter mit Genauigkeit a seinen Platz bei jeder Strategie, deren Profitfaktor unter a geteilt durch eins minus a liegt.
Bei 52 Prozent Genauigkeit bei jeder Strategie mit einem Profitfaktor unter 1,08.
Bei 55 Prozent unter 1,22.
Bei 60 Prozent unter 1,50.
Bei 65 Prozent unter 1,86.
Zweiundfünfzig Prozent ist kein Platzhalter. Gu, Kelly und Xiu haben die ganze Familie dieser Modelle außerhalb der Stichprobe an Monatsrenditen über Tausende von Aktien gemessen, und ihr bestes Netz erreichte ein monatliches R-Quadrat außerhalb der Stichprobe von etwa vier Zehntel eines Prozents. Übersetzt in die Sprache dieser Seite: unter einer zweidimensionalen Normalverteilung ist die Chance, dass das Vorzeichen einer Vorhersage zum Vorzeichen des Ergebnisses passt, ein Halb plus dem Arkussinus der Korrelation, geteilt durch pi; die Korrelation ist die Wurzel aus dem R-Quadrat, also 0,0632, und die Genauigkeit ist 52,01 Prozent. Das beste veröffentlichte Ergebnis des Feldes ist ein Filter für Strategien mit einem Profitfaktor unter 1,08.
Fast niemand, der ein Modell auf die eigenen Trades angepasst hat, hat den eigenen Bruttogewinn durch den eigenen Bruttoverlust geteilt und die beiden Zahlen nebeneinandergelegt. Es sind zwei Summen aus einem Handelsprotokoll und eine Division, und darin besteht die ganze Entscheidung.
Das Blatt, das dieses Modul seit Lektion 62 aufbaut, bekommt keine neunte Spalte. Hier wird es eingelöst, alle acht auf einmal, an der einen Regel, der der Kurs seit Lektion 63 folgt.
Das Blatt, eingelöst an einer Regel
Lektion 63 hat 253 Konfigurationen gleitender Durchschnitte über sechzig Schlusskurse durchsucht und einen 2-Bar-Durchschnitt gegen einen 5-Bar-Durchschnitt behalten: sieben Trades, 10,70 je Aktie brutto, 9,84 nach Kosten, gegen 5,68 fürs Halten. Füllt man die acht Spalten aus, liest sich das Blatt so.
Der Satz, aus Lektion 62: geh long, wenn der 2-Bar-Durchschnitt der Schlusskurse über den 5-Bar-Durchschnitt kreuzt, geh flat, wenn er zurückkreuzt, führe zum nächsten Schluss aus.
Das Paar, aus Lektion 63: 4,16 über der Benchmark, gegen 52,5 Prozent strukturloser Suchen, die 4,16 oder mehr zurückgeben.
Die Latte und die Anzahl, aus Lektion 64: 253 Zellen, eine Latte von 3,537, ein t von 3,65, was so lange darüber liegt, bis du eine Mindestzahl an Trades festlegst — dann läuft der Anteil von 0,68 Prozent bei einer Untergrenze von sieben bis 50,48 Prozent bei einer Untergrenze von zwei.
Die vorab festgelegte Zahl der Trades, aus Lektion 65: leer. Die sieben sind die, die zufällig stattfanden.
Der Anteil der Aussetzung, aus Lektion 66: 0,5085, und von den 10,70 brutto lieferte der Markt 2,95.
Die Ausstiegstiefe, aus Lektion 67: leer.
Die Kapazität, aus Lektion 68: ein Durchschnittstrade von 0,9101R sind 1,4055 je Aktie, was bei einem Kurs um 103 herum 136 Basispunkte sind, im Small Cap aus Lektion 68 hält der Trade also 1.390.545 Dollar und die beste Einzelposition ist 618.020.
Die Positionsobergrenze und ihr Prüfintervall, aus Lektion 69: leer.
Drei Leerstellen, und eine zweite Spalte, deren beide Zahlen falsch herum stehen. Das ist das Urteil, und es kommt, bevor das Blatt zur Hälfte gelesen ist. Geh es trotzdem ganz durch, denn die Frage dieser Seite ist nicht, ob die Regel etwas taugt. Sie ist, ob ein Modell sie besser machen könnte, und diese Frage hat auch für eine wertlose Regel eine Antwort.
Die sieben Trades nach Kosten sind 2,577, 1,877, 2,377, 1,377, minus 0,423, 1,177 und 0,877. Sechs Gewinner in Summe 10,262 und ein Verlierer von 0,423, der Profitfaktor ist also 24,26, der durchschnittliche Gewinner 1,1075R, der durchschnittliche Verlierer 0,2739R und das Auszahlungsverhältnis 4,04. Jetzt lass die übrigen Spalten des Blatts arbeiten und sieh zu, was passiert, während eine nach der anderen angewandt wird. Die letzte Zeile der Tabelle unten ist das Nullmodell aus Lektion 63, für diese Seite neu gerechnet: die 59 Bar-zu-Bar-Bewegungen mit Zurücklegen gezogen, 4.000 Reihen aus Startwert 20260903, dieselbe Suche über 253 Zellen auf jeder, bei derselben Untergrenze von sieben Trades, die der Gewinner selbst erfüllte, und der Profitfaktor der jeweils siegreichen Zelle. Sein Zentralwert ist 2,34, und 3,08 Prozent dieser strukturlosen Suchen liefern einen Gewinner mit einem Profitfaktor von 24,26 oder mehr.
| Was abgezogen wurde | Profitfaktor | Genauigkeit, die ein Filter überbieten muss | Das Meiste, was ein perfekter Filter hinzufügen könnte |
|---|---|---|---|
| Nichts | 36,67 | 97,35 % | 2,80 % |
| Kosten, nach der Konvention aus Lektion 63 | 24,26 | 96,04 % | 4,30 % |
| Kosten und der Anteil des Marktes aus Lektion 66 | 14,22 | 93,43 % | 7,57 % |
| Was dieselbe Suche auf nichts zurückgibt, Zentralwert | 2,34 | 70,01 % | 74,91 % |
Die vierte Spalte lohnt das Innehalten, und sie ist eine zweite reine Zahl, die aus derselben Ungleichung fällt. Ein perfekter Filter entfernt jeden Verlierer und behält jeden Gewinner, das Meiste, was er überhaupt hinzufügen kann, ist also der gesamte Bruttoverlust, und als Anteil dessen, was die Strategie schon netto macht, ist das eins geteilt durch den Profitfaktor minus eins. Bei dieser Regel sind das 4,30 Prozent. Nicht 4,30 Prozent, wenn das Modell gut ist: 4,30 Prozent, wenn das Modell fehlerfrei ist, denn es gibt nur einen Verlierer im Datensatz und er ist 0,423 von 9,839 wert.
Lies die beiden mittleren Spalten zusammen, von oben nach unten, und sie laufen aus demselben Grund in entgegengesetzte Richtungen. Während der Profitfaktor in Richtung Wahrheit entleert wird — erst die Kosten, dann der Anteil des Marktes, dann das, was eine Suche derselben Breite auf Daten ohne irgendetwas darin zurückgibt —, fällt die nötige Genauigkeit von 97,35 Prozent auf 70,01, und der Preis steigt von 2,80 Prozent auf 74,91. Die Suche hat den Vorteil hergestellt und in derselben Bewegung den Grund, aus dem kein Modell ihn verbessern kann.
Ein Filter kann dir nur deine Verlierer zurückgeben, und eine gute Strategie hat fast keine.
Deshalb zählt die unterste Zeile mehr, als sie aussieht. Ein Profitfaktor von eins ist eine Strategie mit genau keiner Erwartung, dort liegt die Schwelle bei fünfzig Prozent, und ein Filter mit 52 Prozent lohnt sich wirklich. Rechne es an dreihundert Trades bei einer Auszahlung von zwei durch: hundert Gewinner zu zwei und zweihundert Verlierer zu eins sind null. Behalte 52 der Gewinner und 96 der Verlierer, und du hast 104 minus 96, also 8R über die ursprünglichen dreihundert, oder 0,027 R je Trade. Der Filter verbessert die Strategie nicht. Er ist die ganze Strategie, und sie ist klein. Geh hoch auf einen Profitfaktor von zwei, und derselbe Filter mit 52 Prozent nimmt einer Strategie, die 0,50 macht, 0,22 R je Trade weg.
Addier also deine Gewinner, addier deine Verlierer, teile, und lies die Antwort als die Genauigkeit, die jeder Filter überbieten muss, bevor du ihn baust.
Was das nicht klärt
Dass der Filter ausgewogen ist. Die Genauigkeitsschwelle setzt voraus, dass das Modell Gewinner genau so gut behält, wie es Verlierer aussortiert, und die Ungleichung, aus der sie kommt, setzt nichts dergleichen voraus: sie verlangt nur, dass die Spezifität geteilt durch eins minus die Sensitivität über dem Profitfaktor liegt. Ein Modell, das hart auf das Aussortieren von Verlierern getrimmt ist und dafür hinnimmt, dass es fast jeden Gewinner behält, den es sieht, kann diese Latte bei einer Gesamtgenauigkeit weit unter der Schwelle nehmen, und das ist die Richtung, in die zu bauen sich lohnt. Diese Seite druckt die ausgewogene Zahl, weil es die Zahl ist, die ein Klassifikator von sich aus meldet, was eine Aussage über Software ist und nicht über Märkte.
Dass die Trades, die der Filter behält, dasselbe zahlen wie die, die er wegwirft. Behält das Modell bevorzugt die großen Gewinner, wird die Rechnung besser und die Schwelle fällt, und ein Modell, das Trades nach erwarteter Größe ordnet, statt sie nach Vorzeichen zu sortieren, ist ein anderes und besseres Objekt als das hier bepreiste. Die Seite bepreist einen Klassifikator, weil ein Klassifikator das ist, was gebaut wird, und weil die Genauigkeitszahl, die das Feld zitiert, nur für einen solchen überhaupt definiert ist.
Dass ein an sieben Trades berechneter Profitfaktor eine Zahl ist. Er ist ein Verhältnis zweier Summen, und eine dieser Summen hat einen einzigen Term. Hätte der eine Verlusttrade aus Lektion 63 statt 0,423 eben 1,423 gekostet, wäre der Profitfaktor 7,21, die Schwelle 87,82 Prozent und der Preis 16,10 Prozent, bei derselben Regel auf denselben Schlusskursen. Über ein paar hundert Trades beruhigt sich das Verhältnis, aber genau ist es nie, und die zweite Nachkommastelle jeder daraus berechneten Schwelle ist Dekoration.
Dass 52 Prozent der richtige Vergleichswert für dein Modell sind. Gu, Kelly und Xiu sagen Monatsrenditen über einen Querschnitt von Tausenden von Aktien mit annähernd hundert Prädiktoren voraus, was ein anderes Problem ist als das Benoten von Setups, die deine eigene Methode schon erzeugt hat: sie haben unendlich viel mehr Daten und keinen Zugang zu deiner Einstiegsregel, und bei dir ist es umgekehrt. Die Zahl gehört auf diese Seite als Prüfung der Größenordnung, die die beste Arbeit des Feldes erreicht, und sie ist keine Vorhersage dessen, was dein eigener Klassifikator tun wird.
Dass die Konfigurationen zählbar sind. Das ist das Zugeständnis aus Lektion 64, und ein Modell macht es schlimmer statt besser. Die Hyperparameter, die du in ein Raster getippt hast, sind zählbar. Das Merkmal, das du gebaut, geplottet, nicht gemocht und gelöscht hast, ist es nicht, und ebenso wenig die Zielgröße, die du von der Richtung des nächsten Bars auf die der nächsten drei umdefiniert hast, weil die erste nicht trainieren wollte. Jedes Nachtrainieren auf frischen Daten ist eine weitere Konfiguration, und ein Plan, der zwei Jahre lang monatlich nachtrainiert, hat stillschweigend vierundzwanzig weitere gefahren.
Und das Zugeständnis, das am meisten kostet: diese Seite hat ein Modell bepreist und nichts darüber gesagt, ob eines aus einem Grund richtig liegen könnte. Ein Filter, der Trades aus den ersten fünfzehn Minuten ablehnt, weil sich deine Verlierer dort häufen, ist eine Regel, er lässt sich in einer Zeile schreiben, und er zählt als eine einzige Konfiguration mit einer Latte von 1,645. Was die Rechnung auf dieser Seite bestraft, ist nicht, aus dem eigenen Datensatz etwas zu lernen. Es ist, viele Dinge daraus zu lernen und das beste zu behalten, und genau das ist das Anpassen eines Modells. Lektion 71 eröffnet das Portfolio-Modul mit der Frage, was vier Regeln bringen, die eine nicht bringt, misst die Korrelation zwischen Regeln, statt sie anzunehmen, und findet, dass die 14,7 Monate, die Lektion 67 bepreist hat, auf 14,1 sinken und nicht auf 3,7.
Aufgaben
- Zähle dein Raster. Nimm das letzte Modell, das du angepasst hast, oder das letzte, das dir gezeigt wurde, und zähl es richtig: jeden Hyperparameterwert, den du probiert hast, ausmultipliziert, und das noch einmal mal der Zahl der Merkmalsauswahlen, die du erwogen hast. Lies die Latte aus der ersten Tabelle oben ab oder rechne sie aus der Anzahl aus. Zehn Minuten, und am Ende hältst du eine Zahl, das t, das dein Modell überbieten musste, und das ist mit ziemlicher Sicherheit nicht 1,645.
- Rechne deine eigene Schwelle aus. Nimm deine letzten zweihundert Trades, addiere alles, was die Gewinner gemacht haben, addiere alles, was die Verlierer gekostet haben, und teile das Erste durch das Zweite. Eine halbe Stunde, und am Ende hältst du eine Zahl, deinen Profitfaktor, aus dem die Genauigkeit, die ein Filter überbieten muss, diese Zahl geteilt durch eins plus sie ist, und das Meiste, was ein perfekter Filter hinzufügen könnte, eins geteilt durch diese Zahl minus eins.
- Miss den Filter, den du wirklich bauen könntest. Teile dein Protokoll in zeitlicher Reihenfolge. Wähl in der ersten Hälfte ein Merkmal, für das du in einem Satz einen Grund nennen kannst, und finde die eine Schwelle darauf, die deine Gewinner am besten von deinen Verlierern trennt. Wende genau diese Schwelle unverändert auf die zweite Hälfte an und zähl zwei Dinge: wie viele Verlierer sie weggeworfen hat und wie viele Gewinner. Ein Abend, und am Ende hältst du eine Zahl, das Verhältnis der ersten Zahl zur zweiten, das dein Auszahlungsverhältnis übersteigen muss, bevor der einfachste Filter, den du bauen kannst, überhaupt etwas wert ist, und das du gegen das halten solltest, was du erwartet hattest, bevor du das Protokoll geteilt hast.
Quellen. David H. Bailey, Jonathan M. Borwein, Marcos López de Prado und 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), für die Formel des erwarteten Maximums, aus der die erste Tabelle gerechnet ist, aus Lektion 64 übernommen und hier auf ein Hyperparameterraster statt auf ein Parameterraster angewandt. Shihao Gu, Bryan Kelly und Dacheng Xiu, „Empirical Asset Pricing via Machine Learning“ (The Review of Financial Studies, 2020), für die Messung außerhalb der Stichprobe, die diese Seite in die 52 Prozent umrechnet, gegen die jede Schwelle auf ihr gelesen wird. Marcos López de Prado, Advances in Financial Machine Learning (Wiley, 2018), für das Argument, dass gewöhnliche Kreuzvalidierung in der Finanzwelt Information durchsickern lässt, und für die Korrektur für multiples Testen, von der die erste Tabelle ein kleiner Fall ist. Robert D. Arnott, Campbell R. Harvey und Harry Markowitz, „A Backtesting Protocol in the Era of Machine Learning“ (The Journal of Financial Data Science, 2019), für das Protokoll, das verlangt, die Zahl der Versuche vor der Suche festzuhalten, und das ist die Spalte des Blatts, die Lektion 64 hinzugefügt hat und diese Seite einlöst.
Der Preis des Suchens
Die Formel des erwarteten Maximums und die Latte, die eine Anzahl von Konfigurationen setzt.
Lektion lesen →Backtesting als Beleg
Die sieben Trades, die diese Seite auseinandernimmt, und die Suche, die sie hervorgebracht hat.
Lektion lesen →Erwartung
Die Trefferquote und die Auszahlung, aus denen ein Profitfaktor besteht.
Lektion lesen →Nur zu Bildungszwecken. Der Handel ist mit erheblichem Verlustrisiko verbunden. Keine Finanzberatung. Vergangene Wertentwicklung ist keine Garantie für zukünftige Ergebnisse.
💬 Diskussion (0 Kommentare)
Kommentare werden geladen …
Bereit, mit Signal Pilot zu handeln?
Setze deine Trading-Ausbildung mit professionellen Indikatoren und Werkzeugen zur Marktanalyse in Echtzeit ein.
Zurück zu Signal Pilot →