Diskussion zum Artikel "Algorithmische Handelsstrategien: KI und ihr Weg zu den goldenen Zinnen"

 

Neuer Artikel Algorithmische Handelsstrategien: KI und ihr Weg zu den goldenen Zinnen :

In diesem Artikel wird ein Ansatz zur Erstellung von Handelsstrategien für Gold mithilfe von maschinellem Lernen vorgestellt. Betrachtet man den vorgeschlagenen Ansatz zur Analyse und Prognose von Zeitreihen aus verschiedenen Blickwinkeln, so lassen sich seine Vor- und Nachteile im Vergleich zu anderen Methoden zur Erstellung von Handelssystemen, die ausschließlich auf der Analyse und Prognose von Finanzzeitreihen beruhen, feststellen.

Die Entwicklung des Verständnisses der Fähigkeiten von Methoden des maschinellen Lernens im Handel hat zur Entwicklung verschiedener Algorithmen geführt. Sie sind gleich gut in der gleichen Aufgabe, aber grundlegend verschieden. In diesem Artikel wird erneut ein unidirektionales Handelssystem für Gold betrachtet, allerdings unter Verwendung eines Clustering-Algorithmus.

  • Im vorangegangenen Artikel wurden zwei Algorithmen zur kausalen Schlussfolgerung beschrieben, mit denen eine ähnliche Trendstrategie für Gold entwickelt werden kann.
  • In dem Artikel über das Clustering von Zeitreihen wurden verschiedene Möglichkeiten des Clustering bei Handelsaufgaben erörtert.
  • Die Entwicklung einer Strategie zur Umkehrung des Mittelwerts mit Hilfe eines Clustering-Algorithmus wurde der Öffentlichkeit bereits vorgestellt.
  • Die Entwicklung eines auf Clustering basierenden Trendhandelssystems hat ebenfalls die Möglichkeiten dieses Ansatzes aufgezeigt.

Wenn man diesen wichtigen Ansatz zur Analyse und Prognose von Zeitreihen aus verschiedenen Blickwinkeln betrachtet, kann man seine Vor- und Nachteile im Vergleich zu anderen Methoden zur Erstellung von Handelssystemen, die ausschließlich auf der Analyse und Prognose von Finanzzeitreihen beruhen, bestimmen. In einigen Fällen sind diese Algorithmen sehr effektiv und übertreffen die klassischen Ansätze sowohl in Bezug auf die Geschwindigkeit der Erstellung als auch auf die Qualität der resultierenden Handelssysteme.

In diesem Artikel konzentrieren wir uns auf den unidirektionalen Handel, bei dem der Algorithmus nur kauft oder verkauft. Als Basisalgorithmen werden CatBoost- und K-Means-Algorithmen verwendet. CatBoost ist ein Basismodell, das die Funktionen eines binären Klassifizierers für die Klassifizierung von Handelsgeschäften übernimmt. K-Means wird hingegen in der Vorverarbeitungsphase zur Bestimmung der Marktarten verwendet.


Autor: dmitrievsky

[Gelöscht]  

Nachdem ich den Artikel gelesen hatte, kam mir die Idee, mit dem Clustering-Prozess selbst zu spielen.

Ich habe eine Variante geschrieben, die das Clustering in einem gleitenden Fenster statt auf dem gesamten Datensatz durchführt. Dies kann die Partitionierung von Clustern unter Berücksichtigung der zeitlichen Struktur von BP verbessern.

def sliding_window_clustering(dataset, n_clusters: int, window_size=200) -> pd.DataFrame:
    import numpy as np
    
    data = dataset[(dataset.index < hyper_params['forward']) & (dataset.index > hyper_params['backward'])].copy()
    meta_X = data.loc[:, data.columns.str.contains('meta_feature')]
    
    # Zuerst erstellen wir globale Referenzschwerpunkte.
    global_kmeans = KMeans(n_clusters=n_clusters).fit(meta_X)
    global_centroids = global_kmeans.cluster_centers_
    
    clusters = np.zeros(len(data))
    
    # Clustering in einem gleitenden Fenster anwenden
    for i in range(0, len(data) - window_size + 1, window_size):
        window_data = meta_X.iloc[i:i+window_size]
        
        # KMeans in das aktuelle Fenster einlernen
        local_kmeans = KMeans(n_clusters=n_clusters).fit(window_data)
        local_centroids = local_kmeans.cluster_centers_
        
        # Anpassen der lokalen Zentren an die globalen Zentren
        # um die Konsistenz der Cluster-Labels zu gewährleisten
        centroid_mapping = {}
        for local_idx in range(n_clusters):
            # Suche nach dem nächstgelegenen globalen Schwerpunkt zu diesem lokalen Schwerpunkt
            distances = np.linalg.norm(local_centroids[local_idx] - global_centroids, axis=1)
            global_idx = np.argmin(distances)
            centroid_mapping[local_idx] = global_idx + 1  +1, um mit der Nummerierung bei 1 zu beginnen
        
        # Die Beschriftungen für das aktuelle Fenster abrufen
        local_labels = local_kmeans.predict(window_data)
        
        # Lokale Bezeichnungen in konsistente globale Bezeichnungen umwandeln
        for j in range(window_size):
            if i+j < len(clusters):  # Prüfung auf Überschreitung der Grenzen
                clusters[i+j] = centroid_mapping[local_labels[j]]
    
    data['clusters'] = clusters
    return data

Fügen Sie diese Funktion in den Code ein und ersetzen Sie clustering durch sliding_window_clustering.

Es scheint die Ergebnisse zu verbessern.

