Estrategia comercial de análisis de precios y volumen de patrones de velas y algoritmo multidimensional de K vecinos más cercanos

SMA KNN RSI VOL MA SD
Fecha de creación: 2025-01-17 16:10:07 Última modificación: 2025-01-17 16:10:07
Copiar: 0 Número de Visitas: 436
1
Seguir
1617
Seguidores

Estrategia comercial de análisis de precios y volumen de patrones de velas y algoritmo multidimensional de K vecinos más cercanos

Descripción general

La estrategia es un sistema comercial integral que combina el algoritmo de aprendizaje automático K-nearest neighbor (KNN), reconocimiento de patrones de velas y análisis de volumen. La estrategia forma un marco de análisis tridimensional para el mercado a través de métodos de análisis multidimensional, incluidos canales de promedio móvil, verificación de umbral de volumen y estadísticas de probabilidad, capturando así oportunidades comerciales potenciales.

Principio de estrategia

La lógica central de la estrategia se basa en los siguientes elementos clave:

  1. Utilice la media móvil (SMA) y la desviación estándar para construir canales de precios para identificar áreas de sobrecompra y sobreventa.
  2. Identifique nueve patrones de velas clásicos a través de condiciones definidas programáticamente, incluido el martillo, la estrella fugaz, el envolvente, etc.
  3. Introduzca el algoritmo KNN para conocer las tendencias de precios históricas y predecir posibles tendencias de precios futuras
  4. El uso del volumen de operaciones como indicador de confirmación de la señal requiere que el volumen de operaciones sea mayor que el umbral establecido cuando se activa la señal.
  5. Calcular la distribución de probabilidad de subida y bajada y utilizarla como una de las condiciones de filtrado de la señal.

Ventajas estratégicas

  1. El mecanismo de confirmación de señales multinivel mejora significativamente la confiabilidad de las transacciones.
  2. La introducción del algoritmo KNN proporciona una perspectiva de aprendizaje automático para el análisis técnico tradicional
  3. El mecanismo de verificación de volumen evita eficazmente los avances falsos.
  4. El dibujo dinámico de líneas de soporte y resistencia ayuda a identificar niveles de precios importantes
  5. Un sistema de alerta integral garantiza que no perderá oportunidades comerciales importantes.
  6. Los parámetros de la estrategia son altamente ajustables y pueden adaptarse a diferentes entornos de mercado.

Riesgo estratégico

  1. El algoritmo KNN puede quedar rezagado en mercados volátiles
  2. Demasiadas condiciones de filtrado de señales pueden provocar la pérdida de algunas oportunidades comerciales
  3. Es posible que sea necesario ajustar dinámicamente los umbrales de volumen fijo en diferentes períodos
  4. Se pueden generar demasiadas señales falsas durante las fases laterales. Recomendado:
  • Ajustar dinámicamente los parámetros del algoritmo
  • Introducción de un mecanismo de identificación del entorno de mercado
  • Establecer un límite máximo de pérdida
  • Establecer un sistema de gestión de almacenes

Dirección de optimización de la estrategia

  1. Introducción de un mecanismo de ajuste de parámetros adaptativo para permitir que la estrategia ajuste automáticamente los parámetros según las condiciones del mercado
  2. Integrar algoritmos de aprendizaje profundo para mejorar la precisión de las predicciones
  3. Añadiendo más indicadores de microestructura del mercado
  4. Optimización del método de cálculo dinámico del umbral de volumen de negociación
  5. Establecer un sistema de control de riesgos más completo

Resumir

La estrategia construye un sistema comercial sólido combinando el análisis técnico tradicional con métodos modernos de aprendizaje automático. El marco de análisis multidimensional de la estrategia y el estricto mecanismo de confirmación de señales proporcionan una base confiable para las decisiones comerciales. Se espera que mediante la optimización continua y el control de riesgos, la estrategia mantenga un rendimiento estable en diversos entornos de mercado.

Código Fuente de la Estrategia
/*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!")