Estratégia de reversão das bandas de Bollinger reforçada

Autora:ChaoZhang, Data: 21 de setembro de 2023 11:45:37
Tags:

Resumo

Esta estratégia utiliza um indicador Bollinger Bands melhorado para identificar pontos de reversão de preços, vai longo quando o preço se aproxima da faixa inferior e fecha a posição quando uma vela verde aparece, com o objetivo de capturar a reversão média na faixa inferior.

Estratégia lógica

  1. Calcular os parâmetros BB padrão base, dev, BB superior e BB inferior.

  2. Calcular a SMA e as faixas de desvio upex2 e dnex2 a uma certa percentagem da SMA.

  3. Tomar a média de upex2, dnex2 com superior BB, inferior BB para obter upex3 e dnex3.

  4. Tomar maior de upex3 e superior BB como nova banda superior upex, menor de dnex3 e inferior BB como nova banda inferior dnex.

  5. Ir longo quando o preço estiver abaixo de dnex, fechar posição quando a vela verde aparecer (fechar > abrir).

Análise das vantagens

  1. O BB reforçado melhora a sensibilidade do BB original para sinais de reversão anteriores.

  2. Filtros de fenda com padrão de candelabro.

  3. O retrospectivo mostra uma rendibilidade estável de 2008 a 2018, curva suave, DD máximo < 20%.

  4. Alavancagem configurável, horários de negociação para controlo de riscos.

Análise de riscos

  1. Uma regulação insuficiente do parâmetro BB pode causar excesso de negociação ou oportunidades perdidas.

  2. Só por muito tempo, incapaz de lucrar com a inversão da tendência.

  3. O filtro da vela pode estar atrasado, não sendo capaz de sair a tempo.

  4. Os dados dos testes anteriores de 10 anos são insuficientes para testar a robustez.

  5. Não consegue adaptar-se a grandes lacunas ou saltos de abertura.

Orientações de otimização

  1. Combinações de parâmetros de ensaio para otimizar as definições de BB.

  2. Adicionar outros filtros de sinal para melhorar a rentabilidade.

  3. Considere negociações curtas quando o preço exceder a faixa superior.

  4. Configure stop loss para limitar a perda de uma única transação.

  5. Desenvolver um ajuste automático com base na evolução do mercado.

  6. Otimizar as regras de entrada para lacunas e saltos.

  7. Expandir o período de backtest para os parâmetros de teste.

Resumo

Esta estratégia identifica pontos de reversão com BB aprimorado e vai longo perto da faixa inferior com filtro de vela para a tomada rápida de lucro. O desempenho do backtest é bom. Mas só longo, amostra limitada, ajuste de param necessário. Pode enfrentar queda quando as mudanças do mercado. Os próximos passos são confirmar sinais para aumentar a taxa de vitória, negociações curtas, backtest mais longo para robustez, para melhorar a adaptabilidade e estabilidade.


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Advanced Bollinger Bands Strategy v1.0", shorttitle = "ABB str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
p = input(20, "bars")
d = input(25, "percent")
showlines = input(true, defval = true, title = "Show Lines?")
fromyear = input(1900, defval = 1900, 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")

mult = input(2.0, minval=0.001, maxval=50)
basis = sma(close, p)
dev = mult * stdev(close, p)
source = close
upperBB = basis + dev
lowerBB = basis - dev
b1 = plot(basis, color=gray, linewidth=1)
p1 = plot(upperBB, color=aqua,  linewidth=1)
p2 = plot(lowerBB, color=aqua, linewidth=1)

//SMAs
sma = sma(close, p)
upex2 = sma * ((100 + d) / 100)
dnex2 = sma * ((100 - d) / 100)

upex3 = (upex2 + upperBB) / 2
dnex3 = (dnex2 + lowerBB) / 2

upex = max(upperBB, upex3)
dnex = min(lowerBB, dnex3)
//exit = (high > sma and low < sma)
exit = close > open


//Lines
col = showlines ? blue : na
plot(upex, linewidth = 3, color = col, transp = 0)
plot(sma, linewidth = 3, color = col, transp = 0)
plot(dnex, linewidth = 3, color = col, transp = 0)

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[p]))
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, limit = dnex)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, limit = upex)

if exit
    strategy.close_all()

Mais.