Cruce de tendencias de múltiples indicadores combinado con estrategia de volatilidad dinámica ATR

RSI SMA MACD ATR MA TP SL
Fecha de creación: 2025-02-20 16:28:37 Última modificación: 2025-02-27 17:30:15
Copiar: 0 Número de Visitas: 366
2
Seguir
319
Seguidores

Cruce de tendencias de múltiples indicadores combinado con estrategia de volatilidad dinámica ATR Cruce de tendencias de múltiples indicadores combinado con estrategia de volatilidad dinámica ATR

Descripción general

La estrategia es un sistema de seguimiento de tendencias que combina varios indicadores técnicos. Se basa principalmente en señales cruzadas de RSI, MACD y SMA para determinar la dirección de las operaciones, mientras que se utiliza el indicador ATR para ajustar dinámicamente los niveles de parada y ganancia. La estrategia también integra un filtro de volumen de operaciones para garantizar que se negocie con suficiente liquidez en el mercado y utiliza un mecanismo de parada parcial para optimizar la gestión de fondos.

Principio de estrategia

La estrategia utiliza un mecanismo de triple verificación para confirmar las señales de transacción:

  1. La dirección de las principales tendencias se determina a través de la relación de posición entre la línea media diaria de 50 y 200
  2. Utilice el RSI para encontrar oportunidades de entrada en el cruce de las zonas de sobrecompra y sobreventa
  3. Combinado con el indicador MACD para confirmar la dinámica de la tendencia
  4. El uso de filtros de volumen de transacción asegura suficiente liquidez en el mercado
  5. Establecimiento de objetivos de stop loss y ganancias dinámicos basados en ATR

El objetivo de la verificación múltiple es reducir las señales falsas y mejorar la precisión de las operaciones. La estrategia se ejecuta cuando se cumplen varias condiciones: (trend up + RSI + MACD up + confirmado el volumen de transacción) abrir una posición y usar 2 veces el ATR como stop loss y 4 veces como stop loss.

Ventajas estratégicas

  1. Verificación cruzada de múltiples indicadores tecnológicos para reducir las señales falsas
  2. Mecanismo de pérdidas por volatilidad dinámico, adaptado a diferentes condiciones de mercado
  3. Utiliza una estrategia de cierre parcial para bloquear parte de las ganancias mientras mantiene un espacio de ganancia
  4. El filtro de volumen de transacciones asegura suficiente liquidez en el mercado
  5. Sistema completo de gestión de riesgos, incluido el stop-loss fijo, el stop-loss de seguimiento y el beneficio parcial

Riesgo estratégico

  1. La multiplicación de indicadores puede hacer que se pierdan algunas oportunidades de negocio
  2. Puede sufrir grandes caídas en mercados volátiles
  3. La optimización excesiva de parámetros puede provocar un sobreajuste
  4. El filtro de volumen de transacciones puede perder oportunidades en mercados con poca liquidez
  5. El deterioro dinámico puede ser provocado prematuramente durante las altas oscilaciones

Dirección de optimización de la estrategia

  1. Considerar la inclusión de un mecanismo de adaptación a la volatilidad del mercado para ajustar dinámicamente los parámetros en diferentes entornos de volatilidad
  2. Introducción de análisis multi-ciclo para mejorar la precisión de las tendencias
  3. Optimización de la proporción de paradas parciales y adaptación de las estrategias de paradas para diferentes entornos de mercado
  4. Incrementar los filtros de intensidad de tendencia para evitar el comercio en entornos de tendencia débil
  5. Considerar la inclusión de análisis de factores estacionales para optimizar el momento de la transacción

Resumir

Se trata de una estrategia integral de seguimiento de tendencias que, mediante el uso de múltiples indicadores técnicos en combinación, establece un sistema de negociación sólido. La principal característica de la estrategia es adaptarse a los cambios en el mercado a través de un mecanismo dinámico de stop loss y ganancias, al tiempo que se garantiza la seguridad.

Código Fuente de la Estrategia
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy(    title="AI Trade Strategy v2 (Extended) - Fixed",    shorttitle="AI_Trade_v2",    overlay=true,    format=format.price,    initial_capital=100000,    default_qty_type=strategy.percent_of_equity,    default_qty_value=100,    pyramiding=0)

//============================================================================
//=== 1) Basic Indicators (SMA, RSI, MACD) ==================================
//============================================================================

// Time Filter (optional, you can update)
inDateRange = (time >= timestamp("2018-01-01T00:00:00")) and (time <= timestamp("2069-01-01T00:00:00"))

// RSI Parameters
rsiLength  = input.int(14, "RSI Period")
rsiOB      = input.int(60, "RSI Overbought Level")
rsiOS      = input.int(40, "RSI Oversold Level")
rsiSignal  = ta.rsi(close, rsiLength)

// SMA Parameters
smaFastLen = input.int(50, "SMA Fast Period")
smaSlowLen = input.int(200, "SMA Slow Period")
smaFast    = ta.sma(close, smaFastLen)
smaSlow    = ta.sma(close, smaSlowLen)

// MACD Parameters
fastLength     = input.int(12, "MACD Fast Period")
slowLength     = input.int(26, "MACD Slow Period")
signalLength   = input.int(9,  "MACD Signal Period")
[macdLine, signalLine, histLine] = ta.macd(close, fastLength, slowLength, signalLength)

