Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 1175

 
Aleksey Vyazmikin:

Ich habe 3 Klassen, d.h. Baum hat Signal zu kaufen, verkaufen und warten, jetzt bin ich experimentieren mit catbust und vereinfacht die Ziele in einer Klasse komprimiert werden...

Ich weiß nichts über ctree und cnode Klassen, sowie über OOP im Allgemeinen - ich bin nicht sehr gut im Programmieren, so dass man kaum Klassencode ohne einen Programmierer verstehen kann...

Es ist eher eine Frage, wie man sie aufbaut und warum. Sie können sie auch durch Genetik im Optimierer verzweigen, aber es wird nicht wie bei Ihnen aussehen. Vielmehr wird es ähnlich sein wie ein Baum von Algorithmen, der optimiert wird, und sie werden von selbst in Schichten komplexer... wenn das Optimum erreicht ist, werden wir unnötige Algorithmen im Optimierer aussieben. Es ist nur ein Weg, nicht sicher, ob er funktioniert.

 
Maxim Dmitrievsky:

Ja, es ist eher eine Frage, wie man sie baut und warum. Es ist möglich, sie durch Genetik im Optimierer zu verzweigen, aber es wird nicht wie bei Ihnen sein. Vielmehr wird es ähnlich wie ein Baum von Algorithmen, die optimiert wird, und sie Art von Schicht-für-Schicht werden komplexer auf ihre eigenen oder etwas ... wenn das Optimum erreicht ist dann weed out unnötige in Optimierer. Das ist nur eine Option, aber ich weiß nicht, ob sie funktioniert.

Es ist schwer zu diskutieren, wenn man das Wesen des Codes nicht versteht...

Ich habe ein Experiment zur Rotation von Prädikatorgruppen durchgeführt - genau das, was ich gesagt habe - einige Prädiktoren sind gut, um eine Stichprobe aufzuteilen und an die Wurzel zu gehen, verderben aber das Gesamtbild.

Insgesamt habe ich 9 Gruppen - ich habe sie nach der Prädiktorenlogik aufgeteilt, die noch allgemeiner ist als die reine Logik. Erhalten 512 Kombinationen von Gruppen, unten Diagramm zeigt Streuung der Ergebnisse in Abhängigkeit von Kombinationen von Gruppen - für die Auswahl verwendet Metrik "Precision", setzen, dass der andere Tag - keine Veränderung, das Ziel columns_100, Baum 4 Ebenen, iteriert nur 1000 gemacht.

Die Tabelle zeigt das Ergebnis des Satzes mit allen Prädiktoren - 1710 Einheiten, sowie das Maximum von 3511 und das Minimum von 607 Ergebnissen.


Als nächstes habe ich eine Berechnung mit einer Strafe, dh multipliziert die Sperrkennzeichen Gruppe für das finanzielle Ergebnis der Kombination, wenn der Wert Null ist (die Gruppe verwendet wurde), dann fixieren wir ein positives Ergebnis für die Gruppe, aber wenn der Wert nicht Null ist, dann ist die Gruppe gesperrt - multiplizieren Sie das Ergebnis mit -1, dann summieren sich die Werte für jede Gruppe. Die Idee ist, dass die Gruppe mit den meisten Strafen bei Blockierung die schlechteste Gruppe im Aggregat ist, und dort können sie natürlich für weitere Untersuchungen eingeordnet werden.

So sieht die Akkumulation der Indikatoren in der Grafik aus

Natürlich hängt die Form der Kurven vom Kombinationsalgorithmus ab, da alle die gleiche Anzahl von Nullen und Einsen haben, ist das Endergebnis dennoch fair. Und zwar wie folgt - in der nachstehenden Tabelle.



Die Tabelle zeigt, dass die Deaktivierung der Gruppen 1, 8 und 9 eine gute Wirkung auf die Verbesserung des Finanzergebnisses hat.

Schauen wir uns die Kombination des besten finanziellen Ergebnisses an



Und nun zu der Kombination des schlechtesten Ergebnisses



Im Großen und Ganzen hat die Schätzmethode funktioniert - beim besten Ergebnis sind die Gruppen 3, 4, 5 und 7 nicht blockiert und die schlechtesten blockiert, während die Situation im schlechtesten Fall fast spiegelbildlich ist.

Fazit: Dieser Ansatz hat eine Daseinsberechtigung und ist in der Lage, negativ beeinflusste Prädiktorengruppen aggressiv zu identifizieren.

