Estrategia de stop-trailing adaptativa


Fecha de creación: 2023-10-08 15:06:28 Última modificación: 2023-10-08 15:06:28
Copiar: 0 Número de Visitas: 771
1
Seguir
1617
Seguidores

Descripción general

La estrategia se basa en un mecanismo de stop-loss adaptativo que puede ajustar automáticamente la posición de stop-loss en función de la fluctuación del precio para lograr un mejor efecto de stop-loss. La estrategia utiliza el indicador ATR para calcular un rango de stop-loss razonable y, en combinación con la línea de paridad EMA, genera una señal de negociación para abrir una posición más baja cuando se rompe la línea de paridad EMA, al mismo tiempo que se utiliza un algoritmo de stop-loss adaptativo para rastrear la posición de stop-loss.

Principio de estrategia

  1. Calcula el indicador ATR y establece el valor de ATR multiplicado por el parámetro a como el rango de stop loss nLoss.
  2. Calcula el promedio de la EMA.
  3. Cuando el precio está por encima de la línea media de la EMA, haz más, y cuando está por debajo de la línea media de la EMA, haz menos.
  4. Utilizando un algoritmo de stop adaptativo para ajustar automáticamente el punto de parada xATRTrailingStop, las reglas son las siguientes:
    • Cuando el precio supera el límite de pérdidas, el límite de pérdidas se ajusta al precio menos el límite de pérdidas.
    • Cuando el precio rompe el Stop Loss hacia abajo, el Stop Loss se ajusta al precio más el Rango de Stop Loss nLoss.
    • En otras circunstancias, el stop loss se mantiene.
  5. El precio se detiene cuando se dispara el punto de parada.

Análisis de las ventajas

  1. Se ha implementado un mecanismo de suspensión de pérdidas de adaptación, que puede ajustar automáticamente la amplitud de suspensión de pérdidas según la volatilidad del mercado, para controlar eficazmente el riesgo.
  2. Calcular el rango de pérdidas razonables combinado con el indicador ATR para evitar pérdidas excesivas o excesivas.
  3. El uso de EMA para generar señales de negociación puede reducir las transacciones innecesarias y filtrar el ruido del mercado.
  4. La estrategia es simple y clara, el código es fácil de entender, fácil de revisar y de optimizar.
  5. Los parámetros de entrada se pueden ajustar para adaptarse a diferentes entornos de mercado.

Riesgos y mejoras

  1. La EMA promedio generará señales de negociación que pueden retrasarse, lo que lleva a una entrada tardía. Se puede considerar la posibilidad de usar otros indicadores para ayudar a juzgar la entrada anticipada.
  2. El tiempo de mantenimiento de la posición es incierto, no se puede controlar el tamaño de la parada individual. Se puede establecer un objetivo de ganancias o un tiempo de mantenimiento máximo para evitar grandes pérdidas.
  3. En los mercados de tendencia significativa, el stop loss puede activarse con demasiada frecuencia. Se puede considerar ajustar los parámetros según la tendencia o agregar condiciones de filtro.
  4. Los parámetros deben ajustarse según las características de las diferentes variedades, como el ciclo ATR, el multiplicador de stop loss, etc., sin usar los valores predeterminados a ciegas.

Dirección de optimización

  1. Se puede considerar la inclusión de indicadores para juzgar la tendencia, hacer una lista de servicios en la dirección de la tendencia y evitar el comercio en contra.
  2. Se puede ajustar el multiplicador de stop loss en función de la magnitud de la volatilidad, con una ampliación adecuada del rango de stop loss en una gran volatilidad.
  3. Se puede configurar el tiempo máximo de mantenimiento de la posición, y se puede activar el stop loss después de un tiempo determinado.
  4. Se puede agregar una estrategia de stop loss móvil que eleve el stop loss gradualmente a medida que el precio se mueve.
  5. Se pueden personalizar los parámetros del ciclo ATR según las características de cada acción.

Resumir

La estrategia general es clara y fácil de entender, utiliza el indicador ATR para establecer un rango de stop loss que se adapta a sí mismo y se combina con la EMA para generar señales de negociación que pueden controlar eficazmente las pérdidas. Sin embargo, la estrategia en sí misma es más pasiva, el espacio de optimización es mayor, se puede considerar la inclusión de un juicio de tendencia, para que la estrategia sea más activa según los parámetros de ajuste de la situación del mercado.

Código Fuente de la Estrategia
/*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)