Esta é uma estratégia de breakout baseada no indicador Bollinger Bands. Utiliza as bandas superior e inferior de Bollinger Bands para gerar sinais de breakout para entrada e saída. Esta estratégia também incorpora trailing stop loss e mecanismo de pirâmide para alcançar maior retorno em mercados de tendência.
A estratégia calcula primeiro a faixa média, a faixa superior e a faixa inferior das Bandas de Bollinger. A faixa média é a média móvel do preço, enquanto as bandas superior e inferior são a faixa média +/- um desvio padrão.
Quando o preço quebra acima da faixa inferior, um sinal longo é gerado. Quando o preço quebra abaixo da faixa superior, um sinal curto é gerado. Isso indica que o preço está saindo da faixa de Bollinger Bands e pode entrar em um movimento de tendência.
Além disso, a estratégia verifica o rompimento do corpo. Se o fechamento for maior do que o aberto e o corpo penetrar na faixa média por uma certa porcentagem, ele irá nivelar a posição. Se o fechamento for menor do que o aberto e o corpo penetrar na faixa média por uma certa porcentagem, ele também irá nivelar a posição. Isso evita perdas por falsos rompimentos.
Após entrar em posições, a estratégia pode seguir o stop loss e a pirâmide.
As vantagens desta estratégia são as seguintes:
Utilize Bandas de Bollinger para determinar a direção da tendência e capturar breakouts.
Verifique o corpo e a faixa média para determinar a validade da fuga, evitando perdas por falsas fugas.
Use o stop loss para bloquear os lucros e controlar o risco.
Use a pirâmide para obter maiores retornos em movimentos de tendência.
Uma lógica clara e fácil de entender.
Os riscos desta estratégia incluem:
Os breakouts de Bollinger Bands não podem evitar completamente os falsos breakouts, podem ocorrer algumas perdas.
A colocação incorreta de um stop loss pode causar um stop out prematuro ou não limitar as perdas.
Tempos e tamanhos de pirâmide excessivos podem levar a perdas amplificadas.
A falha em parar a tempo quando a tendência se inverte pode levar a grandes quedas.
A otimização insuficiente dos parâmetros pode conduzir a um baixo desempenho.
Requer validação em diferentes mercados.
A estratégia pode ser melhorada pelos seguintes aspectos:
Teste e otimize os parâmetros das Bandas de Bollinger para encontrar melhores combinações.
Teste diferentes estratégias de stop loss e otimize a colocação de stop loss.
Teste e encontre os tempos e tamanhos ideais de pirâmide.
Adicione o filtro de tendência para evitar pirâmides contra a tendência.
Otimize a lógica de fuga do corpo para reduzir as falsas fugas.
Adicionar ordens condicionais para utilizar diferentes conjuntos de parâmetros com base nas condições do mercado.
Realizar mais backtests em diferentes produtos e prazos para melhorar a robustez.
Utilize o aprendizado de máquina para otimizar automaticamente os parâmetros.
Em resumo, esta estratégia utiliza Bandas de Bollinger para determinar a direção da tendência e capturar breakouts, com stop loss adicionais, piramidagem e outras funções para alcançar bons resultados.
/*backtest start: 2023-11-05 00:00:00 end: 2023-11-12 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy("Noro's Bollinger Strategy v1.1", shorttitle = "Bollinger str 1.1", 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, minval = 0.001, maxval = 50, title = "Bollinger Mult") source = input(ohlc4, defval = ohlc4, title = "Bollinger Source") showbands = input(true, defval = true, title = "Show Bollinger Bands") 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") //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 up = close <= lower dn = close >= upper exit = (strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open) and body > abody / 2 //Trading if up strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))) if dn strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))) if time > timestamp(toyear, tomonth, today, 00, 00) or exit strategy.close_all()