Estrategia dinámica de detención de tracción basada en ATR y SMA

El autor:¿ Qué pasa?, fecha: 2024-03-11 11:55:21
Las etiquetas:

img

Resumen general

Esta estrategia combina el indicador ATR (Average True Range) y el indicador SMA (Simple Moving Average) para implementar un sistema dinámico de trading de stop trailing. Cuando el precio está por encima del SMA, se abre una posición larga y se establece un stop loss dinámico basado en ATR. El precio del stop loss seguirá subiendo a medida que el precio sube. Cuando el precio cae por debajo del precio del stop loss dinámico, la posición se cierra. La idea principal de esta estrategia es bloquear las ganancias y reducir los tiros en los mercados de tendencia utilizando el stop loss dinámico.

Principios de estrategia

  1. Cuando el precio de cierre es mayor que el SMA de 50 días, abra una posición larga.
  2. Calcular el indicador ATR con un período de 10, multiplicado por un valor clave (por defecto es 3) para obtener el rango de stop loss nLoss.
  3. Calcular el precio dinámico de stop loss xATRTrailingStop, con un valor inicial de 0.
    • Cuando el precio de cierre y el precio de cierre anterior son ambos mayores que el precio de stop loss anterior, el nuevo precio de stop loss es el mayor del precio de stop loss anterior y (precio de cierre - nLoss).
    • Cuando el precio de cierre y el precio de cierre anterior son ambos inferiores al precio de stop loss anterior, el nuevo precio de stop loss es el menor del precio de stop loss anterior y (precio de cierre + nLoss).
    • En otros casos, el nuevo precio de stop loss es (precio de cierre - nLoss) o (precio de cierre + nLoss).
  4. Cuando el precio de cierre caiga por debajo del precio dinámico de stop loss, cierre la posición.
  5. Los puntos de stop loss están marcados con diferentes colores: verde para stop loss largo, rojo para stop loss corto y azul para otros casos.

Análisis de ventajas

  1. En comparación con el stop loss fijo, el stop loss dinámico es más flexible y puede adaptarse a diferentes condiciones de mercado.
  2. El intervalo de stop loss se calcula en base al indicador ATR. ATR puede reflejar bien el tamaño de la volatilidad del mercado, por lo que la distancia de stop loss se ajustará automáticamente de acuerdo con la volatilidad de las condiciones recientes del mercado.
  3. El uso de la SMA como base para el juicio de tendencia puede capturar mercados de tendencia relativamente claros.
  4. Permite a los usuarios establecer los parámetros del período ATR y los valores clave, que pueden ajustar de forma flexible los parámetros de la estrategia para adaptarse a las características de las diferentes variedades y ciclos.

Análisis de riesgos

  1. En mercados poco claros u oscilantes, esta estrategia puede dar lugar a una apertura y cierre frecuentes de posiciones, lo que conduce a un aumento de los costes de transacción y a una reducción de los beneficios.
  2. Esta estrategia sólo tiene una lógica larga y no puede beneficiarse de una tendencia a la baja, frente al riesgo de un mercado unilateral.
  3. El punto de stop loss se basa en el cálculo ATR. Cuando el mercado fluctúa violentamente, el espacio de stop loss puede ser demasiado grande, lo que conduce a un mayor riesgo. Considere establecer un rango máximo de stop loss para controlar la pérdida máxima de una sola transacción.
  4. Por ejemplo, si el período de ATR es demasiado pequeño, puede conducir a pérdidas de parada demasiado sensibles y disparadores frecuentes; si es demasiado grande, puede no detener la pérdida a tiempo y amplificar las pérdidas.

Dirección de optimización

  1. Puede abrir una posición corta cuando el precio cae por debajo de la SMA, y también utilizar una lógica de stop loss dinámica.
  2. Introducir la gestión de posiciones largas y cortas para ajustar el tamaño de la posición de acuerdo con la fuerza de la tendencia; aumentar las posiciones cuando la tendencia es fuerte para aumentar los rendimientos; disminuir las posiciones cuando la tendencia es débil para controlar el riesgo.
  3. Optimice la lógica de stop loss y establezca un rango máximo de stop loss para evitar pérdidas excesivas en situaciones extremas. Al mismo tiempo, considere establecer un punto de ganancia para cerrar activamente la posición cuando se alcance el rendimiento esperado, en lugar de mantenerla hasta que se active el stop loss.
  4. Optimiza los parámetros recorriendo diferentes combinaciones de parámetros para encontrar los mejores parámetros.
  5. Considere la posibilidad de añadir más condiciones de filtrado, como el volumen de operaciones e indicadores de volatilidad, para evaluar mejor las tendencias y los riesgos y mejorar la fiabilidad de las señales.

Resumen de las actividades

Esta estrategia implementa un sistema dinámico de trading de stop trailing basado en los indicadores ATR y SMA, que puede ajustar automáticamente la posición de stop loss en los mercados de tendencia para proteger las ganancias y controlar los riesgos. La lógica de la estrategia es clara y tiene ventajas obvias, pero también tiene algunas limitaciones y puntos de riesgo. A través de una optimización y mejora razonables, como agregar lógica corta, optimizar la gestión de posiciones, establecer la máxima stop loss, etc., la robustez y rentabilidad de la estrategia se pueden mejorar aún más. En las aplicaciones prácticas, es necesario ajustar flexiblemente los parámetros de la estrategia de acuerdo con diferentes variedades y ciclos comerciales, y controlar estrictamente los riesgos. En general, esta estrategia proporciona una idea factible para el trading cuantitativo y es digna de una mayor exploración y optimización.


/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Trailingstop", overlay=true)

if close > sma(close, 50)
    strategy.entry("long", strategy.long)

// Trailing stop loss for long positions
Trailperc = 0.20
price_stop_long = 0.0

if (strategy.position_size > 0)
    stopValue = close * (1 - Trailperc)
    price_stop_long := max(stopValue, price_stop_long[1])
else
    price_stop_long := 0

if (strategy.position_size > 0)
    strategy.exit(id="stoploss_long", stop=price_stop_long)

// Trailing stop loss for short positions
Trailperc_short = 0.20
price_stop_short = 0.0

if (strategy.position_size < 0)
    stopValue_short = close * (1 + Trailperc_short)
    price_stop_short := min(stopValue_short, price_stop_short[1])
else
    price_stop_short := 0

if (strategy.position_size < 0)
    strategy.exit(id="stoploss_short", stop=price_stop_short)

// ATR Trailing Stop for visualization
keyvalue = input(3, title="Key Value. 'This changes the sensitivity'", step=0.5)
atrperiod = input(10, title="ATR Period")
xATR = atr(atrperiod)
nLoss = keyvalue * xATR

xATRTrailingStop = 0.0
xATRTrailingStop := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
   iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss),
   iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))

pos = 0  
pos :=   iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
   iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))

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

plot(xATRTrailingStop, color = xcolor, title = "Trailing Stop")

Más.