Estrategia de stop loss de rango verdadero promedio siguiendo tendencia

ATR TS
Fecha de creación: 2024-05-24 18:12:01 Última modificación: 2024-05-24 18:12:01
Copiar: 8 Número de Visitas: 521
1
Seguir
1617
Seguidores

Estrategia de stop loss de rango verdadero promedio siguiendo tendencia

Descripción general

La estrategia utiliza la amplitud real media (ATR) como base para seguir el stop loss (TS) para lograr el objetivo de seguir la tendencia mediante el ajuste dinámico de la posición de parada. Cuando el precio se mueve en la dirección favorable, la posición de parada también se ajusta, lo que bloquea las ganancias obtenidas.

Principio de estrategia

  1. El ATR refleja la volatilidad del mercado y se usa para medir la magnitud media de los cambios en los precios.
  2. Calcula la distancia de parada nLoss de acuerdo con los parámetros ATR y KeyValue. KeyValue es el múltiplo de los valores personalizados por el usuario, y nLoss es el producto de KeyValue y ATR, lo que significa que la distancia de parada es el número de veces ATR.
  3. Calcula la posición de parada de seguimiento dinámico xATRTrailingStop. Cuando se tiene una posición múltiple, se establece como “el valor más alto de la línea K anterior y el precio de cierre - nLoss”; Cuando se tiene una posición en blanco, se establece como “el valor más bajo de la línea K anterior y el precio de cierre + nLoss”.
  4. Genera una señal de apertura de posición. Haga más cuando el precio de cierre cruza xATRTrailingStop; Haga vacío cuando el precio de cierre cruza xATRTrailingStop.

Análisis de las ventajas

  1. Las posiciones de stop loss se ajustan dinámicamente a la fluctuación de los precios, lo que permite no solo bloquear las ganancias, sino también expandirlas a medida que la tendencia continúa.
  2. Las posiciones de stop loss se basan en el cálculo de ATR, que reflejan objetivamente la volatilidad del mercado y son más flexibles y efectivas en comparación con los stop loss fijos de configuración subjetiva.
  3. Aumentando el ATR con los parámetros de KeyValue, se puede configurar la distancia de parada adecuada según sus preferencias de riesgo. Un mayor KeyValue traerá un espacio de parada más amplio y una menor frecuencia de parada.

Análisis de riesgos

  1. Las estrategias de tendencia no funcionan bien en una ciudad convulsa, se detienen con frecuencia cuando no se observa una tendencia unilateral, lo que provoca una rápida pérdida de fondos.
  2. El tiempo de entrada depende de la señal de cruce entre el precio de cierre y la línea de parada dinámica. En un momento de agitación, puede producirse una pequeña parada consecutiva.
  3. Las estrategias de stop loss no pueden evitar el salto de brecha causado por los gigantes del dólar o el Lido. La velocidad de ajuste de la posición de stop loss no puede seguir el ritmo de los cambios en el precio, lo que resulta en pérdidas reales mucho mayores que las pérdidas controlables esperadas.

Dirección de optimización

  1. Se pueden agregar indicadores de tendencia en base a la estrategia, como el sistema de línea media, el indicador de dinámica, etc., para entrar en juego solo cuando la tendencia es clara y evitar el comercio frecuente en mercados convulsos.
  2. Se puede considerar la introducción de estrategias de stop-loss, como la posición de tenencia calculada de acuerdo con la fórmula de Kelly, la configuración de paradas de retiro de beneficios fijos, etc., para reducir la posibilidad de rebote de beneficios potenciales al final de la tendencia.
  3. Para las brechas de salto, se puede establecer un límite máximo de pérdida, como una cantidad fija o un porcentaje fijo, que se detiene inmediatamente una vez que se alcanza el límite, independientemente de dónde se encuentre el precio de parada dinámica.

Resumir

La estrategia de seguimiento de ATR puede ajustar la posición de parada de forma dinámica en función de la amplitud de las fluctuaciones de los precios, lo que puede tener un buen efecto en las situaciones de tendencia. Sin embargo, la estrategia también existe el riesgo de no poder hacer frente a mercados convulsivos, paradas demasiado frecuentes y brechas de salto que son difíciles de evitar. Para las deficiencias mencionadas, la estrategia se puede optimizar y mejorar desde el juicio de la tendencia, la estrategia de parada y el límite de parada máxima.

Código Fuente de la Estrategia
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Long TAP", overlay=true)

// Constants
keyValueDefault = 3.0
keyValueStep = 0.5
atrPeriodDefault = 10

// Inputs
keyValue = input.float(keyValueDefault, title="Key Value")
atrPeriod = input.int(atrPeriodDefault, title="ATR Period")

// Calculations
xATR = ta.atr(atrPeriod)
nLoss = keyValue * xATR

// Trailing Stop Calculation
var float xATRTrailingStop = 0.0
xATRTrailingStop := ta.highest(math.max(nz(xATRTrailingStop[1], 0), close - nLoss), 1)
xATRTrailingStop := ta.lowest(math.min(nz(xATRTrailingStop, 0), close + nLoss), 1)

// Position Calculation
var int pos = 0
pos := nz(pos[1], 0)
if (close[1] < nz(xATRTrailingStop, 0) and close > nz(xATRTrailingStop, 0))
    pos := 1
else if (close[1] > nz(xATRTrailingStop, 0) and close < nz(xATRTrailingStop, 0))
    pos := -1

// Plotting Trailing Stop
var color xcolor = na
if (pos == -1)
    xcolor := color.red
else if (pos == 1)
    xcolor := color.green
plot(xATRTrailingStop, color=xcolor, title="Trailing Stop")

// Buy/Sell Signals
buySignal = ta.crossover(close, xATRTrailingStop)
sellSignal = ta.crossunder(close, xATRTrailingStop)

// Strategy
if (buySignal)
    strategy.entry("Long", strategy.long)
    label.new(bar_index, xATRTrailingStop, text="Buy Signal", color=color.green, style=label.style_label_up, yloc=yloc.belowbar)
if (sellSignal)
    strategy.entry("Short", strategy.short)
    label.new(bar_index, xATRTrailingStop, text="Sell Signal", color=color.red, style=label.style_label_down, yloc=yloc.abovebar)

// Alerts
alertcondition(buySignal, title='UT BOT Buy', message='UT BOT Buy')
alertcondition(sellSignal, title='UT BOT Sell', message='UT BOT Sell')