Les ressources ont été chargées... Je charge...

Algoritme KNN multidimensionnel avec stratégie de négociation de modèles de bougies à volume-prix

Auteur:ChaoZhang est là., Date: 2025-01-17 16:10:07 Je suis désolé
Les étiquettes:SMANom du produitIndice de résistanceVOL- Je vous en prie.SD

 Multi-Dimensional KNN Algorithm with Volume-Price Candlestick Pattern Trading Strategy

Résumé

Cette stratégie est un système de trading complet qui combine l'algorithme d'apprentissage automatique K-Nearest Neighbors (KNN), la reconnaissance de modèles de bougies et l'analyse de volume.

Principes de stratégie

La logique de base de la stratégie repose sur plusieurs éléments clés: 1. Utiliser la moyenne mobile simple (SMA) et l'écart type pour construire des canaux de prix pour identifier les zones de surachat et de survente 2. Identifier neuf modèles classiques de chandeliers à travers des conditions définies par programme, y compris les modèles Hammer, Shooting Star, Engulfing, etc. 3. Incorporer l'algorithme KNN pour apprendre des mouvements historiques des prix et prédire les futures tendances des prix Utiliser le volume comme indicateur de confirmation du signal, exigeant que le volume soit supérieur au seuil fixé lorsque les signaux déclenchent 5. calculer les distributions de probabilité pour les mouvements ascendants et descendants comme l'une des conditions de filtrage du signal

Les avantages de la stratégie

  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 fournit une perspective d'apprentissage automatique à l'analyse technique traditionnelle
  3. Le mécanisme de vérification des volumes permet d'éviter efficacement les fausses fuites
  4. La représentation dynamique des lignes de support et de résistance aide à saisir les niveaux de prix importants
  5. Un système d'alerte complet garantit qu'aucune opportunité commerciale importante n'est manquée
  6. Une forte adaptabilité des paramètres pour s'adapter aux différents environnements du marché

Risques stratégiques

  1. L'algorithme KNN peut être en retard sur les marchés volatils
  2. Des conditions de filtrage de signaux multiples pourraient entraîner la perte de certaines opportunités de négociation
  3. Les seuils de volume fixes peuvent nécessiter un ajustement dynamique à différentes périodes
  4. Peut générer des faux signaux excessifs pendant les phases de consolidation Solution recommandée:
  • Ajustement des paramètres de l'algorithme dynamique
  • Introduction d'un mécanisme de reconnaissance de l'environnement du marché
  • Définition des limites maximales de perte
  • Mise en place d'un système de gestion des positions

Directions d'optimisation

  1. Introduction d'un mécanisme d'ajustement adaptatif des paramètres pour ajuster automatiquement les paramètres en fonction des conditions du marché
  2. Intégrer des algorithmes d'apprentissage en profondeur pour améliorer la précision des prédictions
  3. Ajouter plus d'indicateurs de la microstructure du marché
  4. Optimiser la méthode de calcul dynamique pour les seuils de volume
  5. Mettre en place un système de contrôle des risques plus complet

Résumé

Cette stratégie construit un système de trading robuste en combinant l'analyse technique traditionnelle avec des méthodes d'apprentissage automatique modernes.


/*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!")


Relationnée

Plus de