Estratégia baseada em bandas de Bollinger, RSI e média móvel

Autora:ChaoZhang, Data: 2024-02-02 11:35:17
Tags:

img

Resumo

Esta estratégia integra Bandas de Bollinger, Índice de Força Relativa (RSI) e Média Móvel (MA) para identificar possíveis pontos de entrada e saída no mercado.

Estratégia lógica

A estratégia usa duas bandas de Bollinger com parâmetros diferentes para criar canais de preços. Os parâmetros padrão são comprimento de 20 períodos e desvio padrão de 2. As bandas superior e inferior servem como níveis dinâmicos de resistência e suporte.

O indicador RSI mede a força do ímpeto dos preços. Seus valores são usados para determinar se existem condições de sobrecompra ou sobrevenda.

Uma média móvel de 50 períodos é incorporada para identificar a direção geral da tendência. Quando o preço está acima da MA, sugere uma tendência de alta. Quando o preço está abaixo da MA, sugere uma tendência de queda.

As condições de entrada para as negociações longas são quando o RSI ultrapassa o nível de sobrecompra e as Bandas de Bollinger não estão se contraindo.

As condições de saída para as negociações longas são quando o RSI cai abaixo do nível de sobrecompra ou quando o preço fecha abaixo da MA de 50 períodos.

Vantagens

  1. A combinação de Bandas de Bollinger, RSI e MA evita a geração de falsos sinais através de sinais de validação cruzada.

  2. As bandas de Bollinger identificam altos/baixos locais e confirmam breakouts. O RSI filtra falsos breakouts. O MA determina a tendência geral. Os sinais são verificados.

  3. Os parâmetros otimizados das Bandas de Bollinger, utilizando dois desvios padrão, representam com mais precisão os canais de preços.

Riscos

  1. As bandas de Bollinger podem gerar sinais falsos ao contrair.

  2. O RSI e o MA podem gerar sinais incorretos durante os mercados de variação.

  3. A diferença de preços não pode ser controlada de forma eficaz, sendo que outros indicadores devem confirmar a existência de breaches reais.

Oportunidades de melhoria

  1. Otimizar os parâmetros das bandas de Bollinger e do RSI para diferentes produtos e prazos.

  2. Adicionar ordens de stop loss que são acionadas automaticamente quando o preço ultrapassa o nível stop.

  3. Adicione um filtro de tendência como o ADX para evitar negociações ineficientes durante os mercados variáveis.

  4. Integração com sistema de negociação automatizado para executar sinais automaticamente sem intervenção manual.

Conclusão

Esta estratégia combina os pontos fortes das Bandas de Bollinger, RSI e MA com parâmetros otimizados para melhorar a precisão do sinal. Pode gerar automaticamente alertas de negociação para execução. Os principais riscos vêm de falsos sinais durante os mercados variáveis. A adição de um filtro de tendência pode reduzir as negociações ineficientes.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bollinger Bands, RSI, and MA Strategy", overlay=true)

// Define input variables
b_len = input(20, title="BB Length")
bb_mult = input(2.0, title="BB Standard Deviation")
bb_deviation1 = input(1.0, title="BB Deviation 1")
rsi_len = input(14, title="RSI Length")
overbought = input(70, title="Overbought RSI Level")
oversold = input(30, title="Oversold RSI Level")
ma_len = input(50, title="MA Length")
stop_loss_percent = input(1.0, title="Stop Loss Percentage")
source = input(close, title="Source")

// Calculate Bollinger Bands
bb_upper = ta.sma(source, b_len) + bb_mult * ta.stdev(source, b_len)
bb_lower = ta.sma(source, b_len) - bb_mult * ta.stdev(source, b_len)
bb_upper1 = ta.sma(source, b_len) + bb_deviation1 * ta.stdev(source, b_len)
bb_lower1 = ta.sma(source, b_len) - bb_deviation1 * ta.stdev(source, b_len)

// Calculate RSI
rsi = ta.rsi(source, rsi_len)

// Calculate Moving Average
ma = ta.sma(source, ma_len)

// Determine if Bollinger Bands are contracting
bb_contracting = ta.stdev(source, b_len) < ta.stdev(source, b_len)[1]

// Entry conditions
enterLong = rsi > overbought and not bb_contracting
enterShort = rsi < oversold and not bb_contracting

// Exit conditions
exitLong = close < ma
exitShort = close > ma

// Exit trades and generate alerts
if strategy.position_size > 0 and exitLong
    strategy.close("Long") // Exit the long trade
    alert("Long Exit", alert.freq_once_per_bar_close)
if strategy.position_size < 0 and exitShort
    strategy.close("Short") // Exit the short trade
    alert("Short Exit", alert.freq_once_per_bar_close)

// Strategy orders
if enterLong
    strategy.entry("Long", strategy.long)
if enterShort
    strategy.entry("Short", strategy.short)
if exitLong
    strategy.close("Long")
if exitShort
    strategy.close("Short")

// Plotting Bollinger Bands
plot(bb_upper, color=color.blue, title="BB Upper 2")
plot(bb_lower, color=color.blue, title="BB Lower 2")
plot(bb_upper1, color=color.red, title="BB Upper 1")
plot(bb_lower1, color=color.red, title="BB Lower 1")

// Plotting RSI
plot(rsi, color=color.orange, title="RSI")

// Plotting Moving Average
plot(ma, color=color.green, title="Moving Average")


Mais.