Estratégia de negociação dinâmica de breakout de três linhas com base em ATR e ADX

ATR ADX SL TP
Data de criação: 2025-02-21 09:23:20 última modificação: 2025-02-27 17:20:50
cópia: 2 Cliques: 405
2
focar em
319
Seguidores

Estratégia de negociação dinâmica de breakout de três linhas com base em ATR e ADX Estratégia de negociação dinâmica de breakout de três linhas com base em ATR e ADX

Visão geral

A estratégia é um sistema de negociação avançado baseado em três linhas clássicas de ruptura, que oferece uma solução de negociação completa através da integração do indicador de confirmação de tendência ADX e do mecanismo de stop loss dinâmico ATR. O núcleo da estratégia é a identificação de três linhas consecutivas de ruptura após a linha K e, combinada com a confirmação da força da tendência, geração de sinais de negociação precisos.

Princípio da estratégia

A estratégia funciona com base em três mecanismos centrais: primeiro, a identificação dos padrões clássicos de ruptura de três linhas, incluindo a ruptura de três linhas consecutivas e a ruptura de três linhas consecutivas; segundo, o uso do ADX (indicador de tendência médio) para filtragem de intensidade de tendência, confirmando o sinal somente quando o ADX ultrapassa o limite definido; e, finalmente, o uso do ATR (amplitude de onda real) para o cálculo da posição de parada de perda, permitindo a auto-adaptação da gestão de risco. A estratégia garante a qualidade do sinal tecnicamente através da determinação precisa da cor da linha K e da verificação da intensidade da ruptura.

Vantagens estratégicas

  1. Mecanismo de confirmação de sinal aperfeiçoado: aumento da confiabilidade do sinal por meio da combinação de vários indicadores técnicos (forma de linha K, ADX, ATR)
  2. Inteligência de gerenciamento de risco: configurações de stop loss dinâmicas baseadas em ATR, que podem ser ajustadas automaticamente à volatilidade do mercado
  3. Altamente personalizável: oferece opções de ajuste para vários parâmetros-chave, incluindo o ADX, o ATR, etc.
  4. Acompanhamento de tendências reforçado: filtragem ADX assegurando entrada apenas em ambientes de forte tendência
  5. Estrutura de código clara: o design modular facilita a manutenção e ampliação

Risco estratégico

  1. Retardo no reconhecimento de forma: a confirmação da forma de ruptura de três linhas requer a conclusão de quatro linhas K, o que pode causar atraso no tempo de entrada
  2. Risco de Falso Breakout: Falso sinal de breakout pode surgir em um mercado em turbulência
  3. Atraso do ADX: como um indicador de confirmação de tendência, o ADX tem um certo atraso
  4. Considerando a amplitude de stop loss: A configuração de stop loss baseada no ATR pode ser grande ou pequena em situações de forte flutuação
  5. Dependência do cenário de mercado: estratégias que funcionam melhor em mercados de tendência, mas podem não funcionar em mercados de turbulência

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

  1. Melhor filtragem de sinal: pode ser adicionado um mecanismo de confirmação de entrega para aumentar a confiabilidade do sinal
  2. Otimização de parâmetros dinâmicos: introdução de mecanismos de adaptação para ajustar dinamicamente os limites ADX e o ciclo ATR
  3. Otimização do tempo de entrada: pode ser combinado com a estrutura de preços (suporte / resistência) para otimizar o ponto de entrada
  4. Melhoria na gestão de posições: aumento do mecanismo de gestão de posições dinâmico baseado na volatilidade
  5. Identificação do cenário de mercado: adição de lógica de classificação do cenário de mercado, usando diferentes configurações de parâmetros em diferentes condições de mercado

Resumir

Esta estratégia cria um sistema de negociação com base teórica e prática, combinando a forma clássica de ruptura de três linhas com indicadores tecnológicos modernos. Sua vantagem central reside no mecanismo de confirmação de múltiplos sinais e na gestão de risco inteligente, mas a sua utilização requer atenção à adequação ao ambiente de mercado e à otimização de parâmetros.

