Algorithme multidimensionnel K-nearest neighbor et analyse du volume et des prix des modèles de chandeliers

SMA KNN RSI VOL MA SD
Date de création: 2025-01-17 16:10:07 Dernière modification: 2025-01-17 16:10:07
Copier: 0 Nombre de clics: 436
1
Suivre
1617
Abonnés

Algorithme multidimensionnel K-nearest neighbor et analyse du volume et des prix des modèles de chandeliers

Aperçu

La stratégie est un système de trading complet qui combine l’algorithme d’apprentissage automatique K-nearest neighbor (KNN), la reconnaissance des modèles de chandeliers et l’analyse du volume. La stratégie forme un cadre d’analyse tridimensionnel pour le marché grâce à des méthodes d’analyse multidimensionnelles, notamment des canaux de moyenne mobile, une vérification du seuil de volume et des statistiques de probabilité, capturant ainsi des opportunités de trading potentielles.

Principe de stratégie

La logique fondamentale de la stratégie repose sur les éléments clés suivants :

  1. Utilisez la moyenne mobile (SMA) et l’écart type pour construire des canaux de prix afin d’identifier les zones de surachat et de survente
  2. Identifiez neuf modèles de chandeliers classiques grâce à des conditions définies par programmation, notamment le marteau, l’étoile filante, l’engloutissement, etc.
  3. Présentez l’algorithme KNN pour apprendre les tendances historiques des prix et prédire les tendances futures possibles des prix
  4. L’utilisation du volume des transactions comme indicateur de confirmation du signal nécessite que le volume des transactions soit supérieur au seuil défini lorsque le signal est déclenché.
  5. Calculez la distribution de probabilité de montée et de descente et utilisez-la comme l’une des conditions de filtrage du signal

Avantages stratégiques

  1. Le mécanisme de confirmation du signal à plusieurs niveaux améliore considérablement la fiabilité des transactions
  2. L’introduction de l’algorithme KNN offre une perspective d’apprentissage automatique pour l’analyse technique traditionnelle
  3. Le mécanisme de vérification du volume évite efficacement les fausses percées
  4. Le dessin dynamique des lignes de support et de résistance permet d’identifier les niveaux de prix importants
  5. Un système d’alerte complet garantit que vous ne manquerez aucune opportunité de trading importante
  6. Les paramètres de stratégie sont hautement ajustables et peuvent s’adapter à différents environnements de marché

Risque stratégique

  1. L’algorithme KNN peut être à la traîne dans les marchés volatils
  2. Trop de conditions de filtrage du signal peuvent conduire à manquer certaines opportunités de trading
  3. Les seuils de volume fixes peuvent devoir être ajustés de manière dynamique à différentes périodes
  4. Trop de faux signaux peuvent être générés lors des phases latérales Recommandé:
  • Ajuster dynamiquement les paramètres de l’algorithme
  • Introduction d’un mécanisme d’identification de l’environnement de marché
  • Fixer une limite de perte maximale
  • Mettre en place un système de gestion d’entrepôt

Orientation de l’optimisation de la stratégie

  1. Introduction d’un mécanisme d’ajustement adaptatif des paramètres pour permettre à la stratégie d’ajuster automatiquement les paramètres en fonction des conditions du marché
  2. Intégrer des algorithmes d’apprentissage profond pour améliorer la précision des prédictions
  3. Ajout de plus d’indicateurs de microstructure de marché
  4. Optimisation de la méthode de calcul dynamique du seuil de volume de transactions
  5. Mettre en place un système de contrôle des risques plus complet

Résumer

La stratégie construit un système de trading robuste en combinant l’analyse technique traditionnelle avec des méthodes modernes d’apprentissage automatique. Le cadre d’analyse multidimensionnel de la stratégie et le mécanisme strict de confirmation du signal fournissent une base fiable pour les décisions de trading. Grâce à une optimisation continue et à un contrôle des risques, la stratégie devrait maintenir une performance stable dans divers environnements de marché.

Code source de la stratégie
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-16 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy("Candle Pattern Analyzer with Volume", overlay=true)

// Input parameters
length = input.int(20, "Channel Length", minval=1)
mult = input.float(2.0, "Volatility Multiplier", minval=0.1)
candleLength = input.int(5, "Candle Length", minval=1)
k = input.int(5, "KNN Neighbors", minval=1)
volumeThreshold = input.int(100000, "Volume Threshold", minval=1)

// Calculate channel
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev

// Plot channel
plot(basis, color=color.blue)
plot(upper, color=color.green)
plot(lower, color=color.red)

// Identify candle patterns
isBullish = close > open
isBearish = close < open

// Pre-calculate SMAs
smaLow = ta.sma(low, candleLength)
smaHigh = ta.sma(high, candleLength)
smaClose = ta.sma(close, candleLength)

// Hammer pattern
isHammer = isBullish and 
           low < smaLow and 
           close > smaClose and 
           (close - low) / (high - low) > 0.6 and
           low < low[1]

