KNN-adaptive parametrisierte Trendverfolgungsstrategie

MA KNN SMA
Erstellungsdatum: 2024-11-29 10:54:49 zuletzt geändert: 2024-11-29 10:54:49
Kopie: 0 Klicks: 517
1
konzentrieren Sie sich auf
1617
Anhänger

KNN-adaptive parametrisierte Trendverfolgungsstrategie

Überblick

Die Strategie ist ein auf dem Machine Learning Algorithmus K Near Neighborhood (KNN) basierendes, selbst adaptiertes, parametrisches Trend-Tracking-System. Das System passt die Trend-Tracking-Parameter dynamisch an die Trend-Tracking-Parameter des KNN-Algorithmus an und erzeugt Handelssignale in Kombination mit Moving Averages. Das System ist in der Lage, die Strategie-Parameter automatisch an die Veränderungen der Marktumgebung anzupassen, um die Anpassungsfähigkeit und Stabilität der Strategie zu verbessern.

Strategieprinzip

Die Kernprinzipien der Strategie sind die Analyse historischer Preisdaten mit Hilfe von KNN-Algorithmen, um die Preisentwicklung durch die Berechnung der Ähnlichkeit des aktuellen Marktzustands mit den historischen Daten vorherzusagen. Die konkreten Implementierungsschritte sind:

  1. Einstellung der Beobachtungsfenstergröße und der K-Werte, um historische Preisdaten zu sammeln, um Merkmalvektoren zu bilden
  2. Berechnung der europaischen Distanz zwischen der aktuellen Preisreihenfolge und den historischen Daten
  3. Auswahl von K ähnlichsten historischen Preisreihen als nahegelegene Stichprobe
  4. Analyse der nachfolgenden Preisentwicklung für diese K-Nachbarschaft
  5. Erzeugung von Handelssignalen basierend auf den durchschnittlichen Preisveränderungen in nahe gelegenen Stichproben in Verbindung mit einem Moving Average Wenn der Durchschnittspreis für K nahe benachbarte Stichproben positiv ist und der aktuelle Preis über dem beweglichen Durchschnitt liegt, wird ein Mehrwertsignal erzeugt; umgekehrt wird ein Leerwertsignal erzeugt.

Strategische Vorteile

  1. Anpassungsfähigkeit: Die KNN-Algorithmen sind in der Lage, die Parameter automatisch an die veränderten Marktbedingungen anzupassen, so dass die Strategie stark anpassungsfähig ist
  2. Multidimensionelle Analysen: Die Kombination von Machine-Learning-Algorithmen und technischen Kennzahlen bietet eine umfassendere Perspektive auf die Marktanalyse
  3. Risikokontrollen sind vernünftig: Die Wirkung von Falschsignalen wird durch die Verwendung von Moving Averages als zusätzliche Bestätigung reduziert
  4. Klarheit in der Berechnungslogik: Die Umsetzung von Strategien ist transparent, leicht zu verstehen und zu optimieren
  5. Flexibilität der Parameter: Parameter wie K-Werte und Fenstergröße können je nach Marktumfeld angepasst werden

Strategisches Risiko

  1. Hohe Rechenkomplexität: KNN-Algorithmen benötigen eine große Menge an historischen Daten, was die Effizienz der Strategie-Ausführung beeinträchtigen kann
  2. Parameter-Sensitivität: K-Werte und die Wahl der Fenstergröße haben einen wichtigen Einfluss auf die Strategie-Performance
  3. Abhängigkeit vom Marktumfeld: In einem stark schwankenden Marktumfeld können die Referenzwerte für die historischen Ähnlichkeiten gesenkt werden
  4. Risiko einer Überpassung: Übermäßige Abhängigkeit von historischen Daten kann zu einer Überpassung der Strategie führen
  5. Verspätungsrisiko: Signalverzögerung aufgrund der Notwendigkeit, ausreichend historische Daten zu sammeln

