Estrategia de ruptura de impulso

El autor:¿ Qué pasa?, Fecha: 2023-11-14 11:19:05
Las etiquetas:

img

Resumen general

Esta estrategia utiliza bandas de Bollinger combinadas con el indicador ATR y las líneas EMA para determinar las señales. Genera señales de compra cuando el precio rompe la banda superior de Bollinger y cruza rápidamente por encima de la línea EMA. Genera señales de venta cuando el precio rompe la banda inferior de Bollinger y cruza rápidamente por debajo de la línea EMA. El indicador ATR se utiliza para establecer el stop loss.

Estrategia lógica

  1. Calcular la línea media de Bollinger, la banda superior y la banda inferior.Desviación estándar de n períodos, banda inferior es la línea media - mDesviación estándar de n períodos.

  2. Calcular el indicador ATR para rastrear el stop loss.

  3. Calcular las líneas EMA de 1 período y n períodos para determinar el impulso de los precios.

  4. Cuando el precio cruza por encima de la banda superior de Bollinger y la línea EMA rápidamente, se genera una señal de compra.

  5. Cuando el precio cruza por debajo de la banda inferior de Bollinger y la línea EMA rápidamente, se genera una señal de venta.

  6. El indicador ATR establece puntos de stop loss, rastreando la dirección de la ruptura del precio para evitar quedar atrapados.

Análisis de ventajas

  1. Las bandas de Bollinger combinadas con el stop loss ATR pueden controlar eficazmente el riesgo.

  2. Las líneas EMA rápidas y lentas determinan la dirección del impulso, evitando una falsa ruptura.

  3. Los parámetros ajustables se adaptan a diferentes entornos de mercado.

  4. Las señales claras de compra/venta con una alta frecuencia de negociación, adecuadas para operaciones a corto plazo.

  5. El indicador ATR sigue la parada de pérdidas de manera oportuna.

Análisis de riesgos

  1. El estrecho rango de bandas de Bollinger puede causar operaciones más ruidosas.

  2. Si el parámetro ATR se establece demasiado bajo, puede ocasionar una pérdida de frenado demasiado cercana, lo que puede resultar en que se quede atrapado.

  3. Los parámetros de la EMA deben ajustarse a los diferentes efectos del ciclo.

  4. El mercado oscilante puede generar más operaciones, hay que tener cuidado.

  5. El seguimiento del stop loss a veces puede ser demasiado agresivo, causando una expansión de la pérdida.

Optimización

  1. Combinar con otros indicadores para filtrar las señales de negociación, por ejemplo, RSI para sobrecompra/sobreventa, KDJ para divergencia, etc.

  2. Considere ajustar dinámicamente los parámetros de Bollinger basados en ATR para adaptarse a la fluctuación de precios.

  3. Probar diferentes parámetros del ciclo EMA para obtener la mejor combinación de parámetros.

  4. Ajustar inteligentemente los parámetros ATR basados en la volatilidad para evitar pérdidas de parada agresivas.

  5. Considere incorporar modelos de aprendizaje profundo para ayudar a las decisiones de compra/venta.

Resumen de las actividades

Esta estrategia tiene una lógica clara utilizando bandas de Bollinger para capturar la ruptura de precios, ATR para establecer el rango de stop loss, EMA para determinar la dirección del impulso para un juicio integral de la ruptura de impulso, que puede capturar efectivamente las tendencias de precios a corto plazo. La combinación de múltiples indicadores para un juicio integral puede mejorar la calidad de la señal. Todavía hay espacio para la optimización a través de ajuste de parámetros, combinaciones de indicadores, etc. para refinar aún más esta estrategia para más estabilidad y elasticidad.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
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")

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

length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)
// plot(bbr, "Bollinger Bands %B", color=#26A69A)
// band1 = hline(1, "Overbought", color=#787B86, linestyle=hline.style_dashed)
// hline(0.5, "Middle Band", color=color.new(#787B86, 50))
// band0 = hline(0, "Oversold", color=#787B86, linestyle=hline.style_dashed)
// fill(band1, band0, color=color.rgb(38, 166, 154, 90), title="Background")








xATR  = atr(c)
nLoss = a * xATR




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)
emaFast   = ema(src,144)
emaSlow   = ema(src,576)
sma       =  sma(src, c)

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

smaabove = crossover(src, sma)
smabelow = crossover(sma, src)


buy  = src > xATRTrailingStop and above and (bbr>20  or bbr<80)
sell = src < xATRTrailingStop and below  and  (bbr>20  or bbr<80)

// buy  = src > xATRTrailingStop 
// sell = src < xATRTrailingStop 


barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

// plot(emaFast , color = color.rgb(243, 206, 127), title="emaFast")

plot(xATRTrailingStop, color = color.rgb(233, 233, 232), title="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)


// plotshape(buy,  title = "Sell",  text = 'Sell',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
// plotshape(sell, title = "buy", text = 'buy', 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("short",   false, when = buy)
// strategy.entry("long ", true, when = sell)


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

Más.