Estratégia de ruptura do impulso

Autora:ChaoZhang, Data: 2023-11-14 11:19:05
Tags:

img

Resumo

Esta estratégia usa Bandas de Bollinger combinadas com o indicador ATR e linhas EMA para determinar sinais. Gerar sinais de compra quando o preço quebra a banda superior de Bollinger e cruza acima da linha EMA rapidamente. Gerar sinais de venda quando o preço quebra a banda inferior de Bollinger e cruza abaixo da linha EMA rapidamente.

Estratégia lógica

  1. Calcule a linha média de Bollinger, banda superior e banda inferior.Desvio padrão de n períodos, faixa inferior é a linha média - mDesvio-padrão de n períodos.

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

  3. Calcular as linhas EMA de 1 período e n períodos para determinar a dinâmica dos preços.

  4. Quando o preço cruza acima da banda superior de Bollinger e da linha EMA rapidamente, um sinal de compra é gerado.

  5. Quando o preço cruza abaixo da banda inferior de Bollinger e da linha EMA rapidamente, um sinal de venda é gerado.

  6. O indicador ATR define pontos de stop loss, rastreando a direção do preço para evitar ser preso.

Análise das vantagens

  1. As bandas de Bollinger combinadas com o ATR stop loss podem controlar eficazmente o risco.

  2. As linhas rápidas e lentas da EMA determinam a direcção do ímpeto, evitando uma falsa ruptura.

  3. Parâmetros ajustáveis adequados a diferentes ambientes de mercado.

  4. Signais claros de compra/venda com alta frequência de negociação, adequados para negociação a curto prazo.

  5. O indicador ATR detecta a parada de perdas em tempo útil.

Análise de riscos

  1. O intervalo estreito de Bandas de Bollinger pode causar negociações mais ruidosas.

  2. O parâmetro ATR definido demasiado baixo pode causar uma perda de parada demasiado próxima, resultando em uma queda.

  3. Os parâmetros da EMA necessitam de ajustamento para efeitos diferentes do ciclo.

  4. Oscilação do mercado pode gerar mais negócios, precisa de cautela.

  5. O rastreamento de stop loss pode às vezes ser muito agressivo, causando expansão de perdas.

Optimização

  1. Combinar com outros indicadores para filtrar sinais de negociação, por exemplo, RSI para sobrecompra/supervenda, KDJ para divergência, etc.

  2. Considere ajustar dinamicamente os parâmetros de Bollinger com base no ATR para se adequar às flutuações de preços.

  3. Ensaiar diferentes parâmetros do ciclo EMA para obter a melhor combinação de parâmetros.

  4. Ajustar de forma inteligente os parâmetros ATR com base na volatilidade para evitar perdas de parada agressivas.

  5. Considere a incorporação de modelos de aprendizagem profunda para ajudar a temporizar as decisões de compra/venda.

Resumo

Esta estratégia tem uma lógica clara utilizando Bandas de Bollinger para capturar a quebra de preço, ATR para definir a faixa de stop loss, EMA para determinar a direção do momento para julgamento abrangente da quebra de momento, o que pode capturar efetivamente as tendências de preços de curto prazo. Combinar vários indicadores para julgamento abrangente pode melhorar a qualidade do sinal. Ainda há espaço para otimização através de ajuste de parâmetros, combinações de indicadores, etc. para refinar ainda mais esta estratégia para mais estabilidade e elasticidade.


/*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)

Mais.