Estratégia de acompanhamento de tendência de momentum de três linhas combinada com filtro ADX

ADX ATR TMA TP SL 3LS
Data de criação: 2025-02-20 17:46:30 última modificação: 2025-02-20 17:46:30
cópia: 0 Cliques: 459
2
focar em
319
Seguidores

Estratégia de acompanhamento de tendência de momentum de três linhas combinada com filtro ADX Estratégia de acompanhamento de tendência de momentum de três linhas combinada com filtro ADX

Visão geral

A estratégia é um sistema de negociação de acompanhamento de tendências baseado em três linhas de ruptura e filtragem de tendências ADX. A estratégia identifica a força da tendência através da identificação de três rupturas consecutivas após o equilíbrio, em combinação com o indicador ADX, e usa o ATR para definir dinamicamente a posição de parada.

Princípio da estratégia

A lógica central da estratégia inclui os seguintes elementos-chave:

  1. Identificação de forma de ruptura de três linhas: a forma de cabeça múltipla requer uma ruptura de linha maior depois de três linhas consecutivas; a forma de cabeça vazia requer uma ruptura de linha maior depois de três linhas consecutivas.
  2. Confirmação da força da tendência do ADX: O indicador ADX é usado para determinar a força da tendência atual, gerando um sinal de negociação somente quando o valor do ADX excede o limiar definido (default 25).
  3. ATR Dinâmico Stop Loss: Calcule o stop e stop loss posições usando o ATR Dinâmico, onde o stop é definido como 2x ATR e o stop loss é definido como 1x ATR.
  4. Lógica de Execução de Negociação: O sistema executa automaticamente a operação de abertura de posição quando os requisitos de reconhecimento de forma e intensidade de tendência são satisfeitos, e, ao mesmo tempo, define o correspondente Stop Loss Order.

Vantagens estratégicas

  1. Alta confiabilidade do sinal: a dupla confirmação de indicadores de tendência e de configuração de preços aumenta significativamente a confiabilidade do sinal de negociação.
  2. Controle de risco racional: com a configuração dinâmica do ATR, o stop loss pode ser ajustado para os parâmetros de controle de risco de acordo com a volatilidade do mercado.
  3. Alto grau de sistematização: a lógica da estratégia é clara, os parâmetros são ajustáveis, facilitando a transação sistematizada.
  4. Adaptabilidade: pode ser aplicada a diferentes mercados e períodos de tempo, com boa universalidade.

Risco estratégico

  1. Risco de Falso Breakout: Falso breakout pode ocorrer em mercados em turbulência, resultando em perda de negociação.
  2. Risco de deslizamento: pode haver deslizamentos significativos em mercados com pouca liquidez devido à estratégia de entrada por preço de mercado.
  3. Sensibilidade de parâmetros: os efeitos da estratégia são sensíveis a parâmetros como o limiar ADX e o ciclo ATR, que precisam ser otimizados para diferentes mercados.
  4. Dependência de tendência: a estratégia pode não funcionar bem em mercados turbulentos e é mais adequada para um ambiente de mercado com tendências evidentes.

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

  1. Reconhecimento de forma aprimorado: pode-se adicionar mais condições de verificação de forma de preço, como a proporção de entes e sombras de um eixo de linha de fenda.
  2. Melhorias na confirmação de tendências: outros indicadores de tendências, como MACD ou cruzamento de médias móveis, podem ser introduzidos como confirmação auxiliar.
  3. Optimização de stop loss: pode-se ajustar o múltiplo ATR de acordo com a dinâmica de diferentes características do mercado, ou adotar o método de rastreamento de stop loss.
  4. Otimização de horários de negociação: pode ser adicionado um filtro de horários de negociação para evitar negociações em momentos de maior volatilidade do mercado.

Resumir

A estratégia de acompanhamento de tendências de dinâmica de ruptura de três linhas é um sistema de negociação completo que combina formas clássicas de preços e indicadores técnicos. Através do filtro de tendências ADX e do controle de risco dinâmico ATR, a estratégia controla melhor o risco ao mesmo tempo em que garante oportunidades de negociação. Apesar de algumas limitações, a estratégia tem um bom valor de aplicação em campo, com otimização de parâmetros e melhorias de estratégia razoáveis.

Código-fonte da estratégia
/*backtest
start: 2024-08-11 00:00:00
end: 2025-02-19 00:00:00
period: 1h
basePeriod: 1h
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)