Diskussion zum Artikel "Winkelanalyse von Preisbewegungen: Ein hybrides Modell zur Prognose von Finanzmärkten" - Seite 2

 

Wieder schrien die Mäuse, stachen und kackten, fraßen aber beharrlich weiter den Kaktus! ;)

Hier ist eine mehr oder weniger fertige Gann-Vorlage für MT4, der Code ist offen.

https://disk.yandex.ru/d/7YhmKzcqttnQnQ

Mit der richtigen Einstellung all dessen, was der TS beschrieben hat, kann man ein paar Stunden im Voraus sehen, dass entweder der Trend oder die Korrektur zu Ende geht. Außerdem kann der Zeitpunkt des Trendendes im Voraus berechnet werden.

Wie man sich richtig aufstellt, kann jeder für sich selbst herausfinden.

P.S. - Gunn hat alles in seinen Werken (Mathematik der Modelle), Sie werden nichts Neues finden oder erfinden, 2x2 wird immer 4 sein. Es ist besser, tiefer in das Studium des Quellenmaterials zu gehen.

Gann_Box_144_test_FULL_NULL_NEN_SQH4-----.mq4
Gann_Box_144_test_FULL_NULL_NEN_SQH4-----.mq4
  • disk.yandex.ru
Посмотреть и скачать с Яндекс Диска
 

Gold

Das Muster bestätigt erneut, dass der Trend nachlässt und es sich lohnt, auf eine Reaktion zu warten.

 
Es gibt keine Absicherung gegen den Fall, dass `copy_rates_range` den Wert `None` zurückgibt. Wenn das Symbol, der Zeitrahmen oder der Verlauf nicht verfügbar sind, gibt `mt5.copy_rates_range` den Wert `None` zurück, und `pd.DataFrame(None)` löst einen wenig hilfreichen Fehler aus.
„shuffle=True“ in `train_test_split` führt zu Datenlecks. Jede Merkmalszeile teilt 14 ihrer 15 `angle_j`-Werte mit der benachbarten Zeile (stark überlappende rollierende Fenster), und die Daten sind zeitlich geordnet. Durch das Mischen werden fast identische Fenster auf Trainings- und Testdatensatz verteilt, sodass die gemeldete Genauigkeit/RMSE viel besser aussieht, als das Modell tatsächlich außerhalb der Stichprobe abschneidet.
Eine „Off-by-one“-Diskrepanz zwischen dem Merkmalsfenster und seiner Kennzeichnung, sowohl in `prepare_features` als auch in der (duplizierten) Logik in `backtest_signals`: `window = filtered_df.iloc[i-lookback:i]` deckt die Balken von `i-lookback` … i-1, doch das Ziel wird aus `filtered_df.iloc[i]['future_direction_24'] / future_change_pct_24` gelesen – was die Bewegung vom Bar i (nicht i-1) bis i+24 beschreibt. Somit sind „current_price“ und jedes aus dem Fenster abgeleitete Merkmal während des gesamten Trainings und Backtests einen Balken hinter dem tatsächlich vorhergesagten Wert verankert.
„predict_future_movement“ erfolgt nicht auf dieselbe Weise. Es verwendet „angular_df.tail(lookback)“ und behandelt den letzten Balken dieses Fensters als „aktuellen Kurs“ für das Live-Signal – doch gemäß Punkt 3 wurde das Modell mit einem „aktuellen Kurs“ trainiert, der einen Balken vor dem tatsächlichen Label-Anker liegt. Live-Prognosen und Trainingslabels werden nicht nach derselben Konvention berechnet.
Mögliche Division durch Null in `create_angular_features`: Wenn `time_range` (`max time` − `min time`) gleich 0 ist (z. B. bei doppelten/fehlerhaften Zeitstempeln), wird `scale_factor` zu `inf`/`nan` und wirkt sich auf jeden Winkel aus.
Die von CatBoostClassifier.predict() zurückgegebene Form – je nach installierter CatBoost-Version kann diese als (n, 1) statt als (n,) zurückgegeben werden. Sie wird ohne Überprüfung der Form direkt in accuracy_score/classification_report eingespeist, daher lohnt es sich, dies anhand der tatsächlich installierten Version zu überprüfen.
Kleinere Anmerkung: Aufrufe im Stil von `figsize=(750/100, 750/200) führen zu nicht runden Zoll-Abmessungen (7,5×3,75, 7,5×6,0, 7,5×5,0) – das ist kein Fehler, sondern lediglich eine ungewöhnliche Art, die Abmessungen einer Abbildung anzugeben.

Dateien: