Estrategia de trading inteligente con cruce de indicadores duales adaptativos

RSI CCI EMA TIMEFRAME THRESHOLD
Fecha de creación: 2025-02-19 10:56:59 Última modificación: 2025-02-19 10:56:59
Copiar: 2 Número de Visitas: 435
1
Seguir
1617
Seguidores

Estrategia de trading inteligente con cruce de indicadores duales adaptativos

Descripción general

Esta es una estrategia de trading auto-adaptativa basada en indicadores de doble tecnología RSI y CCI. La estrategia construye un sistema de trading completo mediante la monitorización del estado cruzado de los indicadores RSI y CCI en diferentes períodos de tiempo, en combinación con la tendencia de la línea media EMA.

Principio de estrategia

La lógica central de la estrategia incluye los siguientes aspectos:

  1. Adaptación del ciclo de tiempo: ajuste dinámico de los parámetros del RSI y el CCI según diferentes períodos de tiempo (de 1 minuto a 4 horas).
  2. Confirmación de doble indicador: se utiliza una combinación de RSI (indicador de fuerza relativa) y CCI (indicador de avance) para filtrar la señal de negociación. La señal de negociación se genera cuando RSI y CCI cumplen al mismo tiempo con ciertas condiciones.
  3. Verificación de la continuidad de la señal: asegure la estabilidad de la señal mediante la configuración de la duración mínima (stayTimeFrames).
  4. Dinámico Stop Loss: el punto de parada de pérdidas se establece dinámicamente en función de los niveles de RSI y CCI al entrar.
  5. Confirmación de tendencia: utiliza el EMA de 200 ciclos como referencia de tendencia.

Ventajas estratégicas

  1. Adaptabilidad: la estrategia puede ajustar automáticamente los parámetros en función de diferentes períodos de tiempo, por lo que es más adaptable.
  2. Alta confiabilidad de la señal: La confiabilidad de la señal se ha mejorado significativamente mediante la confirmación cruzada de indicadores técnicos duales.
  3. Control de riesgos perfeccionado: El mecanismo de suspensión y parada de pérdidas dinámicas permite controlar los riesgos de manera efectiva.
  4. Las reglas de operación son claras: las condiciones de entrada y salida son claras, lo que facilita la operación práctica.
  5. Escalabilidad: El marco de la política es flexible y puede añadir nuevas condiciones de filtración según sea necesario.

Riesgo estratégico

  1. Sensibilidad de parámetros: los parámetros óptimos pueden variar en diferentes entornos de mercado.
  2. Riesgo de oscilación lateral: puede generar falsas señales durante la oscilación del mercado.
  3. Efectos del punto de deslizamiento: las transacciones de alta frecuencia pueden sufrir efectos del punto de deslizamiento.
  4. Se espera que el sistema de confirmación múltiple cause un pequeño retraso en el tiempo de entrada.
  5. Dependencia del entorno del mercado: el rendimiento en un mercado de fuerte tendencia puede ser superior al de un mercado de crisis.

Dirección de optimización de la estrategia

  1. Adaptación de parámetros: Se puede introducir un mecanismo de optimización de parámetros de adaptación, ajustando los parámetros de acuerdo con la situación dinámica del mercado.
  2. Identificación del entorno de mercado: agregar módulos de identificación del entorno de mercado para adoptar diferentes estrategias de negociación en diferentes estados de mercado.
  3. Adaptación de la tasa de fluctuación: Introduzca un indicador de la tasa de fluctuación y ajuste los parámetros de parada y pérdida según el tamaño de la tasa de fluctuación.
  4. Filtración de señales: agregar más indicadores técnicos y reconocimiento de formas para filtrar falsas señales.
  5. Gestión de riesgos: mejora de los programas de gestión de fondos, incremento de los tiempos de tenencia de las posiciones y control de las mismas.

Resumir

La estrategia combina las ventajas de los indicadores RSI y CCI para construir un sistema de negociación sólido. Las características de adaptación de la estrategia y el mecanismo de control de riesgos perfectos la hacen muy práctica. A través de la optimización y el perfeccionamiento continuos, la estrategia espera obtener un mejor rendimiento en el comercio real. Se recomienda a los operadores que realicen una adecuada retroalimentación y optimización de los parámetros antes de su uso en el mercado.