Es gibt zwei Möglichkeiten, wie man vorgehen kann: Entweder man findet den Grund für die schlechten Ergebnisse, indem man die negativen Gruppen aufteilt, oder man teilt die positiven Gruppen auf und versucht herauszufinden, wo die magischen Prädiktoren liegen, die gute Ergebnisse liefern. Andererseits können Sie zwei Wege einschlagen...

Top Ten und schlechteste Kombinationen:

Und wir müssen abwarten, was mit dem anderen Ziel passiert...

Und hier ist ein weiteres Diagramm - es zeigt deutlich: Je mehr gute Entscheidungen (Proc_All ist ein Delta von guten/falschen Entscheidungen im Verhältnis zu allen Entscheidungen (Nullen und Einsen insgesamt)), desto größer ist der Gewinn, vor allem, wenn es sich um den richtigen Einstieg in einen Trade (Proc_1_V02) im Verhältnis zu allen Einträgen handelt.


 
Aleksey Vyazmikin:

Wie verarbeitet man nun diese Prädiktoren in der Produktion, um Signale zu erhalten?

 
Maxim Dmitrievsky:

Wie verarbeitet man nun diese Prädiktoren im Produktionsprozess, um Signale zu erhalten?

Ich habe noch nicht viel Zeit für die Produktion (echter Handel), aber ich plane, Modelle zu paaren und daraus Gerüste zu bauen - die nächste Stufe, aber ich kann noch nicht herausfinden, wie man diesen Prozess automatisiert...

Die Prädiktoren in ihrer endgültigen Form werden in Expert Advisor erhalten, so dass es einfach ist, sie für die Verwendung auszuwählen.
 
Maxim Dmitrievsky:

Ok. viel Glück ), wenn Sie die mt und katbust, schreiben Sie einen Artikel :)

Gerade heute habe ich etwas Gehirnwäsche betrieben... Änderungen am Algorithmus, höhere Berge, steilere Berge... all das ist die Mühe wert, eine einfache Sprache zu verwenden.

Die letzten 3 Monate der Trien, der Rest funktionierte bis Anfang 2018, 15 Min.

Ich frage mich, ob ich nicht besser aufpassen und mich entspannen sollte... obwohl ich noch eine Menge Arbeit vor mir habe. Und ich habe kindische Fehler gemacht, eines der Arrays war ursprünglich falsch herum gedreht (als Serie), und ich habe die ganze Zeit an umgekehrten Fiches geübt, weil ich mir Sorgen machte, dass ich schlecht lerne.

Natürlich ist die Frage der Implementierung des CatBoost-Modells in EA immer noch offen, einerseits ist es möglich, den Code in C++ zu entladen, was ich überhaupt nicht verstehe, andererseits möchte ich Blattdaten in das korrekte Modell bekommen, und zu diesem Zweck brauche ich einen Interpreter, den ich nicht selbst schreiben kann...

Ja, Sie haben Ihren eigenen Ansatz - Modelle funktionieren für relativ kurze Entfernungen, aber warum versuchen Sie es nicht mit realen Bedingungen in der Vergangenheit, d.h. untersuchen Sie die Vergangenheit für 3 Monate und handeln Sie 1 für die Zukunft und fügen Sie dann die Ergebnisse zusammen - Sie könnten ein interessantes Ergebnis erhalten, das sich für die Anwendung eignet.

Mir ist ein lustiger Fehler unterlaufen - ich habe vergessen, ein nicht zu trainierendes Ziel in der Trainingsprobe als "nicht zu verwenden" zu markieren und war ein paar Minuten lang glücklich, als ich die Ergebnisse auswertete :)

 
Aleksey Vyazmikin:

Es ist schwer zu diskutieren, wenn man den Code nicht versteht...

Ich habe ein Experiment zur Rotation von Gruppen von Prädiktoren durchgeführt - genau das, was ich gesagt habe - einige Prädiktoren sind gut, um die Stichprobe aufzuteilen und an die Wurzel zu gehen, verderben aber das Gesamtbild.

Insgesamt habe ich 9 Gruppen - ich habe sie nach der Prädiktorenlogik aufgeteilt, die noch allgemeiner ist als die reine Logik. Erhalten 512 Kombinationen von Gruppen, unten Diagramm zeigt Streuung der finanziellen Ergebnis in Abhängigkeit von Kombinationen von Gruppen - für die Auswahl verwendet Metrik "Precision", setzen, dass der andere Tag - keine Veränderung, das Ziel columns_100, Baum 4 Ebenen, iteriert nur 1000 gemacht.