Richtung der Strategieoptimierung

  1. Feature Engineering Optimierung:
  • Mehr technische Kennzahlen als Merkmal
  • Die Einführung von Market Sentiment Indicators
  • Standardisierungsmethoden zur Optimierung von Merkmalen
  1. Die Algorithmen werden effizienter:
  • Optimierung der Nachbarschaftssuche mit Datenstrukturen wie KD-Bäumen
  • Parallelrechnen
  • Optimierung der Datenspeicherung und -zugriff
  1. Erhöhung der Risikokontrollen:
  • Stop-Loss- und Take-Profit-Mechanismus hinzufügen
  • Einführung von Volatilitätsfiltern
  • Gestaltung eines dynamischen Positionsmanagementsystems
  1. Parameteroptimierung:
  • Ermöglicht die Anpassung der K-Wert-Auswahl
  • Beobachtungsfenstergröße dynamisch anpassen
  • Optimierung der Moving-Average-Zyklus
  1. Verbesserte Signalerzeugung:
  • Einführung eines Signalstärke-Ratingsystems
  • Design der Signalbestätigung
  • Optimierung der Einstiegs- und Ausstiegszeit

Zusammenfassen

Die Strategie nutzt innovative KNN-Algorithmen für Trend-Tracking-Trading und optimiert herkömmliche technische Analysestrategien durch Machine-Learning-Methoden. Die Strategie ist sehr anpassungsfähig und flexibel und kann Parameter an die Dynamik der Marktumgebung anpassen. Obwohl Risiken wie hohe Rechenkomplexität und Parameterempfindlichkeit bestehen, hat die Strategie durch vernünftige Optimierungs- und Risikokontrollmaßnahmen einen guten Anwendungswert.

Strategiequellcode
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Trend Following Strategy with KNN", overlay=true,commission_value=0.03,currency='USD', commission_type=strategy.commission.percent,default_qty_type=strategy.cash)


// Input parameters
k = input.int(5, title="K (Number of Neighbors)", minval=1)  // Number of neighbors for KNN algorithm
window_size = input.int(20, title="Window Size", minval=1)  // Window size for feature vector calculation
ma_length = input.int(50, title="MA Length", minval=1)  // Length of the moving average

// Calculate moving average
ma = ta.sma(close, ma_length)

// Initialize variables
var float[] features = na
var float[] distances = na
var int[] nearest_neighbors = na

if bar_index >= window_size - 1  // Ensure there is enough historical data
    features := array.new_float(0)  // Keep only the current window data
    for i = 0 to window_size - 1
        array.push(features, close[i])

    // Calculate distances
    distances := array.new_float(0)  // Clear the array for each calculation
    for i = 0 to window_size - 1  // Calculate the distance between the current price and all prices in the window
        var float distance = 0.0
        for j = 0 to window_size - 1
            distance += math.pow(close[j] - array.get(features, j), 2)
        distance := math.sqrt(distance)
        array.push(distances, distance)

    // Find the nearest neighbors
    if array.size(distances) > 0 and array.size(distances) >= k
        nearest_neighbors := array.new_int(0)
        for i = 0 to k - 1
            var int min_index = -1
            var float min_distance = na
            for j = 0 to array.size(distances) - 1
                if na(min_distance) or array.get(distances, j) < min_distance
                    min_index := j
                    min_distance := array.get(distances, j)
            if min_index != -1
                array.push(nearest_neighbors, min_index)
                array.remove(distances, min_index)  // Remove the processed neighbor

    // Calculate the average price change of the neighbors
    var float average_change = 0.0
    if array.size(nearest_neighbors) > 0
        for i = 0 to array.size(nearest_neighbors) - 1
            var int index = array.get(nearest_neighbors, i)
            // Ensure index + 1 is within range
            if index + 1 < bar_index
                average_change += (close[index] - close[index + 1])
        average_change := average_change / array.size(nearest_neighbors)

    // Generate trading signals
    if average_change > 0 and close > ma
        strategy.entry("Long", strategy.long)
    else if average_change < 0 and close < ma
        strategy.entry("Short", strategy.short)