Momentum ADX e RSI combinados com estratégia de trailing stop ajustável


Data de criação: 2023-10-09 15:36:07 última modificação: 2023-10-09 15:36:07
cópia: 1 Cliques: 711
1
focar em
1617
Seguidores

Visão geral

A estratégia combina o indicador de momentum com o indicador de força relativa (RSI) e é complementada por um mecanismo de parada de perdas que pode ser controlado para capturar a direção da tendência e controlar o risco. Compre mais quando o preço estiver em um momento forte; venda para zero quando o preço estiver em um momento fraco. A estratégia também define condições de parada de perda e usa o stop loss para rastrear o máximo nível de ganho, para bloquear os lucros e reduzir os prejuízos.

Princípio da estratégia

Linha de força e indicador RSI para julgar entrada

  • Utilizando o indicador de dinâmica ADX para determinar a direção da tendência dos preços

    • ADX maior que 20 indica tendência

    • Sinais de alarme quando + DI na linha passa-DI

    • Quando a linha -DI atravessa a linha +DI, é um sinal de baixa

  • Indicador RSI de sobrecompra e sobrevenda

    • RSI acima de 70 é um sinal de sobrecompra e baixa

    • RSI abaixo de 30 é zona de oversold, veja o sinal de bullish

Quando o ADX julga que a tendência existe e o indicador RSI emite um sinal de confirmação, execute a correspondente operação de hiperespaço.

Mecanismos de suspensão de perdas

A estratégia usa um mecanismo de parada de tração dinamicamente ajustável, que inclui dois parâmetros:

  • Proporção de ativação: Ativar o stop loss quando o preço atinge a proporção definida após a abertura da posição

  • Percentual de seguimento: percentual de distância entre o ponto de parada de seguimento e o maior lucro recente

Quando o preço atinge a condição de ativação, a linha de parada de seguimento segue o nível de ganho máximo. Quando o preço retrocede, a linha de parada de perda segue abaixo. Se a amplitude de retorno exceder a proporção de seguimento definida, a linha de parada de perda será acionada e todas as posições serão fechadas.

Análise de vantagens

  • Indicadores de dinâmica para determinar a direção da tendência e evitar o impacto das empresas

  • O RSI garante que não se perca a oportunidade de uma reversão

  • O que é o “Stop Loss Tracking” para bloquear lucros e reduzir perdas?

  • A estratégia é clara, concisa e fácil de entender.

  • Amplamente adaptável a diferentes mercados e períodos de tempo

Riscos e soluções

  • ADX julga falha de invasão e produz sinal errado

    • Ajustar os parâmetros do ADX para garantir uma verdadeira ruptura de tendência
  • O RSI gerou vários falsos sinais

    • Ajustar os parâmetros de sobrecompra e sobrevenda para evitar transações frequentes
  • Parâmetros de perda ajustáveis mal definidos

    • Parâmetros de otimização para encontrar o melhor nível de parada
  • A explosão foi muito forte.

    • Considere a combinação de lista de preços para evitar perdas

Otimização de ideias

  • Testar diferentes combinações de parâmetros ADX e RSI para otimizar a entrada

  • Detecção de diferentes pontos de ativação de stop loss e amplitude de rastreamento para otimizar os parâmetros

  • Considere a inclusão de filtros em outros indicadores para melhorar a qualidade do sinal

  • Testar diferentes mercados para determinar configurações de parâmetros gerais

Resumir

A estratégia integra análise de dinâmica, indicadores RSI e mecanismo de parada de seguimento, permitindo determinar efetivamente a direção da tendência, identificar pontos de reversão e controlar o risco de negociação. A estratégia é clara, simples de implementar e pode ser amplamente usada para negociação de tendências em mercados como ações, forex e moedas digitais.

Código-fonte da estratégia
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-03 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trailing Stop with RSI", overlay=true)

length = input.int(12, "Momentum Length")
price = close
momentum(seria, length) =>
    mom = seria - seria[length]
    mom
mom0 = momentum(price, length)
mom1 = momentum(mom0, 1)

rsiLength = input.int(14, "RSI Length")
rsiOverbought = input(70, "RSI Overbought Level")
rsiOversold = input(30, "RSI Oversold Level")

rsiValue = ta.rsi(close, rsiLength)

tsact = input.float(0.0, "Trailing Stop Activation (%)", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop (%)", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na

in_long = strategy.position_size > 0
in_short = strategy.position_size < 0

var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0

if in_long
    if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
    if not tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
if in_short
    if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    if not tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)

trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na

if (mom0 > 0 and mom1 > 0)
    strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
    strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
    strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
    strategy.cancel("MomSE")

tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail
    strategy.close_all()
if not strategy.opentrades
    array.clear(ts_)

rsiOverboughtCondition = rsiValue >= rsiOverbought
rsiOversoldCondition = rsiValue <= rsiOversold

if rsiOverboughtCondition
    strategy.close("SHORT", "SX")
    strategy.entry("LONG", strategy.long)

if rsiOversoldCondition
    strategy.close("LONG", "LX")
    strategy.entry("SHORT", strategy.short)

plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)