Diskussion zum Artikel "Entwicklung eines Roboters in Python und MQL5 (Teil 2): Auswahl, Erstellung und Training von Modellen, Python Custom Tester" - Seite 2

 

Noch erweisen sich Reihenpreise als die besten Chips.

Früher war ich skeptisch, weil sie nicht stationär sind. Aber nach einigen Manipulationen begann ich, auch aus diesen Merkmalen vernünftige Modelle zu extrahieren.

Aus Unwissenheit wird also Wissen, und aus Wissen wird Unwissenheit :)

 
Ivan Butko #:
Gute Motivation, wenn es Ergebnisse gibt!
Und, wie ich feststellte, ist es nicht nur eine Woche, nicht nur ein Monat, sondern die Arbeit eines ganzen Jahres

Ich danke Ihnen sehr! Ja, das motiviert mich sehr! Ich werde weiter recherchieren) Es ist wieder Nacht, ich habe eine Tasse Kaffee und Code-Ideen mit mir)))))

 
Maxim Dmitrievsky #:

Alles in allem erweisen sich die Reihenpreise als die besten Chips.

Früher war ich skeptisch, weil sie nicht stationär sind. Aber nach einigen Manipulationen begann ich, auch aus diesen Merkmalen vernünftige Modelle zu extrahieren.

Aus Unwissenheit wird also Wissen, und aus Wissen wird Unwissenheit :)

Meine Schwiegermutter ist Händlerin mit mehr als 15 Jahren Erfahrung und sagt immer wieder, dass man Chips auf Volumen machen muss))) https://www.mql5.com/de/code/50133

Индикатор Price / Volume
Индикатор Price / Volume
  • www.mql5.com
Одна из простых фич для машинного обучения
 
Yevgeniy Koshtenko #:

Das ist die Art von Dingen, die ich versucht habe, meine Schwiegermutter ist eine Händlerin mit mehr als 15 Jahren Erfahrung, sie sagt immer, wir sollten Chips auf Volumen machen))) https://www.mql5.com/de/code/50133

Ja, es stimmt, dass öfter Volatilität hinzugefügt wird (z.B. std indicator), aber es gibt nicht viel. Oder Inkremente geteilt durch Volatilität.

 

Eugene, durch Ihre Artikel habe ich begonnen, ML in Bezug auf den Handel zu studieren, vielen Dank dafür.

Könnten Sie mir die folgenden Punkte erklären.

Nachdem die Funktion label_data die Daten verarbeitet hat, wird ihr Volumen erheblich reduziert (wir erhalten einen zufälligen Satz von Balken, die die Bedingungen der Funktion erfüllen). Dann durchlaufen die Daten mehrere Funktionen und werden in Trainings- und Testproben unterteilt. Das Modell wird mit der Trainingsstichprobe trainiert. Danach werden die ['labels']-Spalten aus der Teststichprobe entfernt und wir versuchen, ihre Werte vorherzusagen, um das Modell zu schätzen. Gibt es keine Konzeptsubstitution in den Testdaten? Schließlich verwenden wir für die Tests Daten, die die Funktion label_data durchlaufen haben (d. h. eine Reihe von nicht sequentiellen Balken, die im Voraus von einer Funktion ausgewählt wurden, die zukünftige Daten berücksichtigt). Und dann gibt es im Tester den Parameter 10, der, so wie ich es verstehe, dafür verantwortlich sein sollte, wie viele Balken zum Abschluss gebracht werden sollen, aber da wir einen nicht sequentiellen Satz von Balken haben, ist es nicht klar, was wir erhalten.

Daraus ergeben sich folgende Fragen: Wo liege ich falsch? Warum werden nicht alle Balken >= FORWARD für die Tests verwendet? Und wenn wir nicht alle Balken >= FORWARD verwenden, wie können wir dann die für die Vorhersage notwendigen Balken auswählen, ohne die Zukunft zu kennen?

Vielen Dank!

 
Großartige Arbeit, sehr interessant, praktisch und bodenständig. Selten habe ich einen so guten Artikel mit konkreten Beispielen gesehen und nicht nur Theorie ohne Ergebnisse. Vielen Dank für Ihre Arbeit und den Austausch, ich werde diese Serie verfolgen und freue mich darauf.
 
Eric Ruvalcaba #:
Großartige Arbeit, sehr interessant, praktisch und bodenständig. Selten habe ich einen so guten Artikel mit konkreten Beispielen gesehen und nicht nur Theorie ohne Ergebnisse. Vielen Dank für Ihre Arbeit und den Austausch, ich werde diese Serie verfolgen und freue mich darauf.

Herzlichen Dank! Ja, es gibt noch viele Umsetzungen von Ideen, einschließlich der Erweiterung dieses Artikels mit der Übersetzung in ONNX)

 
Gibt es einen besonderen Grund für die Verwendung von RandomForestClassifier für die Merkmalsauswahl und XGBclassifier für die Modellklassifizierung?
 

Kritische Schwachstellen:

  1. Probleme bei der Vermeidung von Datenlecks:
    • Die Funktion augment_data() führt zu schwerwiegenden Problemen mit Datenlecks zwischen den Trainings- und Testmengen
    • Die Erweiterung vermischt Daten aus unterschiedlichen Zeiträumen
  2. Fehler in der Methodik der Leistungsbewertung:
    • Beim Testen des Modells werden die realen Marktbedingungen nicht berücksichtigt.
    • Das Modell wird auf zukünftigen Daten trainiert und auf historischen Daten getestet, was inakzeptabel ist.
  3. Technische Probleme im Code:
    • Die Funktion generate_new_features() erzeugt Merkmale, gibt sie aber nicht zurück (sie gibt die Originaldaten zurück)
    • Die Funktion test_model() verwendet X_test.iloc[i]['close'] , aber 'close' kann nach der Umwandlung der Merkmale fehlen
  4. Inkonsistente Datenverarbeitung:
    • Die Daten werden zweimal auf unterschiedliche Weise beschriftet ( markup_data() und label_data() )
    • Clustering-Ergebnisse ( cluster ) werden beim weiteren Training nicht verwendet
  5. Methodische Probleme bei der Handelsstrategie:
    • Statischer Ausstieg nach 10 Bars anstelle einer adaptiven Strategie
    • Kein Risikomanagement (außer einem einfachen Stop-Loss)
    • Keine Berücksichtigung von Transaktionskosten (außer einfachem Spread)
  6. Ineffektive Validierung:
    • Keine Validierung des Modells auf historischen Daten unter Berücksichtigung der Zeitstruktur (Walk-Forward-Analyse)
    • Kreuzvalidierung wird auf Zeitreihen angewandt, ohne die Spezifität der Zeitreihen zu berücksichtigen

Empfehlungen zur Verbesserung:

  1. Eliminierung von Datenlecks - strikte Trennung der Daten im Zeitverlauf
  2. Implementierung einer angemessenen Walk-forward-Validierung
  3. Durchführung realistischerer Tests unter Berücksichtigung von Abweichungen und Provisionen
  4. Finalisierung der Logik für das Eingeben und Verlassen von Positionen
  5. Verwendung von zeitserienspezifischen Methoden