//============================================================================
//=== 2) Additional Filter (Volume) ========================================
//============================================================================
useVolumeFilter    = input.bool(true, "Use Volume Filter?")
volumeMaPeriod     = input.int(20, "Volume MA Period")
volumeMa           = ta.sma(volume, volumeMaPeriod)

// If volume filter is enabled, current bar volume should be greater than x times the average volume
volMultiplier = input.float(1.0, "Volume Multiplier (Volume > x * MA)")
volumeFilter  = not useVolumeFilter or (volume > volumeMa * volMultiplier)

//============================================================================
//=== 3) Trend Conditions (SMA) ============================================
//============================================================================
isBullTrend = smaFast > smaSlow
isBearTrend = smaFast < smaSlow

//============================================================================
//=== 4) Entry Conditions (RSI + MACD + Trend + Volume) ====================
//============================================================================

// RSI crossing above 30 + Bullish Trend + Positive MACD + Volume Filter
longCondition = isBullTrend    and ta.crossover(rsiSignal, rsiOS)    and (macdLine > signalLine)    and volumeFilter 
shortCondition = isBearTrend    and ta.crossunder(rsiSignal, rsiOB)    and (macdLine < signalLine)    and volumeFilter

//============================================================================
//=== 5) ATR-based Stop + Trailing Stop ===================================
//============================================================================
atrPeriod       = input.int(14, "ATR Period")
atrMultiplierSL = input.float(2.0, "Stop Loss ATR Multiplier")
atrMultiplierTP = input.float(4.0, "Take Profit ATR Multiplier")

atrValue = ta.atr(atrPeriod)

//============================================================================
//=== 6) Trade (Position) Management ======================================
//============================================================================
if inDateRange
    //--- Long Entry ---
    if longCondition
        strategy.entry(id="Long", direction=strategy.long, comment="Long Entry")

    //--- Short Entry ---
    if shortCondition
        strategy.entry(id="Short", direction=strategy.short, comment="Short Entry")

    //--- Stop & TP for Long Position ---
    if strategy.position_size > 0
        // ATR-based fixed Stop & TP calculation
        longStopPrice  = strategy.position_avg_price - atrValue * atrMultiplierSL
        longTakeProfit = strategy.position_avg_price + atrValue * atrMultiplierTP

        // PARTIAL EXIT: (Example) take 50% of the position at early TP
        partialTP = strategy.position_avg_price + (atrValue * 2.5)
        strategy.exit(            id         = "Partial TP Long",            stop       = na,            limit      = partialTP,            qty_percent= 50,            from_entry = "Long"        )

        // Trailing Stop + Final ATR Stop
        // WARNING: trail_offset=... is the offset in price units.
        // For example, in BTCUSDT, a value like 300 means a 300 USDT trailing distance.
        float trailingDist = atrValue * 1.5
        strategy.exit(            id          = "Long Exit (Trail)",            stop        = longStopPrice,            limit       = longTakeProfit,            from_entry  = "Long",            trail_offset= trailingDist        )

    //--- Stop & TP for Short Position ---
    if strategy.position_size < 0
        // ATR-based fixed Stop & TP calculation for Short
        shortStopPrice  = strategy.position_avg_price + atrValue * atrMultiplierSL
        shortTakeProfit = strategy.position_avg_price - atrValue * atrMultiplierTP

        // PARTIAL EXIT: (Example) take 50% of the position at early TP
        partialTPShort = strategy.position_avg_price - (atrValue * 2.5)
        strategy.exit(            id         = "Partial TP Short",            stop       = na,            limit      = partialTPShort,            qty_percent= 50,            from_entry = "Short"        )

        // Trailing Stop + Final ATR Stop for Short
        float trailingDistShort = atrValue * 1.5
        strategy.exit(            id          = "Short Exit (Trail)",            stop        = shortStopPrice,            limit       = shortTakeProfit,            from_entry  = "Short",            trail_offset= trailingDistShort        )

//============================================================================
//=== 7) Plot on Chart (SMA, etc.) =========================================
//============================================================================
plot(smaFast, color=color.blue,   linewidth=2, title="SMA (Fast)")
plot(smaSlow, color=color.orange, linewidth=2, title="SMA (Slow)")

// (Optional) Plot Stop & TP levels dynamically:
longStopForPlot  = strategy.position_size > 0 ? strategy.position_avg_price - atrValue * atrMultiplierSL : na
longTPForPlot    = strategy.position_size > 0 ? strategy.position_avg_price + atrValue * atrMultiplierTP : na
shortStopForPlot = strategy.position_size < 0 ? strategy.position_avg_price + atrValue * atrMultiplierSL : na
shortTPForPlot   = strategy.position_size < 0 ? strategy.position_avg_price - atrValue * atrMultiplierTP : na

plot(longStopForPlot,  color=color.red,   style=plot.style_linebr, title="Long Stop")
plot(longTPForPlot,    color=color.green, style=plot.style_linebr, title="Long TP")
plot(shortStopForPlot, color=color.red,   style=plot.style_linebr, title="Short Stop")
plot(shortTPForPlot,   color=color.green, style=plot.style_linebr, title="Short TP")