Dennoch ist es manchmal nützlich, Artikel zu schreiben.

 

Vielen Dank für den Artikel Dmitrievsky. Es sieht so aus, als ob der hochgeladene EA und seine Include-Datei nicht miteinander übereinstimmen. Es bezieht sich auf die mpq-Datei im Ordner "Trend Following", aber die Beispieldateien waren in "Mean Reversion".
Und die Funktion get_features in der "kausalen eine Richtung.py" sind nicht das gleiche wie das, was in dem Artikel erscheint. Außerdem ist die mqh-Datei, die von "causal one direction.py" beim Exportieren von .onnx erzeugt wird , nicht dieselbe wie die in MQL5_files.zip angebotene.

Ich wäre Ihnen sehr dankbar, wenn Sie die notwendige Klarstellung vornehmen könnten.

Paul


Maxim Dmitrievsky
Maxim Dmitrievsky
  • 2025.04.16
  • www.mql5.com
Профиль трейдера
[Gelöscht]  
Sun Paul #:

Vielen Dank für den Artikel Dmitrievsky. Es sieht so aus, als ob der hochgeladene EA und seine Include-Datei nicht miteinander übereinstimmen. Es bezieht sich auf die mpq-Datei im Ordner "Trend Following", aber die Beispieldateien waren in "Mean Reversion".
Und die Funktion get_features in der "kausalen eine Richtung.py" sind nicht das gleiche wie das, was in dem Artikel erscheint. Außerdem ist die mqh-Datei, die von "causal one direction.py" beim Exportieren von .onnx erzeugt wird , nicht die gleiche wie die in MQL5_files.zip angebotene.

Ich wäre Ihnen sehr dankbar, wenn Sie die notwendige Klarstellung vornehmen könnten.

Paul

Danke, ich werde das überprüfen und neu hochladen, vielleicht habe ich einige Dateien verwechselt.
[Gelöscht]  

Die Archive wurden aktualisiert und eine neue Clustermethode hinzugefügt.

Jetzt stimmen alle Pfade und Funktionen überein.

Dateien:
Python_files.zip  548 kb
MQL5_files.zip  104 kb
 
Ich denke, es lohnt sich, die Parameteraufzählung RandomisedSearchCV für das CatBoost-Modell hinzuzufügen, um die besten Parameter auszuwählen. Und eine Kreuzvalidierung würde auch nicht schaden. All dies verbessert die Genauigkeit des Modells.
 
Maxim Dmitrievsky #:

Die Archive wurden aktualisiert und eine neue Clustermethode hinzugefügt.

Jetzt stimmen alle Pfade und Funktionen überein.

Diese Dateien in den Artikel hochgeladen

[Gelöscht]  
sportoman CatBoost-Modell hinzufügen, um die besten Parameter auszuwählen. Auch eine Kreuzvalidierung könnte nicht schaden. All dies verbessert die Genauigkeit des Modells.
Sie erhalten Zufälligkeit multipliziert mit Zufälligkeit. Es wird schwer sein, das zu reproduzieren, denn dann muss man die Saat überall korrigieren.
In der Regel reichen ein paar Nachschulungen in einer Schleife aus, um die Strategie zu bewerten.
 
So haben Sie R2 ist ein modifizierter Index, dessen Effizienz auf dem Gewinn in Pips basiert. Was ist mit dem Drawdown und anderen Leistungsindikatoren? Wenn wir ein Modell erhalten, das mehr als 90 % beim Training und mindestens 85 % beim Test erzielt, dann wird Ihr Index beeindruckende Zahlen liefern. Egal, wie oft ich den Tester auf MT5 laufen lasse, ich habe noch nie einen Gewinn in der Historie erhalten. Das Depot ist aufgebraucht. Dies ist trotz der Tatsache, dass Ihr Tester auf Python gibt 0,97-0,98
[Gelöscht]  
sportoman #:
So haben Sie R2 ist ein modifizierter Index, dessen Effizienz auf dem Gewinn in Pips basiert. Was ist mit dem Drawdown und anderen Leistungsindikatoren? Wenn wir ein Modell erhalten, das mehr als 90 % beim Training und mindestens 85 % beim Test erzielt, dann wird Ihr Index beeindruckende Zahlen liefern. Egal, wie oft ich den Tester auf MT5 laufen lasse, ich habe noch nie einen Gewinn in der Historie erhalten. Das Depot ist aufgebraucht. Dies ist trotz der Tatsache, dass Ihr Tester auf Python gibt 0,97-0,98

Ich verstehe nicht, was das mit CV zu tun hat.

Alle diese Strategien haben eine geringe Beweiskraft, weil sie nur auf der Geschichte der nicht-stationären Kurse basieren. Aber man kann Trends aufspüren.

Jede doppelte Überprüfung der Historie erhöht nicht die Wahrscheinlichkeit, dass sich die Trends ändern. Das heißt, man kann auf der Grundlage der Vergangenheit nichts über die Zukunft beweisen, man kann nur abschätzen, wie gut das Modell auf der Grundlage der verfügbaren Daten verallgemeinert. Hierfür gibt es einen Testzeitraum.

Falls bereits eine neue effiziente Methode zum Testen von Modellen für nicht-stationäre Reihen erfunden wurde, lassen Sie es mich bitte wissen :).
[Gelöscht]  
Es gibt auch einen Artikel über Mean-Reversion-Strategien. Dort gehen wir von der stärkeren Annahme aus, dass eine Zeitreihe fast immer zum Mittelwert zurückkehrt. Im Gegensatz zu Trends, die sich ändern.