Diskussion zum Artikel "Winkelanalyse von Preisbewegungen: Ein hybrides Modell zur Prognose von Finanzmärkten"
3 Veröffentlichungen in Folge, ich bin erstaunt, "Narren haben ähnliche Gedanken" :-)
wir machen ungefähr das Gleiche, gleichzeitig und unabhängig voneinander.
ähnliche Zankereien mit Ecken, aber nur das Pferd vor dem Wagen (das einzige, was vorhergesagt wird, ist persönliche Balance, Zitate nicht egal):
Ich werde nicht Screenshot über Gan, aber meiner Meinung nach - alles ist nicht schlecht, da und dort Winkel=typische Volatilität der natürlichen Zyklen.
intuitiv, durch persönliche Erfahrung und mit dem, was zur Hand ist, Gan abgeleitet, was er abgeleitet. aber objektiver als MACD :-)
Eine weitere Frage, wenn Sie sie beantworten können.
Beim Hochladen der Ergebnisse in ONNX und der Implementierung des EA ist ein Problem aufgetreten. Beim Übertragen der Daten mit der Dimension {1,31} in das erste Klassifikationsmodell gibt es keine Probleme, ich erhalte die Werte
2025.04.22 19:47:28.268 test_gann (ORDIUSDT,M5) directionUpDn = 1 directionStrength=0.44935011863708496
Wenn ich jedoch die gleichen Daten an das zweite Modell übergebe, erhalte ich immer wieder folgende Fehlermeldung: ONNX: parameter is empty, inspect code '° :àh½5E' (705:10). Keiner der übergebenen Parameter ist 0.
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 0, input_matrix[0][i] = -12.92599868774414
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 1, input_matrix[0][i] = -12.92599868774414
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 2, input_matrix[0][i] = -42.55295181274414
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 3, input_matrix[0][i] = 72.71257781982422
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 4, input_matrix[0][i] = 74.29901123046875
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 5, input_matrix[0][i] = -61.42539596557617
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 6, input_matrix[0][i] = 56.164878845214844
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 7, input_matrix[0][i] = -80.11347198486328
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 8, input_matrix[0][i] = 79.91580200195312
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 9, input_matrix[0][i] = -48.93017578125
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 10, input_matrix[0][i] = 80.48663330078125
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 11, input_matrix[0][i] = -79.71015930175781
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 12, input_matrix[0][i] = -45.92404556274414
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 13, input_matrix[0][i] = -82.36412048339844
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 14, input_matrix[0][i] = -56.164878845214844
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 15, input_matrix[0][i] = -10.630552291870117
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 16, input_matrix[0][i] = 62.323272705078125
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 17, input_matrix[0][i] = 13.0
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 18, input_matrix[0][i] = 10.0
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 19, input_matrix[0][i] = -12.92599868774414
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 20, input_matrix[0][i] = -61.48434829711914
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 21, input_matrix[0][i] = -36.735313415527344
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 22, input_matrix[0][i] = -23.80649185180664
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 23, input_matrix[0][i] = 0.3333333432674408
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 24, input_matrix[0][i] = 6.955999851226807
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 25, input_matrix[0][i] = 0.029581977054476738
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 26, input_matrix[0][i] = -0.5281187295913696
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 27, input_matrix[0][i] = 0.4025301933288574
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 28, input_matrix[0][i] = 420.0
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 29, input_matrix[0][i] = 641.6666870117188
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 30, input_matrix[0][i] = 0.6545454263687134
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) ONNX: Parameter ist leer, Prüfcode '° :àh½5E' (705:10)
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) Ausführungsfehler: 5805
Vielleicht können Sie mir bei dem Fehler helfen (die Weiten des Internets haben nicht geholfen)
Veröffentlichter Artikel Angular analysis of price movements: a hybrid model for forecasting financial markets:
Autor: Yevgeniy Koshtenko
Metriken für Balken zurück = 60, vorwärts = 30
Zug-Genauigkeit: 0.9200 | Test-Genauigkeit: 0.8713 | GAP: 0.0486
Zug F1-Ergebnis: 0.9187 | Test F1-Ergebnis: 0.8682 | GAP: 0.0505
Bei kurzen Distanzen taugt CatBoost nichts, das Modell ist übertrainiert
Hallo Yevgeniy ,
sehr gute und interessante Arbeit. Herzlichen Glückwunsch!
Darf ich Sie fragen, ob das Backtesting mit dem gesamten Datensatz durchgeführt wurde? Ich habe den Eindruck, dass auch der Trainingsdatensatz einbezogen wurde, oder täusche ich mich?
Achten Sie bitte auf die Details.
Der Zeitrahmen des Tests war 4 Monate, grob gerechnet 161280 Sekunden. Die Gesamtzahl der Trades betrug mehr als 17500, d.h. die durchschnittliche Handelsdauer beträgt 9 Sekunden. Betrachten Sie die mögliche durchschnittliche Bewegung des EURUSD in 9 Sekunden. Es ist kein Geld zu verdienen. Das Modell sagt größtenteils den letzten Preis voraus, genau wie jedes KI-Modell, das Preisreihen als Input verwendet. KI-Modelle konvergieren sehr schlecht bei Preisreihen, so auch dieses Modell.
Achten Sie bitte auf die Details.
Der Zeitrahmen des Tests betrug 4 Monate, grob berechnet 161280 Sekunden. Insgesamt wurden mehr als 17500 Trades getätigt, so dass die durchschnittliche Handelsdauer 9 Sekunden beträgt. Betrachten Sie die mögliche durchschnittliche Bewegung des EURUSD in 9 Sekunden. Es ist kein Geld zu verdienen. Das Modell sagt größtenteils den letzten Preis voraus, genau wie jedes KI-Modell, das Preisreihen als Input verwendet. KI-Modelle konvergieren sehr schlecht bei Preisreihen, so auch dieses Modell.
Metrik für Reck zurück = 60, vorwärts = 30
Zug-Genauigkeit: 0,9200 | Test-Genauigkeit: 0,8713 | GAP: 0,0486
Zug F1-Ergebnis: 0.9187 | Test F1-Ergebnis: 0.8682 | GAP: 0.0505
Bei kurzen Distanzen taugt CatBoost nichts, das Modell ist übertrainiert
Hallo Aliaksandr
das Problem mit diesem Code ist die Verwendung des
shuffle=True
Argument im train_test_split-Aufruf.
Wenn du es in
shuffle=False
ändern, werden Sie einen enormen Leistungsabfall feststellen. Das liegt daran, dass, auch wenn die Testmenge und die Trainingsmenge im Prinzip aufgeteilt und voneinander getrennt sind, die Aufteilung sehr fein ist und es daher viele sehr ähnliche X-"Werte" zwischen den beiden Mengen gibt. Tatsächlich besteht zwischen jedem X[i] und X[i+1] nur ein Unterschied von 1 Balken, was die Trainingsmenge und die Testmenge in der Praxis sehr ähnlich macht. Daher sind die hervorragenden Ergebnisse, die wir (mit shuffle=True) sehen, im Wesentlichen auf eine Überanpassung zurückzuführen. Entfernt man den Shuffle, besteht die Testmenge aus einer bestimmten Anzahl zusammenhängender Balken (den jüngsten), und der CatBoost-Klassifikator wird darin keine guten Vorhersagen treffen, während umgekehrt die Vorhersage in der Trainingsmenge sehr gut sein kann. Ein klares Zeichen für Overfitting. Dies tritt selbst bei einem sehr kleinen Anteil von Balken in der (nicht gemischten) Testmenge auf, so dass die Leistungsverschlechterung nicht durch eine Änderung der Marktbedingungen erklärt werden kann.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.

Neuer Artikel Winkelanalyse von Preisbewegungen: Ein hybrides Modell zur Prognose von Finanzmärkten :
Tausende von Kerzen werden jeden Tag auf den Charts von Währungspaaren, Aktien und Futures geboren. Sie bilden Muster, bilden Trends und schaffen Widerstände und Unterstützungen. Doch hinter diesen vertrauten Bildern verbirgt sich ein mathematisches Gebilde, das wir nur selten wahrnehmen, nämlich die Winkel zwischen aufeinanderfolgenden Preispunkten.
Werfen Sie einen Blick auf das übliche EURUSD-Chart. Was können Sie sehen? Linien und Bars? Stellen Sie sich nun vor, dass jedes Segment zwischen zwei aufeinanderfolgenden Punkten einen bestimmten Winkel mit der horizontalen Achse bildet. Dieser Winkel hat einen exakten mathematischen Wert. Ein positiver Winkel bedeutet eine Aufwärtsbewegung, ein negativer Winkel eine Abwärtsbewegung. Je größer der Winkel ist, desto steiler ist die Preisbewegung.
Klingt einfach? Doch hinter dieser Einfachheit verbirgt sich eine erstaunliche Tiefe. Denn die Winkel sind nicht gleich. Sie bilden ihr eigenes Muster, ihre eigene Melodie. Und diese Melodie enthält, wie sich herausstellt, den Schlüssel zur künftigen Marktbewegung.
Autor: Yevgeniy Koshtenko