Die Tabelle zeigt das Ergebnis des Satzes mit allen Prädiktoren - 1710 Einheiten, sowie das Maximum von 3511 und das Minimum von 607 Ergebnissen.


Als nächstes habe ich eine Berechnung mit einer Strafe, dh multipliziert die Sperrkennzeichen Gruppe für das finanzielle Ergebnis der Kombination, wenn der Wert Null ist (die Gruppe verwendet wurde), dann fixieren wir ein positives Ergebnis für die Gruppe, aber wenn der Wert nicht Null ist, dann ist die Gruppe gesperrt - multiplizieren Sie das Ergebnis mit -1, dann summieren sich die Werte für jede Gruppe. Die Idee ist, dass die Gruppe mit den meisten Strafen bei Blockierung die schlechteste Gruppe im Aggregat ist, und dort können sie natürlich für weitere Untersuchungen eingeordnet werden.

So sieht die Akkumulation der Indikatoren in der Grafik aus

Natürlich hängt die Form der Kurven vom Kombinationsalgorithmus ab, da alle die gleiche Anzahl von Nullen und Einsen haben, ist das Endergebnis dennoch fair. Und zwar wie folgt - in der nachstehenden Tabelle.



Die Tabelle zeigt, dass die Deaktivierung der Gruppen 1, 8 und 9 eine gute Wirkung auf die Verbesserung des Finanzergebnisses hat.

Schauen wir uns die Kombination des besten finanziellen Ergebnisses an



Und nun zu der Kombination des schlechtesten Ergebnisses



Im Großen und Ganzen hat die Schätzmethode funktioniert - beim besten Ergebnis sind die Gruppen 3, 4, 5 und 7 nicht blockiert und die schlechtesten blockiert, während die Situation im schlechtesten Fall fast spiegelbildlich ist.

Fazit: Dieser Ansatz hat eine Daseinsberechtigung und ist in der Lage, negativ beeinflusste Prädiktorengruppen aggressiv zu identifizieren.

Es gibt zwei Möglichkeiten, wie man vorgehen kann: Entweder man findet den Grund für die schlechten Ergebnisse, indem man die negativen Gruppen aufteilt, oder man teilt die positiven Gruppen auf und versucht herauszufinden, wo die magischen Prädiktoren liegen, die gute Ergebnisse liefern. Andererseits können Sie zwei Wege einschlagen...

Top Ten und schlechteste Kombinationen:

Und wir müssen abwarten, was mit dem anderen Ziel passiert...

Und hier ist ein weiteres Diagramm - es zeigt deutlich: Je mehr richtige Entscheidungen (Proc_All - Delta der richtigen/falschen Entscheidungen im Verhältnis zu allen Entscheidungen (Nullen und Einsen insgesamt)), desto größer der Gewinn, insbesondere wenn es sich um korrekte Handelseinträge (Proc_1_V02) im Verhältnis zu allen Einträgen handelt.


Es ist eine Hölle, es ist leicht zu lesen, aber der Sinn ist unmöglich zu verstehen - ein Wortspiel oder eine Redewendung ist mir unbegreiflich... ich schließe mich Maksims Vorschlag für einen Artikel an :)

Was die Verknüpfung von EAs mit der Python-Konsole betrifft, so habe ich bereits meine eigene Engine angeboten, die es ermöglicht, Python-Codeblöcke in Echtzeit von MQL aus zu senden und auszuführen, und die sogar im Tester funktioniert.

 
Iwan Negreshniy:

Es ist einfach blechern, es ist leicht zu lesen, aber es ist unmöglich, den Sinn zu erfassen - ein Wortspiel oder eine Redewendung, die ich nicht verstehe... Ich füge Maksims Vorschlag zu dem Artikel hinzu:)

Was die Anbindung von EAs an die Python-Konsole betrifft, so habe ich bereits meine eigene Engine vorgeschlagen, die es ermöglicht, Python-Codeblöcke in Echtzeit von MQL aus zu senden und auszuführen, sogar im Tester.

Und Sie sagen Artikel - wenn ich nicht einmal einen einfachen Gedanken ausdrücken kann, was für ein Artikel ist das dann...

