Estrategia de detención de tracción adaptativa

El autor:¿ Qué pasa?, Fecha: 2023-10-08 15:06:28
Las etiquetas:

Resumen general

Esta estrategia implementa principalmente un mecanismo de stop loss adaptativo que ajusta automáticamente la posición de stop loss en función de las fluctuaciones de precios para lograr un mejor efecto de stop loss. La estrategia utiliza el indicador ATR para calcular un rango de stop loss razonable y genera señales comerciales en combinación con las líneas EMA. Abre posiciones largas o cortas cuando el precio rompe las líneas EMA y utiliza un algoritmo de stop loss adaptativo para rastrear la stop loss.

Estrategia lógica

  1. Calcular el indicador ATR y establecer el valor ATR multiplicado por el parámetro a como intervalo de pérdida de parada nLoss.
  2. Calcule la línea EMA.
  3. Ir largo cuando el precio se rompe por encima de la línea EMA, y ir corto cuando el precio se rompe por debajo de la línea EMA.
  4. Utilice el algoritmo de stop loss adaptativo para ajustar automáticamente la posición de stop loss xATRTrailingStop, con las siguientes reglas:
    • Cuando el precio se rompe por encima de la posición de stop loss, ajuste el stop loss al precio menos el rango de stop loss nLoss.
    • Cuando el precio se rompe por debajo de la posición de stop loss, ajuste el stop loss al precio más el rango de stop loss nLoss.
    • De lo contrario, mantenga el stop loss sin cambios.
  5. Posición cerrada para stop loss cuando el precio alcanza el nivel de stop loss.

Análisis de ventajas

  1. Implementa un mecanismo de stop loss adaptativo que ajusta automáticamente el rango de stop loss en función de la volatilidad del mercado, controlando de manera efectiva los riesgos.
  2. Calcula el rango razonable de pérdida de parada con el indicador ATR, evitando pérdidas de parada demasiado grandes o demasiado pequeñas.
  3. Utiliza la EMA para generar señales comerciales, reduciendo las operaciones innecesarias y filtrando el ruido del mercado.
  4. Lógica estratégica simple y clara, fácil de entender y optimizar.
  5. Permite ajustar los parámetros de entrada para adaptarse a los diferentes entornos del mercado.

Riesgos y mejoras

  1. Las señales de la EMA pueden retrasarse, lo que conduce a una entrada tardía.
  2. Posibilidad de establecer un objetivo de ganancia o un período máximo de retención para limitar las pérdidas.
  3. En los mercados con tendencias fuertes, el stop loss puede activarse con demasiada frecuencia.
  4. Los parámetros como el período ATR, el multiplicador de pérdida de parada deben ajustarse en función de las características del símbolo, los valores predeterminados no deben usarse a ciegas.

Direcciones de optimización

  1. Considere la posibilidad de añadir un indicador de tendencia, tomando operaciones en la dirección de la tendencia para evitar operaciones contra tendencia.
  2. Ajustar el multiplicador de pérdida de parada basado en la volatilidad, permitiendo una parada más amplia en condiciones de alta volatilidad.
  3. Se establecerá el período máximo de retención, el stop loss activo después de exceder un cierto tiempo.
  4. Agregue una estrategia de stop loss móvil, elevando gradualmente el stop a medida que el precio se mueve.
  5. Personalizar el parámetro del período ATR en función de las características del símbolo.

Conclusión

La estrategia tiene una lógica clara y sencilla, gestionando riesgos con señales de stop loss y EMA basadas en ATR adaptativas para el comercio. Pero es relativamente pasiva con mucho margen de optimización. Considere agregar juicio de tendencia, ajuste de parámetros dinámicos basado en las condiciones del mercado para hacerlo más proactivo. En general, sirve como una buena idea y plantilla para estrategias de stop loss de inversión, pero los parámetros deben ajustarse para diferentes símbolos en lugar de aplicar ciegamente los valores predeterminados.


/*backtest
start: 2023-09-07 00:00:00
end: 2023-10-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="UT Bot Strategy", overlay = true)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 

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

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////


xATR  = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
 
pos = 0   
pos :=	iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema   = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy  = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

barcolor(barbuy  ? color.green : na)
barcolor(barsell ? color.red   : na)

strategy.entry("long",   true, when = buy  and time_cond)
strategy.entry("short", false, when = sell and time_cond)

Más.