Estratégia de negociação de acompanhamento de tendências combinando várias médias móveis e indicadores estocásticos

SMA KDJ ATR RSI MACD
Data de criação: 2024-12-27 14:43:30 última modificação: 2024-12-27 14:43:30
cópia: 3 Cliques: 386
1
focar em
1617
Seguidores

Estratégia de negociação de acompanhamento de tendências combinando várias médias móveis e indicadores estocásticos

Visão geral

A estratégia é um sistema de negociação de acompanhamento de tendências que combina múltiplas médias móveis (SMA) e indicadores aleatórios (KDJ). A estratégia usa um mecanismo de parada e perda dinâmico para ajustar o gerenciamento de posições de acordo com a tendência do mercado, protegendo os lucros e não saindo cedo.

Princípio da estratégia

A estratégia é baseada nos seguintes componentes principais:

  1. Sistema de dupla equilíbrio: usa SMA de 19 e 74 ciclos como ferramenta de determinação de tendências
  2. Bandas de preços: dividir bandas de preços em 5 níveis para avaliar a força e a fraqueza do mercado
  3. Indicadores aleatórios: usar indicadores aleatórios de 60 ciclos para julgar sobrecompra e sobrevenda
  4. Confirmação de tendência: determinação da continuidade da tendência através do movimento de 3 linhas K consecutivas
  5. Condições de entrada: entrada quando o preço quebra o SMA de 74 ciclos e se encontra na faixa de preços correspondente
  6. Mecanismo de parada de prejuízos: uso de tracking stop-loss e saída em tempo hábil quando a tendência muda

Vantagens estratégicas

  1. Integridade do sistema: combinação de rastreamento de tendências e indicadores de dinâmica para fornecer uma análise completa do mercado
  2. Gerenciamento de riscos: Múltiplos mecanismos de suspensão, incluindo suspensão de duração e suspensão de rastreamento
  3. Adaptabilidade: adaptação a diferentes cenários de mercado por meio de ajustes de parâmetros
  4. Captação de tendências: Captação de tendências de médio e longo prazo para evitar sinais falsos
  5. Gerenciamento de posições: ajustar as posições de acordo com a dinâmica do mercado para melhorar a eficiência do uso de fundos

Risco estratégico

  1. Risco de turbulência no mercado: pode haver transações frequentes no mercado horizontal
  2. Risco de deslizamento: pode haver um deslizamento maior em condições de velocidade
  3. Sensibilidade dos parâmetros: Diferentes combinações de parâmetros podem levar a grandes diferenças no desempenho da estratégia
  4. Dependência do cenário de mercado: estratégias que funcionam melhor em mercados de tendência
  5. Risco de gestão de fundos: operação de depósito total pode trazer maior risco de retirada

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

  1. Introdução de indicadores de volatilidade: Considere adicionar indicadores de ATR para ajustar dinamicamente a posição de parada
  2. Otimização do tempo de entrada: pode ser aumentada a quantidade de confirmação de entrada para melhorar a precisão da entrada
  3. Melhorar o gerenciamento de fundos: recomenda-se a adição de um módulo de gerenciamento de posições, ajustando as posições de acordo com a dinâmica de risco
  4. Aumentar o julgamento do cenário de mercado: pode ser adicionado um indicador de intensidade de tendência para filtrar os sinais de negociação
  5. Melhorar o mecanismo de stop loss: pode ser considerado o uso de stop loss percentual para aumentar a flexibilidade

Resumir

A estratégia é construída através da combinação de múltiplos indicadores técnicos para construir um sistema de negociação completo, com uma boa capacidade de rastreamento de tendências e mecanismo de gerenciamento de risco. Embora possa enfrentar desafios em certos cenários de mercado, a estratégia tem chances de manter um desempenho estável em diferentes cenários de mercado através de otimização e aperfeiçoamento contínuos.