Der Punkt ist, dass bei der Erstellung eines Baums das Gier-Prinzip angewandt wird, das die logischen Beziehungen der Prädiktoren, die zunächst in zwei große Gruppen aufgeteilt sind, verhindert (Sie wissen, wie ein Entscheidungsbaum aufgebaut ist, oder?), so dass das Modell bei weniger Prädiktoren besser ausfallen kann, sowohl aus diesem Grund als auch wegen der Überprüfung von mehr Prädiktorkombinationen für dasselbe Zeitintervall, aber dies in geringerem Umfang.

Stellen Sie eine konkrete Frage, wenn sich Ihnen der Sinn meiner Worte nicht erschließt.

 
Aleksey Vyazmikin:

Und du sagst Artikel - wenn ich nicht einmal einen einfachen Gedanken ausdrücken kann, was für ein Artikel ist es dann...

Der Punkt ist, dass bei der Konstruktion des Baums das Gier-Prinzip angewandt wird, das die Entstehung logischer Verknüpfungen von Prädiktoren verhindert, die zunächst in zwei große Gruppen aufgeteilt werden (Sie wissen, wie ein Entscheidungsbaum aufgebaut ist, oder?), so dass das Modell bei weniger Prädiktoren besser ausfallen kann, sowohl aus diesem Grund als auch wegen der Überprüfung von mehr Prädiktorkombinationen im gleichen Zeitintervall, aber dies in geringerem Umfang.

Stellen Sie eine konkrete Frage, wenn sich Ihnen der Sinn meiner Worte nicht erschließt.

Eine flüchtige Meinungsäußerung in einem Forum und die Veröffentlichung eines Artikels sind zwei verschiedene Gattungen.

In diesem Thread wurde schon so viel diskutiert, aber es gibt keinen Nutzen und keine praktischen Ergebnisse.

Und es hat keinen Sinn, über solche Fragen zu diskutieren, vor allem nicht über so grundlegende Fragen wie die Baumstruktur.

Es ist besser, Artikel und/oder Code zu schreiben - um die Effektivität von MI-Modellen zu vergleichen, Bibliotheken zu verwenden, Expert Advisors zu testen und zu überwachen...

 
Iwan Negreshniy:

Eine kurze Gedankenäußerung in einem Forum und die Veröffentlichung eines Artikels sind zwei verschiedene Genres.

Schauen Sie sich nur diesen Zweig an, wie viel schon diskutiert wurde, aber es gibt keine Wirkung und keine praktischen Ergebnisse.

Und es hat keinen Sinn, über solche Fragen zu diskutieren, vor allem nicht über so grundlegende Fragen wie die Baumstruktur.

Es ist besser, Artikel und/oder Code zu schreiben - um die Effektivität von MI-Modellen und verwendeten Bibliotheken zu vergleichen, um Expert Advisors zu testen und zu überwachen...

Es gibt Artikel auf der MOE, wo alles wissenschaftlich untermauert ist, aber hier können eher oder Anfänger Fragen stellen oder einige Ideen zum Ausprobieren diskutieren. Im Allgemeinen sollte der Artikel geschrieben werden, wenn Sie bereits zuversichtlich in die Ergebnisse ihrer Aktionen sind, ich bin so weit weg von diesem.

 

Gestern habe ich über die verschiedenen Finanzindikatoren bei der Verwendung verschiedener Gruppen von Prädiktoren geschrieben und gesagt, dass es manchmal nicht sinnvoll ist, alles auf einen Haufen zu werfen. In diesem Beitrag habe ich einen Indikator wie den Gewinn verwendet, um die Bedeutung der Gruppen auszuwählen. Heute beschloss ich, eingedenk der Frage von Maxim, die Ergebnisse des Modells mit einer Teststichprobe zu betrachten (zuvor hatte ich nur die Teststichprobe betrachtet), führte dieselben Manipulationen durch und war enttäuscht - die Signifikanz der Gruppen hatte sich auf den Kopf gestellt - wie kommt das, dachte ich... Als ich die Ergebnisse der beiden Stichproben verglich, wurde mir klar, dass das Kriterium des reinen Gewinns nicht geeignet war - ich musste nach anderen Wegen suchen, um das Problem zu lösen.

