Estrategia cuantitativa de divergencia dinámica del RSI

RSI ATR SL/TP risk management DIVERGENCE Pivot
Fecha de creación: 2025-04-25 14:57:31 Última modificación: 2025-04-25 14:57:31
Copiar: 0 Número de Visitas: 455
2
Seguir
319
Seguidores

Estrategia cuantitativa de divergencia dinámica del RSI Estrategia cuantitativa de divergencia dinámica del RSI

Descripción general

La estrategia de cuantificación de la desviación del doble eje RSI es una estrategia de negociación avanzada para identificar oportunidades de reversión potenciales mediante la detección de desviaciones de tendencia de alza y bajada entre el comportamiento del precio y el índice relativamente fuerte (RSI). La estrategia utiliza un algoritmo de detección de puntos centrales automatizados, que combina dos métodos diferentes de gestión de paradas/paradas para establecer automáticamente posiciones en la confirmación de señales de desviación.

Principio de estrategia

  1. Módulo de cálculo del RSI: Calcula el valor del RSI con el método de suavización Wilder de 14 ciclos, utilizando el precio de cierre como fuente de entrada predeterminada.
  2. La detección en el eje central:
    • Utiliza una ventana deslizante de 5 ciclos (de manera ajustable) para detectar los puntos altos y bajos locales del RSI
    • La función ta.barssince asegura un intervalo de 5 a 60 líneas K entre los puntos cardinales (rango ajustable)
  3. La lógica de la confirmación no es la misma:
    • Los analistas se desvían: la innovación de precios baja y el RSI forma bajos más altos
    • La baja se desvía: los precios crean altos y el RSI forma altos más bajos
  4. Sistemas de ejecución de transacciones:
    • Método de detención de doble modo: basado en los últimos 20 ciclos de punto de oscilación o amplitud de oscilación ATR
    • Calculación de la parada dinámica: proporción de riesgo por rendimiento predeterminado por la cantidad de riesgo (default 2: 1)
  5. Sistema de visualización: marca en el gráfico todas las señales de desviación efectivas y muestra en tiempo real las líneas horizontales de los paros (en rojo) y paros (en verde) de las posiciones actuales.

Análisis de las ventajas

  1. Mecanismo de verificación multidimensional: requiere que el precio y el RSI cumplan al mismo tiempo con una forma específica, y el intervalo de tiempo dentro de los límites predeterminados reduce considerablemente la probabilidad de señales falsas.
  2. Gestión de riesgos adaptada:
    • El modelo de punto de oscilación es adecuado para el mercado de tendencias, lo que permite capturar la tendencia de la banda de onda de manera efectiva.
    • El ATR es adecuado para mercados convulsivos y ajusta automáticamente el stop loss en función de la volatilidad.
  3. Altura de configuración de los parámetros: todos los parámetros clave (ciclo RSI, rango de detección del eje central, relación de riesgo-retorno, etc.) se pueden ajustar según las características del mercado.
  4. Gestión de fondos científica: el porcentaje de posiciones del 10% es el estándar para evitar la exposición excesiva al riesgo de una sola transacción.
  5. Comentarios visuales en tiempo real: Proporciona soporte intuitivo para la toma de decisiones comerciales a través de marcas gráficas y líneas de stop/stop dinámicas.

Análisis de riesgos

  1. Riesgo de retraso: El RSI como indicador de retraso, puede generar señales de retraso en un escenario unilateral agudo. Opciones de mitigación: combinación de filtros de tendencia o reducción del ciclo RSI.
  2. Riesgo de mercado en crisis: puede generar una serie de falsas señales cuando no hay una tendencia clara. Soluciones de mitigación: activar el modo ATR y aumentar el multiplicador, o un filtro de fluctuación adicional.
  3. Riesgo de sobreajuste de parámetros: una combinación específica de parámetros puede funcionar bien en los datos históricos pero fallar en el disco real. Solución de mitigación: realizar una prueba de estrés multivariada de varios ciclos.
  4. Riesgo de mercado extremo: el vacío de salto puede causar pérdidas en el cese de operaciones. Opciones de mitigación: evitar el comercio antes y después de eventos económicos importantes, o usar la cobertura de opciones.
  5. Dependencia del marco de tiempo: el rendimiento varía considerablemente según el período de tiempo. Solución de mitigación: Optimización de respuesta plena en el marco de tiempo objetivo.

Dirección de optimización

  1. Verificación de indicadores compuestos: agregar el MACD o el indicador de volumen de transacción como confirmación secundaria para mejorar la calidad de la señal.
  2. Ajuste de parámetros dinámicos: ajuste automático del ciclo RSI y el multiplicador ATR según la volatilidad del mercado.
  3. Optimización de aprendizaje automático: optimización de conjuntos de parámetros clave con algoritmos genéticos.
  4. Análisis de múltiples marcos de tiempo: filtrar las tendencias de los marcos de tiempo más altos.
  5. Gestión dinámica de posiciones: ajuste el tamaño de las posiciones según la volatilidad para lograr un equilibrio de riesgo.
  6. El filtro de eventos: integra datos del calendario económico para evitar transacciones antes y después de la publicación de datos importantes.

Resumir

La estrategia de cuantificación de la desviación del doble eje RSI ofrece un método de negociación de inversión estructurado a través de la identificación sistematizada de la desviación y la gestión estricta del riesgo. Su valor central consiste en convertir los conceptos tradicionales de análisis técnico en reglas de negociación cuantificables y adaptarse a diferentes entornos de mercado a través de un mecanismo de stop loss de doble modelo. El buen desempeño de la estrategia requiere tres elementos clave: optimización de parámetros adecuados, control de riesgo estricto y disciplina de ejecución consistente.

Código Fuente de la Estrategia
/*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")