Estratégia de combinação de trailing stop loss e crossover de média móvel ATR dinâmico

EMA ATR RSI SMA VOLUME
Data de criação: 2025-02-18 15:48:18 última modificação: 2025-02-18 15:48:18
cópia: 1 Cliques: 504
1
focar em
1617
Seguidores

Estratégia de combinação de trailing stop loss e crossover de média móvel ATR dinâmico

Visão geral

A estratégia é um sistema de negociação complexo baseado no ATR que rastreia de forma dinâmica o stop loss e o cruzamento da linha de equilíbrio, combinando múltiplos indicadores técnicos para filtragem de transações e controle de risco. A estratégia funciona em um período de 15 minutos, determinando sinais de negociação por meio de indicadores multidimensionais, como a linha de equilíbrio EMA, a volatilidade ATR, o indicador RSI e o volume de transação, e gerencia o risco de perda usando um método de rastreamento dinâmico.

Princípio da estratégia

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

  1. A entrada é feita através de um mecanismo de filtragem múltipla:
    • Preço acima/abaixo da EMA de 100 ciclos
    • Confirmação da tendência de 100 EMA em um período de 1 hora
    • Cruzamento de preços com a ATR traçando a linha de stop loss
    • RSI na zona neutra entre 30 e 70
    • O volume de transações atual é maior do que a média de 20 ciclos
  2. Sistema de controlo de riscos:
    • Cessos de rastreamento dinâmico baseados em 3x ATR
    • Estabelecer o dobro do ATR como meta de lucro
  3. Mecanismo de saída:
    • EMA de 15 e 17 ciclos de sinal de cruzamento de duas linhas K consecutivas
    • Trigger tracking stop loss ou meta de ganho

Vantagens estratégicas

  1. Verificação cruzada de múltiplos indicadores técnicos para reduzir sinais falsos
  2. Filtragem de tendências de múltiplos períodos para maior precisão de direção de negociação
  3. O ATR dinâmico pode ser ajustado de acordo com a volatilidade do mercado
  4. Objetivo de lucro vinculado a stop loss, assegurando um equilíbrio dinâmico entre o risco e o lucro
  5. Utilize o cruzamento da EMA como sinal de partida para evitar saídas prematuras
  6. Confirmação de volume aumenta a eficácia das transações

Risco estratégico

  1. Condições de filtragem múltiplas podem levar a oportunidades de negociação perdidas
  2. ATR pode ser exagerado em mercados de alta volatilidade
  3. A sequência de partidas cruzadas na EMA pode levar a um retorno parcial dos lucros.
  4. Dependência de tendências de mercado, o mercado pode ser fraco em momentos de turbulência
  5. Alta complexidade computacional e risco de atraso na execução

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

  1. Introdução de mecanismos de otimização de parâmetros de adaptação:
    • O ATR pode ser multiplicado de acordo com a dinâmica de diferentes situações de mercado
    • O ciclo EMA pode ser automaticamente otimizado com base na volatilidade do mercado
  2. Aumentar a identificação do estado do mercado:
    • Adição de indicadores de intensidade de tendência
    • Introdução do juízo de ciclo de flutuação
  3. Melhore o controle de riscos:
    • Realização de construção e redução de armazéns por lotes
    • Aumentar o limite máximo de tempo de detenção
  4. Otimizar o mecanismo de saída:
    • Alteração dinâmica dos objetivos de lucro em conjugação com a intensidade da tendência
    • Adição de mecanismo de tempo de parada

Resumir

A estratégia de construir um sistema de negociação relativamente completo através da aplicação integrada de vários indicadores técnicos e meios de controle de risco. A principal característica da estratégia é a adoção de stop loss de rastreamento ATR dinâmico para se adaptar à volatilidade do mercado, ao mesmo tempo em que utiliza filtragem de múltiplos indicadores e cruzamento de linhas uniformes para confirmar os sinais de negociação.

Código-fonte da estratégia
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-16 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='UT Bot Strategy with 100 EMA Filter, Trailing Stop and EMA Cross Exit', overlay=true)

// Inputs
a = input(1, title='Key Value. \'This changes the sensitivity\'')
c = input(10, title='ATR Period')
h = input(false, title='Signals from Heikin Ashi Candles')

// Higher timeframe trend filter (1-hour)
higherTimeframeEMA = request.security(syminfo.tickerid, "60", ta.ema(close, 100)) // 1-hour EMA

xATR = ta.atr(c)

// Adjusting ATR multiplier for Gold on 15-minute timeframe
atrMultiplier = 3
nLoss = atrMultiplier * xATR  // ATR-based loss calculation

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

// Trailing Stop Calculation
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

// Define 100 EMA
ema100 = ta.ema(src, 100)
plot(ema100, title="100 EMA", color=color.black, linewidth=2)

// Define 15 EMA and 17 EMA for exit conditions
ema15 = ta.ema(src, 15)
ema17 = ta.ema(src, 17)
plot(ema15, title="15 EMA", color=color.blue, linewidth=1)
plot(ema17, title="17 EMA", color=color.purple, linewidth=1)

// Define Entry Conditions
longCondition = src > ema100 and src > xATRTrailingStop and close > higherTimeframeEMA and ta.crossover(ta.ema(src, 1), xATRTrailingStop)
shortCondition = src < ema100 and src < xATRTrailingStop and close < higherTimeframeEMA and ta.crossover(xATRTrailingStop, ta.ema(src, 1))

// RSI Filter
rsi = ta.rsi(close, 14)
longCondition := longCondition and rsi > 30 and rsi < 70  // Ensure RSI is not in extreme conditions
shortCondition := shortCondition and rsi > 30 and rsi < 70

// Volume Filter
volumeMA = ta.sma(volume, 20)
longCondition := longCondition and volume > volumeMA
shortCondition := shortCondition and volume > volumeMA

// ** Trailing Stop Setup **
trailOffset = nLoss  // The trailing stop distance is based on ATR, which is already calculated
trailPriceLong = close - trailOffset  // The trailing stop for long trades is below the entry price
trailPriceShort = close + trailOffset  // The trailing stop for short trades is above the entry price

// Define Take Profit (TP) condition
takeProfitMultiplier = 2  // This sets the take profit at 2x the ATR from the entry
takeProfitLong = close + takeProfitMultiplier * nLoss
takeProfitShort = close - takeProfitMultiplier * nLoss

// Strategy Entries
if (longCondition)
    strategy.entry('long', strategy.long)

if (shortCondition)
    strategy.entry('short', strategy.short)

// Exit conditions for 15 and 17 EMA cross (must be consecutive on two bars)
exitLong = ta.crossover(ema15, ema17) and ta.crossover(ema15[1], ema17[1])  // Exit long if both the current and previous bars have 15 EMA crossing above 17 EMA
exitShort = ta.crossunder(ema15, ema17) and ta.crossunder(ema15[1], ema17[1])  // Exit short if both the current and previous bars have 15 EMA crossing below 17 EMA

// Apply trailing stop and take profit along with EMA cross exit
strategy.exit("Exit Long", "long", trail_price=trailPriceLong, trail_offset=trailOffset, limit=takeProfitLong)  // Long exit with trailing stop and TP
strategy.exit("Exit Short", "short", trail_price=trailPriceShort, trail_offset=trailOffset, limit=takeProfitShort)  // Short exit with trailing stop and TP

// Close positions when 15 and 17 EMAs cross consecutively
strategy.close("long", when=exitLong)
strategy.close("short", when=exitShort)

// Alert condition for trade closure
longExitAlert = exitLong  // Only trigger alert for long if both consecutive bars show crossover
shortExitAlert = exitShort  // Only trigger alert for short if both consecutive bars show crossunder

alertcondition(longExitAlert, title="Close Long Trade", message="Long trade closed. 15 EMA crossed above 17 EMA on two consecutive bars.")
alertcondition(shortExitAlert, title="Close Short Trade", message="Short trade closed. 15 EMA crossed below 17 EMA on two consecutive bars.")