A estratégia de rastreamento de Bollinger da Noro

Autora:ChaoZhang, Data: 2023-11-28 16:57:28
Tags:

img

Resumo

Esta é uma estratégia de rastreamento de impulso baseada em Bandas de Bollinger, que combina Bandas de Bollinger para julgar tendências e pontos de reversão do mercado e define posições longas e curtas para rastrear flutuações do mercado.

Princípios

O indicador central desta estratégia é Bollinger Bands, que consiste em banda média, banda superior e banda inferior. A banda média é a média móvel de n dias, e as bandas superior e inferior são os desvios da banda média mais/menos desvio padrão. Quando o preço se aproxima da banda superior/inferior, é considerado um sinal de sobrecompra/supervenda. A estratégia incorpora desvio de tendência como a base para as posições de abertura, ou seja, posições de abertura quando o preço atravessa a banda média na direção oposta. Para evitar perdas causadas por falsas rupturas, a estratégia requer que a largura da ruptura seja maior do que a média. A condição de fechamento é que o preço volte para trás depois de quebrar a banda média.

Esta estratégia também incorpora entradas que seguem a tendência e entradas de reversão média, correspondendo a diferentes oportunidades de negociação. As entradas que seguem a tendência exigem que a faixa média seja a referência de suporte / resistência e formem breakouts de desvio. As entradas de reversão média revertem diretamente perto das bandas de Bollinger superior / inferior. A estratégia combina esses dois tipos de sinais e pode realizar operações de rastreamento de tendência e reversão.

Análise das vantagens

Esta estratégia combina as características de sobrecompra/supervenda das Bandas de Bollinger com o julgamento do ponto de reversão. Isso permite que ela se aplique a mercados de tendência e variáveis, capturando diferentes tipos de oportunidades de negociação. A configuração de saída de stop loss impede que a perda se expanda. Além disso, a capacidade de negociar longo e curto aumenta a aplicabilidade da estratégia.

Em comparação com as estratégias simples de Bollinger, a lógica de tendência adicional torna as entradas desta estratégia mais estáveis e também capta oportunidades de reversão.

Análise de riscos

Esta estratégia depende principalmente das características de sobrecompra/supervenda das Bandas de Bollinger. Portanto, quando há flutuação extrema de preços, a largura das Bandas de Bollinger continua a se expandir, o que pode facilmente levar a múltiplas negociações perdedoras. Este é um ponto de risco potencial. Além disso, ainda há algumas incertezas e erros nos julgamentos de reversão, causando entradas e paradas fracassadas.

Contra a falha das Bandas de Bollinger, podemos encurtar o parâmetro n para tornar as bandas mais sensíveis, ou reduzir a largura da banda para reduzir a chance de perdas.

Orientações de otimização

As principais direcções para otimizar esta estratégia incluem:

  1. Os parâmetros das Bandas de Bollinger podem ser ajustados de acordo com diferentes mercados para encontrar a combinação ideal.
  2. A magnitude do desvio e o cálculo dos valores médios podem ser testados com outras opções.
  3. Adicionar mais filtros para julgar sinais de entrada e reduzir falsos positivos.
  4. Teste outros métodos de stop loss como trail stop loss.
  5. Os parâmetros podem ser otimizados para produtos e prazos específicos.

Conclusão

Esta estratégia faz expansões e otimizações eficazes para as estratégias Bollinger padrão. O desvio de tendência adicionado melhora a estabilidade e utiliza as oportunidades de reversão bem. A capacidade de negociar em ambas as direções e parar as perdas também torna a estratégia mais robusta.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy("Noro's Bollinger Strategy v1.3", shorttitle = "Bollinger str 1.3", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")

length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length")
mult = input(2.0, defval = 2.0, minval = 0.001, maxval = 50, title = "Bollinger Mult")
source = input(ohlc4, defval = ohlc4, title = "Bollinger Source")

uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")

fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
showbands = input(true, defval = true, title = "Show Bollinger Bands")

//Bollinger Bands
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev

//Lines
col = showbands ? black : na 
plot(upper, linewidth = 1, color = col)
plot(basis, linewidth = 1, color = col)
plot(lower, linewidth = 1, color = col)

//Body
body = abs(close - open)
abody = ema(body, 30)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0 
up1 = bar == -1 and ohlc4 >= basis and ohlc4 < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset
dn1 = bar == 1 and ohlc4 <= basis and ohlc4 > lower and (close > strategy.position_avg_price or strategy.position_size == 0) and uset
up2 = close <= lower and usect
dn2 = close >= upper and usect
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2

//Trading
if up1 or up2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Mais.