Estratégia quantitativa baseada na inversão da faixa de Bollinger

Autora:ChaoZhang, Data: 2023-11-22 17:44:40
Tags:

img

Resumo

A estratégia é chamada de Bollinger Band Reversal Based Quantitative Strategy. Utiliza os trilhos superior e inferior das Bandas de Bollinger para determinar entradas e saídas. Quando o preço está perto do trilho inferior das bandas e mostra sinais de uma ruptura descendente, isso indica que o preço pode estar revertendo, então vá longo. Quando o preço sobe para o trilho superior, isso indica que o preço pode reverter para baixo, então vá curto.

Estratégia lógica

A estratégia usa o indicador RSI para determinar entradas longas. Especificamente, verifica se o preço de fechamento da barra mais recente é menor do que o preço mais baixo das 6 barras anteriores, enquanto o Bollinger Band Width (BBW) é maior do que um limiar e o Bollinger Band Ratio (BBR) está dentro de um intervalo. Se esses critérios forem atendidos, ele indica que o preço pode estar se revertendo, então vá longo.

A saída é simples: quando o RSI ultrapassar 70, indicando que o preço está sobreaquecido, feche a posição longa.

Análise das vantagens

A maior vantagem desta estratégia é utilizar os trilhos superior e inferior das Bandas de Bollinger para determinar as entradas. Quando o BB inverte a direção, vá longo ou curto para pegar oportunidades de reversão de curto prazo.

Além disso, a estratégia é sensível aos parâmetros.

Análise de riscos

O principal risco é que o BB não prevê perfeitamente as reversões de preços. Se o momento for inadequado, isso facilmente leva a perdas de melhores entradas ou perdas flutuantes.

Além disso, as flutuações de curto prazo podem desencadear entradas e saídas frequentes, aumentando os custos das comissões e deslizamentos.

Orientações de otimização

A estratégia pode ser melhorada nos seguintes aspectos:

  1. Otimizar parâmetros: testar e ajustar BBW, BBR e outros parâmetros de forma mais precisa para diferentes produtos.

  2. Adicionar mecanismos de stop loss, tais como stop loss de trailing e time stop loss, para limitar as perdas máximas.

  3. Incorporar outros indicadores, como KDJ e MACD, para tornar as entradas mais fiáveis.

  4. Melhorar a lógica de saída. A saída atual é simples. Pode otimizar com a tomada de lucro ou saídas baseadas na volatilidade.

Conclusão

Esta estratégia utiliza as características das Bandas de Bollinger para determinar pontos de reversão potenciais para entradas e saídas. Em comparação com indicadores individuais como o RSI, ele tem um tempo mais preciso. Com ajuste de parâmetros, stop losses e take profits, pode ser mais confiável. Mas a previsão do BB não é perfeita, então ainda há alguma aleatoriedade no desempenho.


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

//@version=4

//study(title = "Bolinger strategy", overlay=true)
strategy("Bolinger strategy",currency="SEK",default_qty_value=10000,default_qty_type=strategy.cash,max_bars_back=50)
len = 5
src = close
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))


bbw3level = input(15, title="bbw3")
bbr3level = input(0.45, title="bbr3level")
bbrlower = input(0.4480, title="bbrlower")
bbrhigher = input(0.4560, title="bbrhigher")
sincelowestmin = input(7, title="sincelowestmin")
sincelowestmax = input(57, title="sincelowestmax")


length = input(20, minval=1)
mult = 20
src3 = close[3]
basis3 = sma(src3, length)
dev3 = mult * stdev(src3, length)
upper3 = basis3 + dev3
lower3 = basis3 - dev3
bbr3 = (src3 - lower3)/(upper3 - lower3)
bbw3 = (upper3-lower3)/basis3*100


basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)
bbw = (upper-lower)/basis*100

criteriamet = 0
crossUnderB0 = crossunder(bbr,0)

since_x_under = barssince(crossUnderB0)


sincelowest = barssince(close[6] > close[3] and close[5] > close[3] and close[4] > close[3] and close[2] > close[3] and close[1] > close[3] and close > close[3] and bbw3 > bbw3level and bbr3 < bbr3level) //  and bbr3 < 0 

if sincelowest > sincelowestmin and sincelowest < sincelowestmax and bbr > bbrlower and bbr < bbrhigher
	criteriamet := 1
else
	criteriamet := 0	
//plot (criteriamet)

//exit 
exitmet = 0
if rsi > 70
	exitmet := 1
else
	exitmet := 0

if criteriamet == 1
	strategy.entry("long", strategy.long)
if exitmet == 1
	strategy.close("long")



Mais.