Algoritmo multidimensional K-vizinho mais próximo e análise de preço de volume de padrão de velas estratégia de negociação

SMA KNN RSI VOL MA SD
Data de criação: 2025-01-17 16:10:07 última modificação: 2025-01-17 16:10:07
cópia: 0 Cliques: 436
1
focar em
1617
Seguidores

Algoritmo multidimensional K-vizinho mais próximo e análise de preço de volume de padrão de velas estratégia de negociação

Visão geral

A estratégia é um sistema de negociação abrangente que combina o algoritmo de aprendizado de máquina K-nearest neighbor (KNN), reconhecimento de padrões de velas e análise de volume. A estratégia forma uma estrutura de análise tridimensional para o mercado por meio de métodos de análise multidimensionais, incluindo canais de média móvel, verificação de limite de volume e estatísticas de probabilidade, capturando assim potenciais oportunidades de negociação.

Princípio da estratégia

A lógica central da estratégia é baseada nos seguintes elementos-chave:

  1. Use a média móvel (SMA) e o desvio padrão para construir canais de preços para identificar áreas de sobrecompra e sobrevenda
  2. Identifique nove padrões clássicos de velas por meio de condições definidas programaticamente, incluindo martelo, estrela cadente, engolfo, etc.
  3. Apresentar o algoritmo KNN para aprender tendências históricas de preços e prever possíveis tendências futuras de preços
  4. O uso do volume de negociação como um indicador de confirmação de sinal requer que o volume de negociação seja maior do que o limite definido quando o sinal for acionado
  5. Calcule a distribuição de probabilidade de subida e descida e use-a como uma das condições de filtragem de sinal

Vantagens estratégicas

  1. O mecanismo de confirmação de sinal multinível melhora significativamente a confiabilidade das transações
  2. A introdução do algoritmo KNN fornece uma perspectiva de aprendizado de máquina para análise técnica tradicional
  3. O mecanismo de verificação de volume evita efetivamente falsos avanços
  4. O desenho dinâmico de linhas de suporte e resistência ajuda a identificar níveis de preços importantes
  5. Um sistema de alerta abrangente garante que você não perderá oportunidades de negociação importantes
  6. Os parâmetros de estratégia são altamente ajustáveis ​​e podem se adaptar a diferentes ambientes de mercado

Risco estratégico

  1. Algoritmo KNN pode ficar para trás em mercados voláteis
  2. Muitas condições de filtragem de sinal podem levar à perda de algumas oportunidades de negociação
  3. Os limites de volume fixo podem precisar ser ajustados dinamicamente em diferentes períodos
  4. Muitos sinais falsos podem ser gerados durante as fases laterais Recomendado:
  • Ajuste dinamicamente os parâmetros do algoritmo
  • Introdução de um mecanismo de identificação do ambiente de mercado
  • Defina um limite máximo de perda
  • Estabelecer um sistema de gestão de armazém

Direção de otimização da estratégia

  1. Introdução de um mecanismo de ajuste de parâmetros adaptativo para permitir que a estratégia ajuste automaticamente os parâmetros de acordo com as condições de mercado
  2. Integre algoritmos de aprendizado profundo para melhorar a precisão da previsão
  3. Adicionar mais indicadores de microestrutura de mercado
  4. Otimizando o método de cálculo dinâmico do limite de volume de negociação
  5. Estabelecer um sistema de controle de riscos mais completo

Resumir

A estratégia constrói um sistema de negociação robusto combinando análise técnica tradicional com métodos modernos de aprendizado de máquina. A estrutura de análise multidimensional da estratégia e o mecanismo rigoroso de confirmação de sinal fornecem uma base confiável para decisões de negociação. Por meio de otimização contínua e controle de risco, espera-se que a estratégia mantenha um desempenho estável em vários ambientes de mercado.

Código-fonte da estratégia
/*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!")