Código-fonte da estratégia
/*backtest
start: 2024-08-05 00:00:00
end: 2024-12-24 00:00:00
period: 5h
basePeriod: 5h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

// Copyright ...
// Based on the TMA Overlay by Arty, converted to a simple strategy example.
// Pine Script v5

//@version=5
strategy(title='3 Line Strike [TTF] - Strategy with ATR and ADX Filter',
     shorttitle='3LS Strategy [TTF]',
     overlay=true,
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     pyramiding=0)

// -----------------------------------------------------------------------------
//                               INPUTS
// -----------------------------------------------------------------------------

// ATR and ADX Inputs
atrLength = input.int(title='ATR Length', defval=14, group='ATR & ADX')
adxLength = input.int(title='ADX Length', defval=14, group='ATR & ADX')
adxThreshold = input.float(title='ADX Threshold', defval=25, group='ATR & ADX')

// ### 3 Line Strike
showBear3LS = input.bool(title='Show Bearish 3 Line Strike', defval=true, group='3 Line Strike',
     tooltip="Bearish 3 Line Strike (3LS-Bear) = 3 zelené sviečky, potom veľká červená sviečka (engulfing).")
showBull3LS = input.bool(title='Show Bullish 3 Line Strike', defval=true, group='3 Line Strike',
     tooltip="Bullish 3 Line Strike (3LS-Bull) = 3 červené sviečky, potom veľká zelená sviečka (engulfing).")

// -----------------------------------------------------------------------------
//                          CALCULATIONS
// -----------------------------------------------------------------------------

// Calculate ATR
atr = ta.atr(atrLength)

// Calculate ADX components manually
tr = ta.tr(true)
plusDM = ta.change(high) > ta.change(low) and ta.change(high) > 0 ? ta.change(high) : 0
minusDM = ta.change(low) > ta.change(high) and ta.change(low) > 0 ? ta.change(low) : 0
smoothedPlusDM = ta.rma(plusDM, adxLength)
smoothedMinusDM = ta.rma(minusDM, adxLength)
smoothedTR = ta.rma(tr, adxLength)

plusDI = (smoothedPlusDM / smoothedTR) * 100
minusDI = (smoothedMinusDM / smoothedTR) * 100

dx = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adx = ta.rma(dx, adxLength)

// Helper Functions
getCandleColorIndex(barIndex) =>
    int ret = na
    if (close[barIndex] > open[barIndex])
        ret := 1
    else if (close[barIndex] < open[barIndex])
        ret := -1
    else
        ret := 0
    ret

isEngulfing(checkBearish) =>
    sizePrevCandle = close[1] - open[1]
    sizeCurrentCandle = close - open
    isCurrentLargerThanPrevious = math.abs(sizeCurrentCandle) > math.abs(sizePrevCandle)

    if checkBearish
        isGreenToRed = (getCandleColorIndex(0) < 0) and (getCandleColorIndex(1) > 0)
        isCurrentLargerThanPrevious and isGreenToRed
    else
        isRedToGreen = (getCandleColorIndex(0) > 0) and (getCandleColorIndex(1) < 0)
        isCurrentLargerThanPrevious and isRedToGreen

isBearishEngulfing() => isEngulfing(true)
isBullishEngulfing() => isEngulfing(false)

is3LSBear() =>
    is3LineSetup = (getCandleColorIndex(1) > 0) and (getCandleColorIndex(2) > 0) and (getCandleColorIndex(3) > 0)
    is3LineSetup and isBearishEngulfing()

is3LSBull() =>
    is3LineSetup = (getCandleColorIndex(1) < 0) and (getCandleColorIndex(2) < 0) and (getCandleColorIndex(3) < 0)
    is3LineSetup and isBullishEngulfing()

// Signals
is3LSBearSig = is3LSBear() and adx > adxThreshold
is3LSBullSig = is3LSBull() and adx > adxThreshold

// Take Profit and Stop Loss
longTP = close + 2 * atr
longSL = close - 1 * atr
shortTP = close - 2 * atr
shortSL = close + 1 * atr

// -----------------------------------------------------------------------------
//                          STRATEGY ENTRY PRÍKAZY
// -----------------------------------------------------------------------------
if (showBull3LS and is3LSBullSig)
    strategy.entry("3LS_Bull", strategy.long, comment="3LS Bullish")
    strategy.exit("Exit Bull", from_entry="3LS_Bull", limit=longTP, stop=longSL)

if (showBear3LS and is3LSBearSig)
    strategy.entry("3LS_Bear", strategy.short, comment="3LS Bearish")
    strategy.exit("Exit Bear", from_entry="3LS_Bear", limit=shortTP, stop=shortSL)