Estrategia combinada de stop loss dinámico y cruce de medias móviles con ATR dinámico

EMA ATR RSI SMA VOLUME
Fecha de creación: 2025-02-18 15:48:18 Última modificación: 2025-02-18 15:48:18
Copiar: 1 Número de Visitas: 504
1
Seguir
1617
Seguidores

Estrategia combinada de stop loss dinámico y cruce de medias móviles con ATR dinámico

Descripción general

La estrategia es un sistema de complejidad de comercio basado en el ATR de seguimiento dinámico de la parada y el cruce de la línea de avance, que combina múltiples indicadores técnicos para el filtrado de la operación y el control del riesgo. La estrategia se ejecuta en un período de tiempo de 15 minutos, para determinar la señal de comercio a través de indicadores multidimensionales como la línea de avance de la EMA, la volatilidad de ATR, el indicador RSI y el volumen de transacción, y para administrar el riesgo de pérdidas mediante el seguimiento dinámico de la parada.

Principio de estrategia

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

  1. Las condiciones de ingreso se basan en una serie de filtros:
    • El precio se encuentra por encima/por debajo de la EMA de 100 ciclos
    • Confirmación de la tendencia de 100 EMA en el ciclo de 1 hora
    • El precio cruza con el ATR para seguir la línea de stop loss
    • RSI en la zona neutral entre 30 y 70
    • El volumen de transacciones actuales es mayor que el promedio de 20 ciclos
  2. Sistema de control de riesgos:
    • Detención de pérdidas de seguimiento dinámico basado en 3x ATR
    • Establecer el doble de ATR como objetivo de ganancias
  3. Mecanismo de salida:
    • 15 y 17 ciclos EMA de señales cruzadas de dos líneas K consecutivas
    • Determinación de los objetivos de seguimiento de pérdidas o ganancias

Ventajas estratégicas

  1. Verificación cruzada de múltiples indicadores tecnológicos para reducir las señales falsas
  2. Filtración de tendencias de varios períodos para mejorar la precisión de la dirección de las operaciones
  3. El ATR dinámico puede ajustarse a la volatilidad del mercado
  4. Objetivos de ganancias vinculados a paradas de pérdidas para asegurar un equilibrio dinámico entre riesgo y ganancias
  5. Utiliza el cruce de la EMA como señal de salida para evitar una salida prematura
  6. La confirmación de transacciones aumenta la efectividad de las mismas

Riesgo estratégico

  1. Las condiciones de filtración múltiple pueden causar la pérdida de algunas oportunidades de negociación
  2. El ATR puede estar demasiado extendido en un mercado muy volátil.
  3. Las sucesivas salidas cruzadas de EMA podrían provocar un retroceso de parte de las ganancias
  4. Dependencia de las tendencias del mercado, con riesgo de fracasos en los mercados de crisis.
  5. Alta complejidad de los cálculos, con riesgo de ejecución tardía

Dirección de optimización de la estrategia

  1. La introducción de un mecanismo de optimización de los parámetros de adaptación:
    • El ATR se puede ajustar en función de la dinámica de las diferentes condiciones del mercado
    • El ciclo EMA se optimiza automáticamente en función de las fluctuaciones del mercado
  2. Aumentar la identificación del estado del mercado:
    • Añadir indicadores de intensidad de tendencia
    • Introducción del juicio del ciclo de la tasa de fluctuación
  3. Mejorar el control de riesgos:
    • Realización de la construcción y reducción de almacenes por lotes
    • Aumentar el límite máximo de tiempo de tenencia de posiciones
  4. Optimizar el mecanismo de salida:
    • Ajuste dinámico de los objetivos de ganancias combinado con la intensidad de la tendencia
    • Añadir un mecanismo de tiempo de espera

Resumir

La estrategia construye un sistema de negociación relativamente completo a través de la aplicación integrada de varios indicadores técnicos y medios de control de riesgo. La principal característica de la estrategia es la adopción de un ATR dinámico que rastrea el stop loss para adaptarse a las fluctuaciones del mercado, mientras que se utiliza un filtro de múltiples indicadores y un cruce uniforme para confirmar las señales de negociación. Aunque existe cierto espacio para la optimización, la idea de diseño general cumple con los requisitos de la negociación cuantitativa moderna y tiene un buen valor de aplicación práctica.

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

