Mehrdimensionaler K-Nearest-Neighbor-Algorithmus und Handelsstrategie für die Volumen-Preis-Analyse von Candlestick-Mustern

SMA KNN RSI VOL MA SD
Erstellungsdatum: 2025-01-17 16:10:07 zuletzt geändert: 2025-01-17 16:10:07
Kopie: 0 Klicks: 436
1
konzentrieren Sie sich auf
1617
Anhänger

Mehrdimensionaler K-Nearest-Neighbor-Algorithmus und Handelsstrategie für die Volumen-Preis-Analyse von Candlestick-Mustern

Überblick

Die Strategie ist ein umfassendes Handelssystem, das den K-Nearest-Neighbor (KNN)-Maschinenlernalgorithmus, Candlestick-Mustererkennung und Volumenanalyse kombiniert. Die Strategie bildet durch mehrdimensionale Analysemethoden, einschließlich gleitender Durchschnittskanäle, Überprüfung der Volumenschwelle und Wahrscheinlichkeitsstatistiken, einen dreidimensionalen Analyserahmen für den Markt und erfasst so potenzielle Handelsmöglichkeiten.

Strategieprinzip

Die Kernlogik der Strategie basiert auf den folgenden Schlüsselelementen:

  1. Verwenden Sie den gleitenden Durchschnitt (SMA) und die Standardabweichung, um Preiskanäle zu konstruieren und überkaufte und überverkaufte Bereiche zu identifizieren
  2. Identifizieren Sie neun klassische Candlestick-Muster anhand programmgesteuert definierter Bedingungen, darunter Hammer, Shooting Star, Engulfing usw.
  3. Einführung des KNN-Algorithmus zum Erlernen historischer Preistrends und zur Vorhersage möglicher zukünftiger Preistrends
  4. Die Verwendung des Handelsvolumens als Signalbestätigungsindikator erfordert, dass das Handelsvolumen höher als der festgelegte Schwellenwert sein muss, wenn das Signal ausgelöst wird.
  5. Berechnen Sie die Wahrscheinlichkeitsverteilung von Anstieg und Abfall und verwenden Sie sie als eine der Signalfilterbedingungen

Strategische Vorteile

  1. Der mehrstufige Signalbestätigungsmechanismus verbessert die Zuverlässigkeit von Transaktionen erheblich
  2. Die Einführung des KNN-Algorithmus bietet eine maschinelle Lernperspektive für die traditionelle technische Analyse
  3. Der Volumenüberprüfungsmechanismus verhindert effektiv falsche Durchbrüche
  4. Das dynamische Zeichnen von Unterstützungs- und Widerstandslinien hilft beim Identifizieren wichtiger Preisniveaus
  5. Ein umfassendes Warnsystem stellt sicher, dass Sie keine wichtigen Handelsmöglichkeiten verpassen
  6. Die Strategieparameter sind äußerst anpassungsfähig und können an unterschiedliche Marktumgebungen angepasst werden.

Strategisches Risiko

  1. Der KNN-Algorithmus kann in volatilen Märkten hinterherhinken
  2. Zu viele Signalfilterbedingungen können dazu führen, dass einige Handelsmöglichkeiten verpasst werden
  3. Feste Volumenschwellen müssen möglicherweise in verschiedenen Zeiträumen dynamisch angepasst werden
  4. Während Seitwärtsphasen können zu viele Fehlsignale generiert werden Empfohlen:
  • Algorithmusparameter dynamisch anpassen
  • Einführung eines Mechanismus zur Identifizierung des Marktumfelds
  • Legen Sie ein maximales Verlustlimit fest
  • Richten Sie ein Lagerverwaltungssystem ein

Richtung der Strategieoptimierung

  1. Einführung eines adaptiven Parameteranpassungsmechanismus, der es der Strategie ermöglicht, Parameter automatisch an die Marktbedingungen anzupassen
  2. Integrieren Sie Deep-Learning-Algorithmen, um die Vorhersagegenauigkeit zu verbessern
  3. Hinzufügen weiterer Marktmikrostrukturindikatoren
  4. Optimierung der dynamischen Berechnungsmethode für Handelsvolumenschwellenwerte
  5. Etablierung eines umfassenderen Risikokontrollsystems

Zusammenfassen

Die Strategie baut ein robustes Handelssystem auf, indem sie traditionelle technische Analyse mit modernen Methoden des maschinellen Lernens kombiniert. Der mehrdimensionale Analyserahmen und der strenge Signalbestätigungsmechanismus der Strategie bieten eine zuverlässige Grundlage für Handelsentscheidungen. Durch kontinuierliche Optimierung und Risikokontrolle soll die Strategie eine stabile Performance in verschiedenen Marktumgebungen aufrechterhalten.

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