Estratégia de negociação quantitativa baseada em bandas de Bollinger e MACD

Autora:ChaoZhang, Data: 2024-02-23 14:30
Tags:

img

Resumo

Esta estratégia é uma estratégia quantitativa de negociação baseada em Bollinger Bands e indicadores MACD.

Princípio da estratégia

A estratégia utiliza principalmente as Bandas de Bollinger e os indicadores MACD para determinar os sinais de negociação.

As bandas de Bollinger consistem de uma banda média, banda superior e banda inferior. Um sinal de compra é gerado quando o preço atravessa a banda inferior. Um sinal de venda é gerado quando o preço atravessa a banda superior. A estratégia usa o princípio de ruptura das bandas de Bollinger para determinar sinais de ruptura mais fortes.

O indicador MACD reflete a relação entre as médias móveis de curto e longo prazo. Ele usa cruzamentos da linha de diferença e da linha de sinal para determinar pontos de entrada e saída. Esta estratégia integra o uso de indicadores MACD para filtrar sinais de negociação de Bollinger Bands e gerar sinais de compra mais eficazes quando a linha de diferença cruza acima da linha de sinal.

No geral, a estratégia combina o acompanhamento da tendência das bandas de Bollinger e as vantagens da média móvel do MACD, visando captar maiores flutuações do mercado em tendências fortes.

Vantagens da estratégia

  1. A combinação de Bandas de Bollinger e indicadores MACD torna os sinais de negociação mais confiáveis.

  2. O rastreamento da tendência de Bollinger Bands e os crossovers da média móvel MACD podem produzir sinais de entrada mais fortes em mercados em tendência.

  3. Os falsos sinais podem ser efetivamente filtrados através de um julgamento de dois indicadores, reduzindo o risco de negociação.

  4. Há muito espaço para a otimização dos parâmetros da estratégia, que pode ser ajustada de acordo com diferentes produtos e ciclos.

Riscos da Estratégia

  1. Nos mercados de intervalo, os sinais de negociação gerados pelas bandas de Bollinger e pelo MACD podem ser frequentes, trazendo riscos de excesso de negociação.

  2. Três cruzes douradas sucessivas do MACD em níveis baixos podem enfrentar o risco de uma inversão descendente.

  3. A estratégia utiliza múltiplos indicadores, tornando a otimização de parâmetros e o teste de estratégia bastante difíceis.

Para abordar estes riscos, métodos como ajustar os períodos de retenção, definir stop losses, otimizar parâmetros podem ser utilizados para controlá-los.

Orientações para a otimização da estratégia

  1. Teste os parâmetros de Bollinger Bands de período mais longo para reduzir a frequência de negociação.

  2. Otimizar os parâmetros da linha rápida e lenta do MACD para melhorar a sensibilidade do indicador.

  3. Adicionar outros indicadores para filtragem, como KDJ, RSI, etc., para melhorar a qualidade do sinal.

  4. Configurar paradas dinâmicas para sair automaticamente das transacções e controlar os riscos de transação única.

Conclusão

Em teoria, integrando a negociação de breakout de Bollinger Bands e a filtragem do indicador MACD, esta estratégia pode produzir sinais de negociação de alta qualidade. Através da otimização de parâmetros e medidas de controle de risco, bons resultados de backtest podem ser alcançados. No entanto, nenhuma estratégia pode evitar completamente as perdas. O desempenho comercial real precisa de uma avaliação prudente.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Nabz-BBMACD-2022-V1.1", shorttitle="BBM-Nabz", overlay=true)


// My 1st Pine Scrpt Indicator
// Work on best on 1Hr Chart
// Open for Help/Donations.


var float lastentry=1
int result = 0
float x = 0
drawshape = false

/////////////EMA
shortest = ta.ema(close, 20)
short = ta.ema(close, 50)
longer = ta.ema(close, 100)
longest = ta.ema(close, 200)

plot(shortest, color = color.red)
plot(short, color = color.orange)
plot(longer, color = color.aqua)
plot(longest, color = color.blue)

///////////// RSI
RSIlength = input(6,title="RSI Period Length") 
RSIoverSold = 50
RSIoverBought = 50
price = close
vrsi = ta.rsi(price, RSIlength)


///////////// Bollinger Bands
BBlength = input.int(200, minval=1,title="Bollinger Period Length")
BBmult = 2 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)



////////////// MACD
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")
TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na


///////////Strategy

bool tcu = not (ta.crossunder(price[0],shortest[0]))


if (((price[1]<BBlower[1]) and (ta.crossover(price,BBlower))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 1st IF")
    
if (((ta.crossover(delta, 0.0) and (ta.crossover(price,BBlower)))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 2nd IF")    
    
if (((ta.crossover(delta, 0.0)) and (low[0]>shortest[0])) and (price[1]<low))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 3rd IF")   //else

if (((ta.crossover(delta, 0.01)) and (high[1]<BBupper)) and (tcu))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 4th IF")

       
if ((ta.crossunder(low[0],shortest[0]) and close<shortest))
    strategy.close(id="RSI_BB_L", comment="Close by 1st IF")
    
    
    
if (price<lastentry)
    drawshape := true
    
if (price<strategy.opentrades.entry_price(0)/1.01175734321249)
    strategy.close(id="RSI_BB_L", comment="Close by 2nd IF")



plot(strategy.opentrades.entry_price(0), color=color.yellow)


Mais.