En la carga de los recursos... Cargando...

Estrategia de negociación cuantitativa RSI dinámica con cruce de medias móviles múltiples

El autor:¿ Qué pasa?, fecha: 2025-01-17 16:14:38
Las etiquetas:Indicador de riesgo- ¿Qué es?La SMAEl EMALa WMAEl número de personas afectadasEl RMA

 Dynamic RSI Quantitative Trading Strategy with Multiple Moving Average Crossover

Resumen general

Se trata de una estrategia de negociación cuantitativa que combina el índice de fuerza relativa (RSI) con múltiples promedios móviles. La estrategia identifica principalmente las tendencias del mercado mediante el monitoreo de señales cruzadas entre diferentes tipos de promedios móviles (incluidos SMA, EMA, WMA y SMMA) en el indicador RSI, mientras que utiliza las zonas de sobrecompra y sobreventa de RSI como criterios de decisión suplementarios.

Principios de estrategia

La estrategia incluye varios pasos clave de cálculo: 1. Cálcule el RSI de 14 períodos con el nivel de sobrecompra en 70 y el nivel de sobreventa en 30 Calcule tres promedios móviles diferentes en la curva RSI: - MA1: período de 20 años, elección de SMA/EMA/WMA/SMMA - MA2: período de 50 años, elección de SMA/EMA/WMA/SMMA - MA3: período de 100 años, elección de SMA/EMA/WMA/SMMA Reglas de generación de señales comerciales: - Señales de compra: cuando el MA2 cruza el MA3 - Señales de venta: Cuando el MA2 cruza el nivel del MA3 4. Detectar simultáneamente las divergencias del RSI para una referencia adicional

Ventajas estratégicas

  1. La validación cruzada de múltiples indicadores técnicos mejora la fiabilidad de la señal
  2. Tipos y parámetros de medias móviles flexibles
  3. La detección de la divergencia del índice de rendimiento contribuye a identificar los puntos de inflexión del mercado a tiempo
  4. Gestión de posiciones basada en el porcentaje para un control eficaz del riesgo
  5. Excelente visualización para el análisis y la prueba posterior

Riesgos estratégicos

  1. Los cruces de la media móvil pueden tener efectos de retraso
  2. Pueden producirse señales falsas en mercados variados
  3. Distorción del índice de interés de las inversiones en determinadas condiciones de mercado
  4. La selección incorrecta de parámetros puede dar lugar a señales comerciales excesivas o insuficientes Mitigación del riesgo:
  • Recomendar la validación cruzada con las tendencias y el volumen del mercado
  • Optimizar la frecuencia de negociación mediante el ajuste del parámetro de la media móvil
  • Establecer niveles de stop-loss y take-profit para el control de riesgos

Direcciones para la optimización de la estrategia

  1. Optimización del filtro de señal:
  • Añadir indicadores de confirmación de tendencia
  • Incorporar el análisis de volumen
  1. Optimización dinámica de parámetros:
  • Ajuste automático de los parámetros RSI y MA en función de la volatilidad del mercado
  • Introducción de métodos de cálculo del período adaptativo
  1. Optimización del control de riesgos:
  • Desarrollar mecanismos dinámicos de detención de pérdidas y obtención de beneficios
  • Diseño de un sistema dinámico de gestión de la posición

Resumen de las actividades

La estrategia construye un sistema de negociación adaptativo mediante la combinación de RSI y múltiples promedios móviles. Sus principales ventajas se encuentran en la validación cruzada de múltiples indicadores técnicos y la configuración flexible de parámetros, mientras que se debe prestar atención al retraso de los promedios móviles y los impactos de las condiciones del mercado en el rendimiento de la estrategia. A través de la optimización continua y el control de riesgos, esta estrategia promete un rendimiento estable en la negociación real.