Código Fuente de la Estrategia
/*backtest
start: 2025-01-19 00:00:00
end: 2025-02-18 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("RSI & CCI Strategy with Alerts", overlay=true)

// Detect current chart timeframe
tf = timeframe.period

// Define settings for different timeframes
rsiLength = tf == "1" ? 30 : tf == "5" ? 30 : tf == "15" ? 30 : tf == "30" ? 30 : 30  // Default
cciLength = tf == "1" ? 15 : tf == "5" ? 20 : tf == "15" ? 20 : tf == "30" ? 20 : 20  // Default
cciBuyThreshold = tf == "1" ? -100 : tf == "5" ? -100 : tf == "15" ? -100 : tf == "30" ? -100 : -100
cciSellThreshold = tf == "1" ? 100 : tf == "5" ? 100 : tf == "15" ? 100 : tf == "30" ? 100 : 100  // Default
stayTimeFrames = tf == "1" ? 1 : tf == "5" ? 1 : tf == "15" ? 1 : tf == "30" ? 1 : tf == "240" ? 1 : 2  // Default
stayTimeFramesOver =tf == "1" ? 1 : tf == "5" ? 2 : tf == "15" ? 2 : tf == "30" ? 3 : 2 // Default

// Calculate RSI & CCI
rsi = ta.rsi(close, rsiLength)
rsiOver = ta.rsi(close, 14)
cci = ta.cci(close, cciLength)

// EMA 50
ema200 = ta.ema(close, 200)
plot(ema200, color=color.rgb(255, 255, 255), linewidth=2, title="EMA 200")

// CCI candle threshold tracking
var int cciEntryTimeLong = na
var int cciEntryTimeShort = na

// Store entry time when CCI enters the zone
if (cci < cciBuyThreshold)
    if na(cciEntryTimeLong)
        cciEntryTimeLong := bar_index
else
    cciEntryTimeLong := na

if (cci > cciSellThreshold)
    if na(cciEntryTimeShort)
        cciEntryTimeShort := bar_index
else
    cciEntryTimeShort := na

// Confirming CCI has stayed in the threshold for required bars
cciStayedBelowNeg100 = not na(cciEntryTimeLong) and (bar_index - cciEntryTimeLong >= stayTimeFrames) and rsi >= 53
cciStayedAbove100 = not na(cciEntryTimeShort) and (bar_index - cciEntryTimeShort >= stayTimeFrames) and rsi <= 47


// CCI & RSI candle threshold tracking for Buy Over and Sell Over signals
var int buyOverEntryTime = na
var int sellOverEntryTime = na

// Track entry time when RSI and CCI conditions are met
if (rsiOver <= 31 and cci <= -120)
    if na(buyOverEntryTime)
        buyOverEntryTime := bar_index
else
    buyOverEntryTime := na

if (rsiOver >= 69 and cci >= 120)
    if na(sellOverEntryTime)
        sellOverEntryTime := bar_index
else
    sellOverEntryTime := na

// Confirm that conditions are met for the required stayTimeFrames
buyOverCondition = not na(buyOverEntryTime) and (bar_index - buyOverEntryTime >= stayTimeFramesOver)
sellOverCondition = not na(sellOverEntryTime) and (bar_index - sellOverEntryTime <= stayTimeFramesOver)

//Buy and sell for over bought or sell 
conditionOverBuy = buyOverCondition
conditionOverSell = sellOverCondition

// Buy and sell conditions
buyCondition = cciStayedBelowNeg100
sellCondition = cciStayedAbove100

// // Track open positions
var bool isLongOpen = false
var bool isShortOpen = false

// // Strategy logic for backtesting
// if (buyCondition and not isLongOpen)
//     strategy.entry("Long", strategy.long)
//     isLongOpen := true
//     isShortOpen := false

// if (sellCondition and not isShortOpen)
//     strategy.entry("Short", strategy.short)
//     isShortOpen := true
//     isLongOpen := false

// // Close positions based on EMA 50
// if (isLongOpen and exitLongCondition)
//     strategy.close("Long")
//     isLongOpen := false

// if (isShortOpen and exitShortCondition)
//     strategy.close("Short")
//     isShortOpen := false



// Track RSI at position entry
var float entryRSILong = na
var float entryRSIShort = na

// Track CCI at position entry
var float entryCCILong = na
var float entryCCIShort = na

if (buyOverCondition and not isLongOpen)
    strategy.entry("Long", strategy.long)
    entryRSILong := rsi  // Store RSI at entry
    entryCCILong := cci
    isLongOpen := true
    isShortOpen := false

if (sellOverCondition and not isShortOpen)
    strategy.entry("Short", strategy.short)
    entryRSIShort := rsi  // Store RSI at entry
    entryCCIShort := cci  // Stpre CCI at entry
    isShortOpen := true
    isLongOpen := false

exitLongRSICondition = isLongOpen and not na(entryRSILong) and rsi >= (entryRSILong + 12)  or rsi <= (entryRSILong -8)
exitShortRSICondition = isShortOpen and not na(entryRSIShort) and rsi <= (entryRSIShort - 12)  or rsi >= (entryRSIShort +8)

exitLongCCICondition = isLongOpen and not na(entryCCILong) and cci <= (entryCCILong -100)
exitShortCCICondition = isShortOpen and not na(entryCCIShort) and cci >= (entryCCIShort +100)

// Close positions based on EMA 50 or RSI change
if (isLongOpen and (exitLongRSICondition) or (exitLongCCICondition))
    strategy.close("Long")
    isLongOpen := false
    entryRSILong := na
    entryCCILong := na
    isLongOpen := false

if (isShortOpen and (exitShortRSICondition) or (exitShortCCICondition))
    strategy.close("Short")
    isShortOpen := false
    entryRSIShort := na
    entryCCIShort := na
    isShortOpen := false



// Plot buy and sell signals
plotshape(buyCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.large, title="Buy Signal", text="BUY")
plotshape(sellCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.large, title="Sell Signal", text="SELL")

//Plot buy and sell OverBought
plotshape(conditionOverBuy, style=shape.labelup, location=location.belowbar, color=color.rgb(255, 238, 0), size=size.large, title="OverBuy Signal", text="Over Sell")
plotshape(conditionOverSell, style=shape.labeldown, location=location.abovebar, color=color.rgb(186, 40, 223), size=size.large, title="OverSell Signal", text="Over Buy")

// Alerts
alertcondition(buyCondition, title="Buy Alert", message="Buy Signal Triggered")
alertcondition(sellCondition, title="Sell Alert", message="Sell Signal Triggered")