//@version=5
strategy(title='UT Bot Strategy with 100 EMA Filter, Trailing Stop and EMA Cross Exit', overlay=true)

// Inputs
a = input(1, title='Key Value. \'This changes the sensitivity\'')
c = input(10, title='ATR Period')
h = input(false, title='Signals from Heikin Ashi Candles')

// Higher timeframe trend filter (1-hour)
higherTimeframeEMA = request.security(syminfo.tickerid, "60", ta.ema(close, 100)) // 1-hour EMA

xATR = ta.atr(c)

// Adjusting ATR multiplier for Gold on 15-minute timeframe
atrMultiplier = 3
nLoss = atrMultiplier * xATR  // ATR-based loss calculation

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

// Trailing Stop Calculation
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

// Define 100 EMA
ema100 = ta.ema(src, 100)
plot(ema100, title="100 EMA", color=color.black, linewidth=2)

// Define 15 EMA and 17 EMA for exit conditions
ema15 = ta.ema(src, 15)
ema17 = ta.ema(src, 17)
plot(ema15, title="15 EMA", color=color.blue, linewidth=1)
plot(ema17, title="17 EMA", color=color.purple, linewidth=1)

// Define Entry Conditions
longCondition = src > ema100 and src > xATRTrailingStop and close > higherTimeframeEMA and ta.crossover(ta.ema(src, 1), xATRTrailingStop)
shortCondition = src < ema100 and src < xATRTrailingStop and close < higherTimeframeEMA and ta.crossover(xATRTrailingStop, ta.ema(src, 1))

// RSI Filter
rsi = ta.rsi(close, 14)
longCondition := longCondition and rsi > 30 and rsi < 70  // Ensure RSI is not in extreme conditions
shortCondition := shortCondition and rsi > 30 and rsi < 70

// Volume Filter
volumeMA = ta.sma(volume, 20)
longCondition := longCondition and volume > volumeMA
shortCondition := shortCondition and volume > volumeMA

// ** Trailing Stop Setup **
trailOffset = nLoss  // The trailing stop distance is based on ATR, which is already calculated
trailPriceLong = close - trailOffset  // The trailing stop for long trades is below the entry price
trailPriceShort = close + trailOffset  // The trailing stop for short trades is above the entry price

// Define Take Profit (TP) condition
takeProfitMultiplier = 2  // This sets the take profit at 2x the ATR from the entry
takeProfitLong = close + takeProfitMultiplier * nLoss
takeProfitShort = close - takeProfitMultiplier * nLoss

// Strategy Entries
if (longCondition)
    strategy.entry('long', strategy.long)

if (shortCondition)
    strategy.entry('short', strategy.short)

// Exit conditions for 15 and 17 EMA cross (must be consecutive on two bars)
exitLong = ta.crossover(ema15, ema17) and ta.crossover(ema15[1], ema17[1])  // Exit long if both the current and previous bars have 15 EMA crossing above 17 EMA
exitShort = ta.crossunder(ema15, ema17) and ta.crossunder(ema15[1], ema17[1])  // Exit short if both the current and previous bars have 15 EMA crossing below 17 EMA

// Apply trailing stop and take profit along with EMA cross exit
strategy.exit("Exit Long", "long", trail_price=trailPriceLong, trail_offset=trailOffset, limit=takeProfitLong)  // Long exit with trailing stop and TP
strategy.exit("Exit Short", "short", trail_price=trailPriceShort, trail_offset=trailOffset, limit=takeProfitShort)  // Short exit with trailing stop and TP

// Close positions when 15 and 17 EMAs cross consecutively
strategy.close("long", when=exitLong)
strategy.close("short", when=exitShort)

// Alert condition for trade closure
longExitAlert = exitLong  // Only trigger alert for long if both consecutive bars show crossover
shortExitAlert = exitShort  // Only trigger alert for short if both consecutive bars show crossunder

alertcondition(longExitAlert, title="Close Long Trade", message="Long trade closed. 15 EMA crossed above 17 EMA on two consecutive bars.")
alertcondition(shortExitAlert, title="Close Short Trade", message="Short trade closed. 15 EMA crossed below 17 EMA on two consecutive bars.")