/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy(title="Relative Strength Index with MA Strategy", shorttitle="RSI-MA Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=200)

// RSI Inputs
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
calculateDivergence = input.bool(false, title="Calculate Divergence", group="RSI Settings", tooltip="Calculating divergences is needed in order for divergence alerts to fire.")

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

// RSI Plot
plot(rsi, "RSI", color=#7E57C2)
hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
hline(30, "RSI Lower Band", color=#787B86)
fill(hline(70), hline(30), color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")

// RSI-based MA Inputs
grpRSIMovingAverages = "RSI Moving Averages"
ma1Length = input.int(20, title="MA1 Length", group=grpRSIMovingAverages)
ma2Length = input.int(50, title="MA2 Length", group=grpRSIMovingAverages)
ma3Length = input.int(100, title="MA3 Length", group=grpRSIMovingAverages)
ma1Type = input.string("SMA", title="MA1 Type", options=["SMA", "EMA", "WMA", "SMMA"], group=grpRSIMovingAverages)
ma2Type = input.string("EMA", title="MA2 Type", options=["SMA", "EMA", "WMA", "SMMA"], group=grpRSIMovingAverages)
ma3Type = input.string("WMA", title="MA3 Type", options=["SMA", "EMA", "WMA", "SMMA"], group=grpRSIMovingAverages)

// MA Calculation Function
calcMA(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "WMA" => ta.wma(source, length)
        "SMMA" => ta.rma(source, length)

// MA Calculations
ma1 = calcMA(rsi, ma1Length, ma1Type)
ma2 = calcMA(rsi, ma2Length, ma2Type)
ma3 = calcMA(rsi, ma3Length, ma3Type)

// MA Plots
plot(ma1, title="RSI MA1", color=color.blue)
plot(ma2, title="RSI MA2", color=color.green)
plot(ma3, title="RSI MA3", color=color.red)

// Divergence (Retained from original script)
lookbackRight = 5
lookbackLeft = 5
rangeUpper = 60
rangeLower = 5
bearColor = color.red
bullColor = color.green
textColor = color.white
noneColor = color.new(color.white, 100)

_inRange(bool cond) =>
    bars = ta.barssince(cond)
    rangeLower <= bars and bars <= rangeUpper

plFound = false
phFound = false

bullCond = false
bearCond = false

rsiLBR = rsi[lookbackRight]

if calculateDivergence
    // Regular Bullish
    plFound := not na(ta.pivotlow(rsi, lookbackLeft, lookbackRight))    
    rsiHL = rsiLBR > ta.valuewhen(plFound, rsiLBR, 1) and _inRange(plFound[1])
    lowLBR = low[lookbackRight]
    priceLL = lowLBR < ta.valuewhen(plFound, lowLBR, 1)
    bullCond := priceLL and rsiHL and plFound

    // Regular Bearish
    phFound := not na(ta.pivothigh(rsi, lookbackLeft, lookbackRight))
    rsiLH = rsiLBR < ta.valuewhen(phFound, rsiLBR, 1) and _inRange(phFound[1])
    highLBR = high[lookbackRight]
    priceHH = highLBR > ta.valuewhen(phFound, highLBR, 1)
    bearCond := priceHH and rsiLH and phFound

// plot(
//      plFound ? rsiLBR : na,
//      offset=-lookbackRight,
//      title="Regular Bullish",
//      linewidth=2,
//      color=(bullCond ? bullColor : noneColor),
//      display = display.pane
//      )

plotshape(
     bullCond ? rsiLBR : na,
     offset=-lookbackRight,
     title="Regular Bullish Label",
     text=" Bull ",
     style=shape.labelup,
     location=location.absolute,
     color=bullColor,
     textcolor=textColor
     )

// plot(
//      phFound ? rsiLBR : na,
//      offset=-lookbackRight,
//      title="Regular Bearish",
//      linewidth=2,
//      color=(bearCond ? bearColor : noneColor),
//      display = display.pane
//      )

plotshape(
     bearCond ? rsiLBR : na,
     offset=-lookbackRight,
     title="Regular Bearish Label",
     text=" Bear ",
     style=shape.labeldown,
     location=location.absolute,
     color=bearColor,
     textcolor=textColor
     )

alertcondition(bullCond, title='Regular Bullish Divergence', message="Found a new Regular Bullish Divergence, `Pivot Lookback Right` number of bars to the left of the current bar.")
alertcondition(bearCond, title='Regular Bearish Divergence', message='Found a new Regular Bearish Divergence, `Pivot Lookback Right` number of bars to the left of the current bar.')

// ----- MUA/BÁN -----

// Điều kiện Mua: MA2 cắt lên MA3 và MA3 < 55
buyCondition = ta.crossover(ma2, ma3) 

// Điều kiện Bán: MA2 cắt xuống MA3 và MA3 > 40
sellCondition = ta.crossunder(ma2, ma3)

// Thực hiện lệnh Mua/Bán
if (buyCondition)
    strategy.entry("Buy", strategy.long, comment="Buy Signal")

if (sellCondition)
    strategy.close("Buy", comment="Sell Signal")



// ----- KẾT THÚC -----


Relacionados

Más.