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

 

In der OnnxTypeInfo-Hilfe fehlen Erläuterungen zum dimensions[]-Feld. Es wäre schön, die Bedeutung dieses Arrays zumindest am Beispiel des ONNX.Price.Prediction-Projekts zu erklären, wo (MT5 Version 3621) es sich so darstellt:

   OnnxTypeInfo otype;
   OnnxGetInputTypeInfo(handle, 0, otype);
   Print(otype.type == ONNX_TYPE_TENSOR);               // true
   Print(otype.element_type == ONNX_DATA_TYPE_FLOAT);   // true
   ArrayPrint(otype.dimensions);                        // -1 -1 4
   OnnxGetOutputTypeInfo(handle, 0, otype);
   Print(otype.type == ONNX_TYPE_TENSOR);               // true
   Print(otype.element_type == ONNX_DATA_TYPE_FLOAT);   // true  
   ArrayPrint(otype.dimensions);                        // -1 1
 
Bohdan Suvorov #:
Und hier ist meine Implementierung des EA auf meinen eigenen Neuronen

Ich frage mich, was für eine Art von Bibliothek das ist?

#import "markettrader.dll"
  void AlertT(string &msg,int len);
 
Aleksey Nikolayev #:

In der OnnxTypeInfo-Hilfe fehlen Erläuterungen zum dimensions[]-Feld. Es wäre schön, die Bedeutung dieses Arrays zumindest am Beispiel des ONNX.Price.Prediction-Projekts zu erklären, wo (MT5 Version 3621) es sich so darstellt:

In Python ausgedrückt, ist dies die Form des Objekts.

 
Rashid Umarov #:

In Python ausgedrückt, ist dies die Form des Objekts.

Negative Zahlen und die Tatsache, dass die Länge des Arrays um eine Einheit größer ist als die Anzahl der Dimensionen der Parameter, sind dann verwirrend.

Außerdem wird die Form der Parameter im Skript festgelegt und nicht aus den Modelleigenschaften übernommen. Ist dies ein Fehler oder eine Funktion?

 
Aleksey Nikolayev #:

Dann sind negative Zahlen und die Tatsache, dass die Länge des Feldes um eine Einheit größer ist als die Anzahl der Parametermessungen, verwirrend.

Außerdem wird die Form für die Parameter im Skript festgelegt und nicht aus den Modelleigenschaften übernommen. Ist dies ein Fehler oder eine Funktion?

Ja, ich habe die negativen Werte vergessen. Ich werde das überprüfen.

 

Hallo zusammen!

Ich schaffe es, mit einigem Erfolg im manuellen Handelsmodus zu handeln, würde aber gerne den Prozess noch automatisieren. Da ich darüber nachdenke, habe ich beschlossen, mich zum Thema maschinelles Lernen zu informieren. Wer nutzt welche Modelle und mit welchem Erfolg? Ich sehe das Problem folgendermaßen:

Der Grundgedanke ist, dass nicht die Richtung des Trends vorhergesagt werden muss, sondern die drei Punkte: kaufen, verkaufen und warten. Das heißt, 1 (kaufen), -1 (verkaufen), 0 (das aktuelle Geschäft halten, wenn es eines gibt, oder nichts tun, wenn es keine Geschäfte gibt). Es ist wünschenswert, mit Zeitreihen über Minuten zu arbeiten, was ich noch nicht herausgefunden habe. Es ist wichtig, dass die Zeitreihe für eine gewisse Anzahl von vergangenen Balken berücksichtigt wird, damit die Indikatoren in der Historie berücksichtigt werden, sonst wird ihre Dynamik nicht klar. Ich habe etwa 30 von ihnen, es ist wahrscheinlich schwierig, sie im Kopf zu behalten, aber trotzdem schaffe ich es irgendwie, mit meinen Händen zu handeln.

Soweit ich weiß, gibt es beim maschinellen Lernen Klassifizierungsaufgaben, z. B. die Frage, ob der Trend nach oben oder nach unten geht, oder die Vorhersage eines bestimmten Werts, z. B. dass der Kurs mit einem solchen Fehler hier liegen wird. Aber auf den Finanzmärkten ist die Aufgabe etwas anders: Maximierung des Gewinns bei gleichzeitiger Minimierung des Drawdowns. Und ich habe diese Art von Modellen des kleinen Lernens noch nicht gesehen.

