Estrategia de stop loss ATR con impulso Z-score combinada con relación riesgo-rendimiento para optimizar el sistema de trading

ATR RR MA
Fecha de creación: 2025-02-20 13:40:12 Última modificación: 2025-02-27 17:41:05
Copiar: 1 Número de Visitas: 398
2
Seguir
319
Seguidores

Estrategia de stop loss ATR con impulso Z-score combinada con relación riesgo-rendimiento para optimizar el sistema de trading Estrategia de stop loss ATR con impulso Z-score combinada con relación riesgo-rendimiento para optimizar el sistema de trading

Descripción general

La estrategia es un sistema de negociación completo que combina varios indicadores técnicos, principalmente basados en el puntaje Z para medir el volumen de operaciones y los valores anormales del tamaño de la entidad de la línea K, y utiliza el ATR para establecer un punto de parada dinámico. El sistema también integra la relación riesgo-beneficio (RR) para optimizar los objetivos de ganancias, proporcionando una señal de negociación confiable a través del análisis técnico multidimensional.

Principio de estrategia

La lógica central de la estrategia se basa en los siguientes componentes clave:

  1. Análisis del Z-score: cálculo de la diferencia estándar entre el volumen de operaciones y las entidades de la línea K para identificar la actividad anormal del mercado
  2. Confirmación de tendencia: confirmación de la dirección de la tendencia mediante el análisis de los puntos altos y bajos de la línea K adyacente y los precios de cierre
  3. ATR Stop: utiliza el ATR dinámico para configurar la posición de stop, ofreciendo un control de riesgo más flexible
  4. Riesgo-beneficio: Objetivo de ganancias calculado automáticamente basado en el RR establecido
  5. Marcaje visual: marca las señales de negociación y los niveles de precios clave en el gráfico

Ventajas estratégicas

  1. Confirmación de señales multidimensionales: mejora la fiabilidad de las señales de negociación mediante la combinación de volumen de negocios, movimiento de precios y dirección de tendencias
  2. Gestión de riesgos dinámica: Stop Loss Adaptable, mejor adaptado a las fluctuaciones del mercado a través de ATR
  3. Configuración de parámetros flexible: permite ajustar el límite de la puntuación Z, el multiplicador ATR y la relación riesgo-beneficio
  4. Tiempo de entrada exacto: el uso de Z-score para identificar las oportunidades de negociación clave
  5. Visualización clara: los puntos de entrada, los puntos de parada y los objetivos de ganancias están claramente marcados en el gráfico

Riesgo estratégico

  1. Sensibilidad de los parámetros: la configuración de los umbrales de Z-score y los múltiplos de ATR influyen directamente en la frecuencia de las operaciones y el control del riesgo
  2. Dependencia del entorno del mercado: puede generar menos señales de negociación en un entorno de baja volatilidad
  3. Complejidad de cálculo: el cálculo de múltiples indicadores puede causar un retraso en la generación de señales
  4. Riesgo de deslizamiento: en un mercado rápido, el precio de ejecución real puede estar desviado del precio de la señal
  5. Riesgo de brechas falsas: señales de brechas que pueden desencadenarse en mercados en balance

Dirección de optimización de la estrategia

  1. Filtrado de entornos de mercado: añade un filtro de fluctuación de mercado para ajustar dinámicamente los parámetros en diferentes entornos de mercado
  2. Mecanismo de confirmación de señales: introducción de más indicadores técnicos para la verificación cruzada, como el RSI o el MACD
  3. Optimización de la gestión de posiciones: ajuste dinámico de posiciones basado en la volatilidad y el riesgo de la cuenta
  4. Análisis de múltiples períodos de tiempo: confirmación de tendencias en la integración de períodos de tiempo más altos, mejora de la tasa de éxito de las transacciones
  5. Optimización de la filtración de señales: añadir condiciones de filtración adicionales para reducir las falsas señales

Resumir

