Stratégie de suivi des tendances paramétrées adaptatives KNN

MA KNN SMA
Date de création: 2024-11-29 10:54:49 Dernière modification: 2024-11-29 10:54:49
Copier: 0 Nombre de clics: 517
1
Suivre
1617
Abonnés

Stratégie de suivi des tendances paramétrées adaptatives KNN

Aperçu

La stratégie est un système de suivi de tendance paramétrable auto-adaptatif basé sur un algorithme d’apprentissage automatique K-nearest ((KNN)). La stratégie ajuste dynamiquement les paramètres de suivi de tendance grâce à l’algorithme KNN, en combinaison avec la génération de signaux de négociation sur des moyennes mobiles. Le système est capable d’ajuster automatiquement les paramètres de la stratégie en fonction des changements de l’environnement du marché, ce qui améliore l’adaptabilité et la stabilité de la stratégie.

Principe de stratégie

Le principe central de la stratégie est d’utiliser l’algorithme KNN pour analyser les données historiques sur les prix et de prédire les mouvements des prix en calculant la similitude entre l’état actuel du marché et les données historiques. Les étapes de mise en œuvre sont les suivantes:

  1. Définition de la taille de la fenêtre d’observation et de la valeur de K pour la collecte de données historiques sur les prix et la formation de vecteurs de caractéristiques
  2. Calculer la distance en euros entre la séquence de prix actuelle et les données historiques
  3. Sélectionnez K séquences de prix historiques les plus proches comme échantillon voisin
  4. Analyser les variations de prix ultérieures dans un échantillon de K de voisinage
  5. Génération d’un signal de transaction basé sur la variation moyenne des prix d’un échantillon voisin combinée à une moyenne mobile Lorsque la moyenne des prix de K échantillons voisins est positive et que le prix actuel est au-dessus de la moyenne mobile, le système génère un signal de multiplication; à l’inverse, un signal de rupture est généré.

Avantages stratégiques

  1. Adaptabilité: l’algorithme KNN est capable d’ajuster automatiquement les paramètres en fonction de l’évolution de l’environnement du marché, ce qui rend la stratégie plus adaptable
  2. L’analyse multidimensionnelle, qui combine des algorithmes d’apprentissage automatique et des indicateurs techniques, offre une perspective plus complète de l’analyse du marché
  3. Contrôle des risques raisonnable: réduction de l’impact des fausses alertes avec les moyennes mobiles comme confirmation auxiliaire
  4. La logique de calcul est claire: le processus d’exécution de la stratégie est transparent, facile à comprendre et à optimiser
  5. Flexibilité des paramètres: paramètres tels que la valeur de K et la taille de la fenêtre peuvent être ajustés en fonction des conditions du marché

Risque stratégique

  1. Complexité de calcul élevée: l’algorithme KNN nécessite de calculer de grandes quantités de données historiques, ce qui peut affecter l’efficacité de l’exécution de la stratégie
  2. Sensitivité des paramètres: les valeurs K et la taille de la fenêtre ont une influence importante sur les performances de la stratégie
  3. Dépendance des conditions du marché: dans des conditions de marché très volatiles, la valeur de référence des similitudes historiques peut être réduite
  4. Risque de suradaptation: une trop grande dépendance à l’égard des données historiques peut entraîner une suradaptation de la stratégie
  5. Risque de retard: il peut y avoir un retard de signal en raison de la nécessité de collecter suffisamment de données historiques

Orientation de l’optimisation de la stratégie

  1. Optimisation de l’ingénierie des fonctionnalités:
  • Ajout d’autres indicateurs techniques comme caractéristiques
  • L’introduction de l’indicateur de l’humeur du marché
  • Optimisation des méthodes de normalisation des caractéristiques
  1. L’efficacité de l’algorithme:
  • Optimisation de la recherche de proximité à l’aide de structures de données telles que les arbres KD
  • Mise en œuvre du calcul parallèle
  • Optimiser le stockage et l’accès aux données
  1. Le contrôle des risques est renforcé:
  • Ajoutez un mécanisme de stop loss et de take profit
  • Présentation des filtres de volatilité
  • La conception d’un système de gestion de position dynamique
  1. Optimisation des paramètres:
  • Option de sélection de la valeur de K adaptative
  • Modifier la taille de la fenêtre d’observation
  • Optimisation des cycles de la moyenne mobile
  1. Amélioration du mécanisme de génération de signaux:
  • Introduction d’un système de notation de la force du signal
  • Conception du mécanisme de reconnaissance des signaux
  • Optimiser le timing des entrées et sorties

Résumer

La stratégie utilise de manière innovante l’algorithme KNN dans les transactions de suivi de tendances, optimisant les stratégies d’analyse technique traditionnelles grâce à des méthodes d’apprentissage automatique. La stratégie possède une forte adaptabilité et une grande flexibilité, permettant d’ajuster les paramètres en fonction de la dynamique de l’environnement du marché. Bien qu’il existe des risques tels que la complexité élevée des calculs et la sensibilité aux paramètres, la stratégie a toujours une bonne valeur d’application grâce à des mesures d’optimisation et de contrôle des risques raisonnables.

Code source de la stratégie
/*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)