// Shooting Star pattern
isShootingStar = isBearish and 
                 high > smaHigh and 
                 close < smaClose and 
                 (high - close) / (high - low) > 0.6 and
                 high > high[1]

// Inverse Hammer pattern
isInverseHammer = isBullish and 
                   high > smaHigh and 
                   close < smaClose and 
                   (high - close) / (high - low) > 0.6 and
                   high > high[1]

// Bullish Engulfing pattern
isBullishEngulfing = isBullish and 
                      close > high[1] and 
                      open < low[1]

// Bearish Engulfing pattern
isBearishEngulfing = isBearish and 
                      close < low[1] and 
                      open > high[1]

// Morning Star pattern
isMorningStar = isBullish and close[2] < open[2] and close[1] < open[1] and  close > open[1]

// Evening Star pattern
isEveningStar = isBearish and  close[2] > open[2] and  close[1] > open[1] and  close < open[1]

// Three Black Crows pattern
isThreeBlackCrows = isBearish and 
                     close < close[1] and 
                     close[1] < close[2] and 
                     close[2] < close[3]

// Three White Soldiers pattern
isThreeWhiteSoldiers = isBullish and close > close[1] and  close[1] > close[2] and  close[2] > close[3]

// Compare previous candles
prevCandleUp = close[1] > open[1]
prevCandleDown = close[1] < open[1]

// Calculate probability
probUp = ta.sma(close > open ? 1 : 0, candleLength) / candleLength
probDown = ta.sma(close < open ? 1 : 0, candleLength) / candleLength

// Generate signals
buySignal = isHammer and prevCandleDown and probUp > probDown and volume > volumeThreshold
sellSignal = isShootingStar and prevCandleUp and probDown > probUp and volume > volumeThreshold

// Highlight patterns
color candleColor = na
if (isHammer)
    candleColor := color.green
    label.new(bar_index, high, "Hammer", color=color.green, style=label.style_label_up)

else if (isShootingStar)
    candleColor := color.red
    label.new(bar_index, low, "Shooting Star", color=color.red, style=label.style_label_down)
else if (isInverseHammer)
    candleColor := color.blue
    label.new(bar_index, high, "Inverse Hammer", color=color.blue, style=label.style_label_up)
else if (isBullishEngulfing)
    candleColor := color.yellow
    label.new(bar_index, high, "Bullish Engulfing", color=color.yellow, style=label.style_label_up)
else if (isBearishEngulfing)
    candleColor := color.purple
    label.new(bar_index, low, "Bearish Engulfing", color=color.purple, style=label.style_label_down)

else if (isMorningStar)
    candleColor := color.orange
    label.new(bar_index, high, "Morning Star", color=color.orange, style=label.style_label_up)

else if (isEveningStar)
    candleColor := color.new(color.red, 80)
    label.new(bar_index, low, "Evening Star", color=color.new(color.red, 80), style=label.style_label_down)

else if (isThreeBlackCrows)
    candleColor := color.black
    label.new(bar_index, low, "Three Black Crows", color=color.black, style=label.style_label_down)

else if (isThreeWhiteSoldiers)
    candleColor := color.white
    label.new(bar_index, high, "Three White Soldiers", color=color.white, style=label.style_label_up)


// Plot candles
barcolor(candleColor)

// KNN algorithm
var float[] knnData = array.new_float(k, na)
var float[] knnLabels = array.new_float(k, na) // Create an array to store KNN labels
array.set(knnLabels, 0, 1.0) // Label for "up" movement

// Shift KNN dataset to make room for new data point
for i = 1 to k-1
    array.set(knnData, i, array.get(knnData, i-1))
    array.set(knnLabels, i, array.get(knnLabels, i-1))

// Predict next movement using KNN algorithm
float prediction = 0.0
for i = 0 to k-1
    float distance = math.abs(close - array.get(knnData, i))
    prediction += array.get(knnLabels, i) / distance

prediction /= k

// Plot prediction
// line.new(bar_index, close, bar_index + 1, prediction, color=color.purple)

// Plot resistance and support lines
float resistance = ta.sma(high, length)
float support = ta.sma(low, length)
// line.new(bar_index, resistance, bar_index + 1, resistance, color=color.green, style=line.style_dashed)
// line.new(bar_index, support, bar_index + 1, support, color=color.red, style=line.style_dashed)

// Plot buy and sell signals with prices
if (buySignal)
    // label.new(bar_index, low, "Buy at " + str.tostring(low), color=color.green, style=label.style_label_up)
    strategy.entry("Buy", strategy.long, comment="Buy at " + str.tostring(low))
if (sellSignal)
    // label.new(bar_index, high, "Sell at " + str.tostring(high), color=color.red, style=label.style_label_down)
    strategy.entry("Sell", strategy.short, comment="Sell at " + str.tostring(high))

// Create alerts
alertcondition(buySignal, title="Buy Signal", message="Buy signal generated!")
alertcondition(sellSignal, title="Sell Signal", message="Sell signal generated!")