La estrategia construye un sistema de negociación completo mediante la combinación de análisis de Z-score, ATR stop loss y optimización de la relación riesgo-beneficio. La ventaja del sistema radica en la detección de señales multidimensional y la gestión flexible del riesgo, pero aún debe tenerse en cuenta la configuración de los parámetros y la influencia del entorno del mercado. La estrategia puede mejorar aún más su estabilidad y adaptabilidad mediante la orientación de optimización recomendada.

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

//@version=5
strategy("admbrk | Candle Color & Price Alarm with ATR Stop", overlay=true, initial_capital=50, default_qty_type=strategy.cash, default_qty_value=200, commission_type=strategy.commission.percent, commission_value=0.05, pyramiding=3)

// **Risk/Reward ratio (RR) as input**
rr = input.float(2.0, title="Risk/Reward Ratio (RR)", step=0.1)

// **Z-score calculation function**
f_zscore(src, len) =>
    mean = ta.sma(src, len)     
    std = ta.stdev(src, len)
    (src - mean) / std

// **Z-score calculations**
len = input(20, "Z-Score MA Length")
z1 = input.float(1.5, "Threshold z1", step=0.1)
z2 = input.float(2.5, "Threshold z2", step=0.1)

z_volume = f_zscore(volume, len)
z_body = f_zscore(math.abs(close - open), len)

i_src = input.string("Volume", title="Source", options=["Volume", "Body size", "Any", "All"])

float z = na
if i_src == "Volume"
    z := z_volume
else if i_src == "Body size"
    z := z_body
else if i_src == "Any"
    z := math.max(z_volume, z_body)
else if i_src == "All"
    z := math.min(z_volume, z_body)

// **Determine trend direction**
green = close >= open
red = close < open

// **Long and Short signals**
longSignal = barstate.isconfirmed and red[1] and low < low[1] and green
shortSignal = barstate.isconfirmed and green[1] and high > high[1] and red

long = longSignal and (z >= z1)
short = shortSignal and (z >= z1)

// **ATR calculation (for ATR Stop)**
atrLength = input.int(14, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Stop Multiplier")
atrValue = ta.atr(atrLength)

// **ATR-based stop-loss calculation**
long_atr_stop = close - atrValue * atrMultiplier
short_atr_stop = close + atrValue * atrMultiplier

// **Stop-loss setting (set to the lowest/highest wick of the last two bars)**
long_sl = ta.lowest(low, 2)  // Long stop-loss (lowest of the last 2 bars)
short_sl = ta.highest(high, 2) // Short stop-loss (highest of the last 2 bars)

// **Take-profit calculation (with RR)**
long_tp = close + (close - long_sl) * rr
short_tp = close - (short_sl - close) * rr

triggerAlarm(symbol)=>
    status = close
    var string message = na
    alarmMessageJSON = syminfo.ticker + message +"\\n" + "Price: " + str.tostring(status) 
    
if long
    // Open Long position
    strategy.entry("Long", strategy.long)
    strategy.exit("Long Exit", from_entry="Long", stop=math.max(long_sl, long_atr_stop), limit=long_tp)
    

if short
    // Open Short position
    strategy.entry("Short", strategy.short)
    strategy.exit("Short Exit", from_entry="Short", stop=math.min(short_sl, short_atr_stop), limit=short_tp)
    

// **Coloring the candles (BUY = Green, SELL = Red)**
barcolor(long ? color.green : short ? color.red : na)

// **Add entry/exit markers on the chart**
plotshape(long, title="BUY Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small, text="BUY")
plotshape(short, title="SELL Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small, text="SELL")

// **Plot TP and SL markers on exits**
exitLong = strategy.position_size < strategy.position_size[1] and strategy.position_size[1] > 0
exitShort = strategy.position_size > strategy.position_size[1] and strategy.position_size[1] < 0

plotshape(exitLong, title="Long Exit", location=location.abovebar, color=color.blue, style=shape.labeldown, size=size.tiny, text="TP/SL")
plotshape(exitShort, title="Short Exit", location=location.belowbar, color=color.orange, style=shape.labelup, size=size.tiny, text="TP/SL")

// **Add alerts**
alertcondition(long, title="Long Signal", message="Long signal triggered!")
alertcondition(short, title="Short Signal", message="Short signal triggered!")