Da kam mir ein Gedanke: Wie wäre es, wenn ich nicht gierig werde und als gutes Ergebnis die Auswahl derjenigen Modelle betrachte, die insgesamt einen höheren Gewinn als den Durchschnittsgewinn aller 512 Modelle ergeben? Ich beschloss, nach dem besten Indikator zu suchen, der dies leisten konnte. Die Methodik ist einfach, wir verwenden eine Teststichprobe, um den Durchschnittswert des Indexes zu bestimmen, dann überprüfen wir die Variante jedes Modells - wenn sie größer als der Durchschnitt ist, wird sie 1 sein und wenn sie kleiner ist, wird sie 0 sein (ich habe es in Excel gemacht und Zwischenberechnungen können für das Verständnis nützlich sein), dann machen wir das Gleiche mit der Teststichprobe und vergleichen die Ergebnisse beider Stichproben und erhalten so Statistiken, die zeigen, ob der Index zu einer Gruppe gehört (über dem Durchschnitt oder darunter). Danach habe ich mir auch angeschaut, wie viel Gewinn jeder Indikator in der Teststichprobe macht, indem ich die Teststichprobe danach unterteilt habe, ob sie höher als der Durchschnittswert oder niedriger als der Durchschnittswert ist, wobei der durchschnittliche Gewinn erhalten blieb.

Wir haben ein interessantes Ergebnis



Die Tabelle zeigt, dass die Auswahl nach Gewinn (FinRez) den schlechtesten Übereinstimmungsprozentsatz zwischen den beiden Stichproben ergab, und darüber hinaus enthielt diese Gruppe bei der Filterung "unterdurchschnittlich" (die Spalte mit der Zahl "0") mehr gewinnbringende Modelle in der Teststichprobe als die Gruppe, die im Test überdurchschnittliche Ergebnisse zeigte. Wenn man darüber nachdenkt, macht es Sinn, denn das Training basiert auf Klassifizierung, nicht auf Regression, und wenn ich einen festen Take-Profit in der Strategie habe, dann ist der Stop-Loss fließend, was die Ergebnisse selbst bei der gleichen Anzahl korrekt klassifizierter Signale verzerrt. Betrachtet man die anderen Indikatoren, so ist ihre Vorhersagekraft wesentlich höher, d. h., der Trend ist für das Modell im Durchschnitt gleich, egal ob es sich um die Test- oder die Prüfungsstichprobe handelt. Bisher habe ich beschlossen, auf den Indikator Proc_1_V01 zu stoppen - es ist der Prozentsatz der richtig klassifiziert Einheiten des Ziels aller Einheiten in der Stichprobe, zeigt dieser Indikator eine sehr hohe Rate der Erhaltung seiner Beziehung in, sagen wir, zweidimensionalen Raum (über / unter dem Durchschnitt) - 87,3%, die meiner Meinung nach sehr gut ist, plus die Partition der Stichprobe durch seine Methode gibt etwa die gleiche durchschnittliche Gewinn, und sogar leicht über dem Durchschnitt - 1488. Dann stellt sich heraus, dass wir eine bessere Chance auf ein gutes finanzielles Ergebnis haben, wenn wir Modelle nach diesem Indikator auswählen, oder übersehe ich etwas?

Bisher habe ich beschlossen, die Gruppen unter Berücksichtigung nicht FinRez (Gewinn) aber Proc_1_V01, die Methodik bleibt die gleiche und das Ergebnis ist recht attraktiv


Die Signifikanz der Gruppen bewahrte ihre Konsistenz auf der Teststichprobe, sowie auf der Teststichprobe, mit Ausnahme der Gruppe 7, im Gegensatz zu der Situation mit der Definition der Gruppe durch den Indikator - das finanzielle Ergebnis, unten in der Tabelle dargestellt.



Die Schlussfolgerung, die ich hier ziehe, ist, dass die Stabilität der wichtigsten absoluten Werte des Gewinns, die eher zufällig sein kann.

Ich werde auch ein Diagramm hinzufügen, wo Sie sehen können, wie der Gewinn von Proben verteilt ist (reduziert auf 100% relativ zu Test und Prüfung bzw.) - auf der linken Seite sind gefiltert Indikatoren, und auf der rechten Seite genommen werden, ist dies, wenn Sie den durchschnittlichen Wert von Proc_1_V01 durch den Koeffizienten von 1,25 zu erhöhen.

Zum Vergleich: Bei der Auswahl nach Verdienst hat sich die Dichte erhöht, aber wir haben ein dickes Ende von 20 % auf -15 %, was nicht gut ist.

Alles in allem müssen wir an einen Indikator denken, der den Trend am besten definiert.

Kombiniert man jedoch die beiden Indikatoren und fügt Proc_1_V01 eine Filterung nach Gewinnprozentsatz hinzu - >20%, weil es zu viele Verluste gibt, und <80%, weil extreme Werte oft zufällig sind, erhält man ein zufriedenstellenderes Bild.


Grund der Beschwerde: