Estratégia quantitativa de divergência dinâmica RSI

RSI ATR SL/TP risk management DIVERGENCE Pivot
Data de criação: 2025-04-25 14:57:31 última modificação: 2025-04-25 14:57:31
cópia: 0 Cliques: 455
2
focar em
319
Seguidores

Estratégia quantitativa de divergência dinâmica RSI Estratégia quantitativa de divergência dinâmica RSI

Visão geral

A estratégia de quantificação de desvio de dois eixos do RSI é uma estratégia de negociação avançada para identificar oportunidades de reversão em potencial, detectando o comportamento do preço e os desvios de alta e baixa regulares entre o índice relativamente forte (RSI). A estratégia usa um algoritmo de detecção de pontos de pivô automatizado, combinando dois diferentes métodos de gestão de stop loss/stop loss para criar automaticamente posições quando os sinais de desvio são confirmados. O núcleo da estratégia consiste em verificar o fenômeno de desvio entre o preço e o indicador RSI por meio de cálculos matemáticos precisos e adotar mecanismos dinâmicos de gerenciamento de risco para garantir que cada transação siga o risco de retorno previsto.

Princípio da estratégia

  1. Módulo de cálculo do RSI: Calcule o valor do RSI de 14 ciclos (modificável) usando o preço de fechamento como fonte de entrada padrão (configurável) utilizando o método de suavização de Wilder.
  2. Detecção de pontos centrais:
    • Utilize uma janela de deslizamento de 5 ciclos (regulado) para detectar os pontos altos e baixos locais do RSI
    • A função ta.barssince assegura o intervalo de 5 a 60 linhas K entre os pontos do eixo central
  3. A lógica da confirmação:
    • Os indicadores de preços estão em baixa e o RSI está em baixa
    • Baixo retrocede: preços criam alta e RSI forma alta mais baixa
  4. Sistema de execução de transações:
    • Método de paragem de dois modos: baseado no ponto de oscilação ou na amplitude de oscilação ATR dos últimos 20 ciclos
    • Calculação de stop loss dinâmico: proporção de risco de retorno baseado na quantidade de risco multiplicada pela predefinição (default 2: 1)
  5. Sistema de visualização: marca todos os sinais de desvio efetivo no gráfico e mostra em tempo real a linha horizontal de stop loss (vermelho) e stop loss (verde) da posição atual.

Análise de vantagens

  1. Mecanismo de verificação multidimensional: exige que o preço e o RSI devem atender simultaneamente a uma determinada forma, e que o intervalo de tempo esteja dentro do limite predeterminado, reduzindo significativamente a probabilidade de falsos sinais.
  2. Gerenciamento de risco adaptativo:
    • O padrão de pontos de oscilação é adequado para mercados de tendência, e pode ser usado para capturar a tendência de uma faixa.
    • ATR Modelo para mercados de turbulência, ajustando automaticamente o Stop Loss em função da volatilidade
  3. Altura de configuração dos parâmetros: todos os parâmetros-chave (ciclo RSI, alcance de detecção do eixo central, taxa de retorno do risco, etc.) podem ser ajustados de acordo com as características do mercado.
  4. Gerenciamento de fundos científico: 10% de posicionamento por defeito, para evitar a exposição de risco excessivo em uma única transação.
  5. Feedback visual em tempo real: fornece suporte intuitivo à decisão de negociação por meio de marcadores gráficos e linhas de stop loss/stop loss dinâmicas.

Análise de Riscos

  1. Risco de atraso: RSI como um indicador de atraso, que pode produzir um sinal de atraso em um cenário unilateral agudo.
  2. Risco de mercado de choque: pode produzir falsos sinais consecutivos quando não há uma tendência clara. Solução: ativar o modo ATR e aumentar o multiplicador, ou um filtro de taxa de flutuação adicional.
  3. Risco de parâmetros de sobreajuste: combinações de parâmetros específicos podem ter um bom desempenho em dados históricos, mas falham no disco vivo.
  4. Risco de mercado extremo: a brecha de vazio pode causar perda de suspensão.
  5. Dependência do período de tempo: variação significativa de desempenho em diferentes períodos de tempo.

Direção de otimização

  1. Verificação de indicadores compostos: adicionar MACD ou indicadores de volume de transação como confirmação secundária, melhorando a qualidade do sinal.
  2. Ajuste de parâmetros dinâmicos: ajuste automático do ciclo RSI e do multiplicador ATR de acordo com a volatilidade do mercado
  3. Otimização de aprendizado de máquina: Otimização de conjuntos de parâmetros-chave usando algoritmos genéticos.
  4. Análise de múltiplos prazos: introdução de filtros de tendências para prazos mais altos.
  5. Gerenciamento dinâmico de posições: ajuste o tamanho das posições de acordo com a volatilidade para equilibrar o risco.
  6. Filtro de eventos: integração de dados do calendário econômico para evitar transações antes e depois da divulgação de dados importantes.

Resumir

A estratégia de quantificação do desvio do RSI em dois eixos oferece uma metodologia de negociação de reversão estruturada por meio da identificação sistematizada do desvio e do gerenciamento rigoroso do risco. Seu valor central reside na transformação dos conceitos tradicionais de análise técnica em regras de negociação quantificáveis e na adaptação de diferentes ambientes de mercado por meio de um mecanismo de parada de perda em dois modelos.

Código-fonte da estratégia
/*backtest
start: 2024-04-25 00:00:00
end: 2025-04-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/

//@version=6
strategy("RSI Divergence Strategy - AliferCrypto", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// === RSI Settings ===
rsiLength      = input.int(14, minval=1, title="RSI Length", group="RSI Settings", tooltip="Number of periods for RSI calculation")
rsiSource      = input.source(close, title="RSI Source", group="RSI Settings", tooltip="Price source used for RSI calculation")

// === Divergence Settings ===
lookLeft       = input.int(5, minval=1, title="Pivot Lookback Left", group="Divergence Settings", tooltip="Bars to the left for pivot detection")
lookRight      = input.int(5, minval=1, title="Pivot Lookback Right", group="Divergence Settings", tooltip="Bars to the right for pivot detection")
rangeLower     = input.int(5, minval=1, title="Min Bars Between Pivots", group="Divergence Settings", tooltip="Minimum bars between pivots to validate divergence")
rangeUpper     = input.int(60, minval=1, title="Max Bars Between Pivots", group="Divergence Settings", tooltip="Maximum bars between pivots to validate divergence")

// === SL/TP Method ===
method         = input.string("Swing", title="SL/TP Method", options=["Swing", "ATR"], group="SL/TP Settings", tooltip="Choose between swing-based or ATR-based stop and target")

// === Swing Settings ===
swingLook      = input.int(20, minval=1, title="Swing Lookback (bars)", group="Swing Settings", tooltip="Bars to look back for swing high/low")
swingMarginPct = input.float(1.0, minval=0.0, title="Swing Margin (%)", group="Swing Settings", tooltip="Margin around swing levels as percentage of price")
rrSwing        = input.float(2.0, title="R/R Ratio (Swing)", group="Swing Settings", tooltip="Risk/reward ratio when using swing-based method")

// === ATR Settings ===
atrLen         = input.int(14, minval=1, title="ATR Length", group="ATR Settings", tooltip="Number of periods for ATR calculation")
atrMult        = input.float(1.5, minval=0.1, title="ATR SL Multiplier", group="ATR Settings", tooltip="Multiplier for ATR-based stop loss calculation")
rrAtr          = input.float(2.0, title="R/R Ratio (ATR)", group="ATR Settings", tooltip="Risk/reward ratio when using ATR-based method")

// === RSI Calculation ===
_d    = ta.change(rsiSource)
up    = ta.rma(math.max(_d, 0), rsiLength)
down  = ta.rma(-math.min(_d, 0), rsiLength)
rsi   = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

// === Divergence Detection ===
defPl      = not na(ta.pivotlow(rsi, lookLeft, lookRight))
defPh      = not na(ta.pivothigh(rsi, lookLeft, lookRight))
rsiAtRR   = rsi[lookRight]
barsPl    = ta.barssince(defPl)
barsPl1   = barsPl[1]
inRangePL = barsPl1 >= rangeLower and barsPl1 <= rangeUpper
barsPh    = ta.barssince(defPh)
barsPh1   = barsPh[1]
inRangePH = barsPh1 >= rangeLower and barsPh1 <= rangeUpper
prevPlRsi   = ta.valuewhen(defPl, rsiAtRR, 1)
prevPhRsi   = ta.valuewhen(defPh, rsiAtRR, 1)
prevPlPrice = ta.valuewhen(defPl, low[lookRight], 1)
prevPhPrice = ta.valuewhen(defPh, high[lookRight], 1)
bullCond    = defPl and low[lookRight] < prevPlPrice and rsiAtRR > prevPlRsi and inRangePL
bearCond    = defPh and high[lookRight] > prevPhPrice and rsiAtRR < prevPhRsi and inRangePH

plotshape(bullCond, title="Bullish Divergence", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny)
plotshape(bearCond, title="Bearish Divergence", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny)

// === Entries ===
if bullCond
    strategy.entry("Long", strategy.long)
if bearCond
    strategy.entry("Short", strategy.short)

// === Pre-calculate SL/TP components ===
swingLow    = ta.lowest(low, swingLook)
swingHigh   = ta.highest(high, swingLook)
atrValue    = ta.atr(atrLen)

// === SL/TP Calculation & Exits ===
var float slPrice = na
var float tpPrice = na
var float rr      = na

// Long exits
if strategy.position_size > 0
    entryPrice = strategy.position_avg_price
    if method == "Swing"
        slPrice := swingLow * (1 - swingMarginPct / 100)
        rr      := rrSwing
    else
        slPrice := entryPrice - atrValue * atrMult
        rr      := rrAtr
    risk     = entryPrice - slPrice
    tpPrice  := entryPrice + risk * rr
    strategy.exit("Exit Long", from_entry="Long", stop=slPrice, limit=tpPrice)

// Short exits
if strategy.position_size < 0
    entryPrice = strategy.position_avg_price
    if method == "Swing"
        slPrice := swingHigh * (1 + swingMarginPct / 100)
        rr      := rrSwing
    else
        slPrice := entryPrice + atrValue * atrMult
        rr      := rrAtr
    risk     = slPrice - entryPrice
    tpPrice  := entryPrice - risk * rr
    strategy.exit("Exit Short", from_entry="Short", stop=slPrice, limit=tpPrice)

// === Plot SL/TP Levels ===
plot(strategy.position_size != 0 ? slPrice : na, title="Stop Loss", style=plot.style_linebr, color=color.red)
plot(strategy.position_size != 0 ? tpPrice : na, title="Take Profit", style=plot.style_linebr, color=color.green)

// === Alerts ===
alertcondition(bullCond, title="Bull RSI Divergence", message="Bullish RSI divergence detected")
alertcondition(bearCond, title="Bear RSI Divergence", message="Bearish RSI divergence detected")