Código-fonte da estratégia
/*backtest
start: 2024-11-26 00:00:00
end: 2024-12-25 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Purple SMA Strategy", overlay=true)

// === INPUTS ===
zoneLength = input.int(20, "Price Zone Length", minval=5)
tickSize = input.float(1.0, "Tick Size for Hard Stop")
hardStopTicks = input.int(50, "Hard Stop Loss in Ticks")

// === CALCULATE ZONES ===
h = ta.highest(high, zoneLength)
l = ta.lowest(low, zoneLength)
priceRange = h - l
lvl5 = h
lvl4 = l + (priceRange * 0.75)  // Orange line
lvl3 = l + (priceRange * 0.50)  // Yellow line
lvl2 = l + (priceRange * 0.25)  // Green line
lvl1 = l

// === INDICATORS ===
sma19 = ta.sma(close, 19)
sma74 = ta.sma(close, 74)

// === CANDLE COLOR CONDITIONS ===
isGreenCandle = close > open
isRedCandle = close < open

// === CONTINUOUS TREND DETECTION ===
isThreeGreenCandles = close > open and close[1] > open[1] and close[2] > open[2]
isThreeRedCandles = close < open and close[1] < open[1] and close[2] < open[2]

var bool inGreenTrend = false
var bool inRedTrend = false

// Update trends
if isThreeGreenCandles
    inGreenTrend := true
    inRedTrend := false
if isThreeRedCandles
    inRedTrend := true
    inGreenTrend := false
if (inGreenTrend and isRedCandle) or (inRedTrend and isGreenCandle)
    inGreenTrend := false
    inRedTrend := false

// === STOCHASTIC CONDITIONS ===
k = ta.stoch(close, high, low, 60)
d = ta.sma(k, 10)
isOverbought = d >= 80
isOversold = d <= 20
stochUp = d > d[1]
stochDown = d < d[1]

// === SMA COLOR LOGIC ===
sma19Color = if isOverbought and stochUp
    color.green
else if isOverbought and stochDown
    color.red
else if isOversold and stochUp
    color.green
else if isOversold and stochDown
    color.red
else if stochUp
    color.blue
else if stochDown
    color.purple
else
    color.gray

sma74Color = sma74 < sma19 ? color.green : color.red

// === CROSSING CONDITIONS ===
crossUpSMA = ta.crossover(close, sma74)
crossDownSMA = ta.crossunder(close, sma74)

// === ENTRY CONDITIONS ===
buyCondition = crossUpSMA and close > lvl4
sellCondition = crossDownSMA and close < lvl2

// === POSITION MANAGEMENT ===
var float stopLevel = na
var bool xMode = false

// Entry and Stop Loss
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)
    stopLevel := close - (hardStopTicks * tickSize)
    xMode := false

if sellCondition
    strategy.entry(id="Short", direction=strategy.short)
    stopLevel := close + (hardStopTicks * tickSize)
    xMode := false

// Update stops based on X's
if strategy.position_size != 0 and (inGreenTrend or inRedTrend)
    xMode := true
    if strategy.position_size > 0  // Long position
        stopLevel := low
    else  // Short position
        stopLevel := high

// Exit logic
if strategy.position_size > 0  // Long position
    if low <= stopLevel
        strategy.close(id="Long")
    else if xMode and not (inGreenTrend or inRedTrend)
        strategy.close(id="Long")

if strategy.position_size < 0  // Short position
    if high >= stopLevel
        strategy.close(id="Short")
    else if xMode and not (inGreenTrend or inRedTrend)
        strategy.close(id="Short")

// === PLOTTING ===
plot(sma19, "SMA 19", color=sma19Color, linewidth=2)
plot(sma74, "SMA 74", color=sma74Color, linewidth=2)
plot(lvl5, "Upper Zone Top", color=color.red, linewidth=2)
plot(lvl4, "Upper Zone Bottom", color=color.orange, linewidth=2)
plot(lvl3, "Middle Line", color=color.yellow, linewidth=2)
plot(lvl2, "Lower Zone Top", color=color.green, linewidth=2)
plot(lvl1, "Lower Zone Bottom", color=color.blue, linewidth=2)

// Plot X signals
plotshape(inGreenTrend, title="Bullish Line", style=shape.xcross, location=location.belowbar, color=color.white, size=size.tiny)
plotshape(inRedTrend, title="Bearish Line", style=shape.xcross, location=location.abovebar, color=color.white, size=size.tiny)

// Zone fills
var p1 = plot(lvl5, display=display.none)
var p2 = plot(lvl4, display=display.none)
var p3 = plot(lvl2, display=display.none)
var p4 = plot(lvl1, display=display.none)
fill(p1, p2, color=color.new(color.red, 90))
fill(p3, p4, color=color.new(color.green, 90))

// Plot entry signals
plotshape(buyCondition, title="Buy", style=shape.square, location=location.belowbar, color=color.new(color.blue, 20), size=size.tiny, text="BUY", textcolor=color.blue)
plotshape(sellCondition, title="Sell", style=shape.square, location=location.abovebar, color=color.new(color.red, 20), size=size.tiny, text="SELL", textcolor=color.red)