Estratégia de negociação de ruptura da banda de Bollinger

Autora:ChaoZhang, Data: 2023-12-19 14:08:45
Tags:

img

Resumo

Esta estratégia é baseada nos trilhos superior e inferior das Bandas de Bollinger para determinar quando o preço atravessa o trilho superior das Bandas de Bollinger para ir longo e atravessa o trilho inferior para ir curto.

Estratégia lógica

Esta estratégia usa o trilho médio / superior / inferior das Bandas de Bollinger para determinar intervalos de preços extremos. O trilho médio é a média móvel simples dos preços de fechamento nos últimos 25 períodos. Os trilhos superior e inferior são um desvio padrão acima e abaixo do trilho médio. Quando o preço atravessa o trilho superior ou inferior, ele indica que há uma quebra e comportamento anormal do preço, que pode ser usado para tomar decisões de negociação.

Se o preço estiver abaixo do trilho inferior, vá longo. Se o preço estiver acima do trilho superior, vá curto. Ao ir longo, defina a perda de parada para o preço de entrada multiplicado pelo fator de perda de parada e tire lucro para o preço de entrada multiplicado pelo fator de lucro.

A estratégia também incorpora algumas regras auxiliares, como permitir apenas um sinal por 24 horas para evitar negociações desnecessárias.

Vantagens da estratégia

  1. Usar Bandas de Bollinger para determinar faixas de preços anormais pertence a estratégias de rastreamento de tendências que podem capturar tendências de preços.
  2. Os parâmetros de stop loss e take profit são definidos de acordo com princípios para controlar perdas individuais.
  3. Algumas regras auxiliares são adicionadas para evitar sinais duplicados e negociações desnecessárias.

Riscos da Estratégia

  1. As Bandas de Bollinger não podem representar plenamente as tendências de preços e podem haver sinais falsos.
  2. O timing incorreto dos sinais de ruptura pode levar a perdas.
  3. É difícil prever a duração e a dinâmica dos mercados de tendência ou não de tendência, o que pode conduzir a posições longas desnecessárias.

Gestão de riscos:

  1. Ajustar os parâmetros da banda de Bollinger para otimizar o tempo do sinal de ruptura.
  2. Incorporar outros indicadores para determinar a tendência principal.
  3. Defina a faixa stop loss e take profit de acordo com diferentes produtos e condições de mercado.

Orientações de otimização

  1. Considerar a otimização adaptativa dos parâmetros da banda de Bollinger para melhor adaptá-los às condições atuais do mercado.
  2. Incorporar outros indicadores para avaliar a fiabilidade dos sinais de tendência e evitar falsos sinais.
  3. Incorporar modelos de aprendizagem de máquina para identificar automaticamente o tempo longo e curto ideal.

Conclusão

Em resumo, esta é uma estratégia simples de rastreamento de tendências usando Bandas de Bollinger para determinar preços anormais e rastrear tendências.


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

//@version=5
strategy("I11L OIL Bot",overlay=true, initial_capital=1000000,default_qty_value=1000000,default_qty_type=strategy.cash,commission_type=strategy.commission.percent,commission_value=0.00)

leverage = input.float(1,"Leverage (x)",step=1)
SL_Factor = 1 - input.float(1,"Risk Capital per Trade (%)", minval=0.1, maxval=100, step=0.05) / 100 / leverage
TP_Factor = input.float(2, step=0.1)
invertBuyLogic = input.bool(false)
 
lookbackDistance = input.int(25)
devMult = input.float(2,step=0.1)

var lastSellHour = 0
var disableAdditionalBuysThisDay = false


if(time > lastSellHour + 1000 * 60 * 60 * 6)
    disableAdditionalBuysThisDay := false
if(strategy.position_size != strategy.position_size[1])
    disableAdditionalBuysThisDay := true
    lastSellHour := time

source = close

//Trade Logic
basis = ta.sma(source, lookbackDistance)
dev = devMult * ta.stdev(source, lookbackDistance)
upper = basis + dev
lower = basis - dev
isBuy = ta.crossunder(source, upper)
isBuyInverted = ta.crossover(source, lower)

plot(upper, color=color.white)
plot(lower, color=color.white)

strategy.initial_capital = 50000

if((invertBuyLogic ? isBuyInverted : isBuy) and not(disableAdditionalBuysThisDay))
    strategy.entry("Long", strategy.long, (strategy.initial_capital / close) * leverage)

if(strategy.position_size > 0)
    strategy.exit("SL Long", "Long", stop=strategy.position_avg_price * SL_Factor)
    strategy.close("Long",  when=close > strategy.position_avg_price * (1 + (1 - SL_Factor) * TP_Factor), comment="TP Long")





Mais.