Das heißt, mehr Gewinn, wenn seine Größe für jeden möglichen Handel maximiert wird und Verluste minimiert werden, hohe Genauigkeit beim Einstieg und Ausstieg aus einem Handel:

Gewinn = positive Abschlüsse - verlorene Abschlüsse, unter Berücksichtigung des Spreads,

wobei die Summe der positiven Geschäfte gegen das Maximum und die Summe der verlorenen Geschäfte gegen Null tendieren sollte. Dann tendiert der Gewinn per Definition zum Maximum, wenn alle anderen Dinge gleich sind (z.B. die Losgröße).

Das heißt, meiner Meinung nach sollte es ein solches Modell geben, dann werden die Inputs und Outputs genauer sein.

 
Aleksey Nikolayev #:

Dann sind negative Zahlen und die Tatsache, dass die Länge des Feldes um eine Einheit größer ist als die Anzahl der Parametermessungen, verwirrend.

Außerdem wird die Form für die Parameter im Skript festgelegt und nicht aus den Modelleigenschaften übernommen. Ist dies ein Fehler oder eine Funktion?

Ein negativer Wert der Dimension bedeutet, dass diese Dimension nicht fest ist und durch einen externen Parameter festgelegt wird. Daher sollte das Skript die Dimensionalität explizit angeben.

 

Es ist klar, dass das Beispiel der Verwendung des ONNX-Modells in MQL5 nur eine Veranschaulichung ist und nicht mehr. Dennoch möchte ich die Aufmerksamkeit auf einen sehr wichtigen Fehler lenken. Beim maschinellen Lernen ist die erste Stufe die Vorverarbeitung. Dazu gehören viele Dinge, von der trivialen Normalisierung bis zur Dimensionalitätsreduktion und anderen technischen Tricks. Die Hauptregel jeder Prädiktor- und Zieltransformation in dieser Phase ist, dass alle Transformationsparameter (wie Mittelwert, Median, Sd, Mad usw.) auf der Trainingsmenge berechnet werden. Der Testsatz und die neuen Daten werden mit den Parametern verarbeitet, die für den Trainingssatz ermittelt wurden.

Im Beispiel war es also notwendig, Mittelwert und Sd auf der Trainingsmenge zu berechnen, diese Daten an den Teil zu übergeben, in dem das Prädikat erstellt wird, und die neuen Daten mit diesen Parametern zu verarbeiten. Danach wird denormalisiert und die realen Werte des vorhergesagten Preises werden ermittelt. Diese Reihenfolge ist wichtig.

Es ist klar, dass niemand reale Preise in den Input des Modells einspeist, aber das ist schon etwas Besonderes.

Viel Erfolg!

 
Slava #:

Ein negativer Dimensionswert bedeutet, dass diese Dimension nicht festgelegt ist und über einen externen Parameter eingestellt wird. Daher muss das Skript die Dimensionalität explizit angeben

Danke, das ist jetzt klarer.

 
Elvin Nasirov #:

Soweit ich weiß, gibt es beim maschinellen Lernen Klassifizierungsaufgaben, z. B. die Frage, ob der Trend nach oben oder nach unten geht, oder die Vorhersage eines bestimmten Wertes, z. B. dass der Kurs mit einem bestimmten Fehler hier liegen wird. Auf den Finanzmärkten ist die Aufgabe jedoch eine etwas andere: Maximierung der Gewinne bei gleichzeitiger Minimierung der Verluste. Und diese Art von Raspberry-Lernmodellen habe ich noch nicht gesehen.

Dieses Problem wird durch die Verwendung einer geeigneten Verlustfunktion beim Training von MO-Modellen gelöst. Es gibt zwei Probleme, die damit verbunden sind. Erstens ein technisches: Die Standard-Verlustfunktionen in MO-Paketen haben nur indirekt mit der Gewinnmaximierung zu tun, was dazu führt, dass man eigene Funktionen erstellen muss. Dies ist ziemlich schwierig - man muss die MO-Pakete auf Code-Ebene gut verstehen. Wenn dieses Problem gelöst ist, kann es ein zweites, mathematisches Problem geben, bei dem die benutzerdefinierte Verlustfunktion schlecht für das Modelltraining ist.

Wenn jemand ein solch schwieriges Problem löst, ist es unwahrscheinlich, dass er die Lösung mit anderen teilt.