Oscillador de Momentum Bollinger Band RSI Estratégia de negociação

Autora:ChaoZhang, Data: 2023-09-18 14:07:51
Tags:

Resumo

Esta estratégia combina as Bandas de Bollinger e o indicador do Índice de Força Relativa (RSI) para prever a volatilidade dos preços e determinar pontos de entrada ideais. A lógica é simples - observamos os preços de fechamento que tocam a banda inferior de Bollinger, após o qual há dois cenários possíveis: ou o preço retrocede da banda inferior de Bollinger ou continua a cair. Para confirmar o movimento dos preços, usamos um segundo indicador, o RSI, para investigar mais a tendência. Por exemplo, se o preço alcançar a banda inferior de Bollinger, mas o valor do RSI não estiver em território de sobrevenda, podemos concluir que o preço continuará a cair. Se o valor do RSI estiver sobrevendo, podemos usar essa área como nosso ponto de entrada.

Um stop loss é necessário para evitar a perda de muito capital se o RSI persistir por muito tempo no território de sobrevenda.

A melhor área de take profit é quando o preço se recupera acima da banda média/banda superior de Bollinger ou quando o RSI atinge níveis de sobrecompra, o que ocorrer primeiro.

Entrada longa:

RSI < 30 e preço de fechamento < faixa inferior de Bollinger

Saída longa:

RSI > 70

Estratégia lógica

A estratégia primeiro calcula o indicador RSI e define limites superior/inferior para determinar os níveis de sobrecompra/supervenda. Em seguida, calcula as faixas média, superior e inferior de Bollinger. Quando o preço de fechamento toca a faixa inferior e o RSI está abaixo de 30, vá longo. Quando o RSI está acima de 70, feche a posição.

Ao entrar em longo, defina pontos de stop loss e take profit.

Isso nos permite comprar na faixa inferior de Bollinger quando o RSI está baixo e vender quando o RSI está alto, lucrando com a reversão.

Análise das vantagens

  • As bandas de Bollinger determinam pontos de reversão com precisão
  • O RSI filtra falhas, garantindo uma entrada confiável
  • Gerenciar de forma eficaz o risco comercial
  • Extenso backtesting e otimização de parâmetros garantem uma rentabilidade estável

Análise de riscos

  • Bandas de Bollinger não prevêem perfeitamente reversões, algumas falhas ocorrem
  • O RSI também pode dar sinais falsos
  • Stop loss demasiado próximo não pode manter posição, demasiado solto aumenta risco

Os riscos podem ser mitigados ajustando os parâmetros de Bollinger, utilizando outros indicadores e ampliando adequadamente o stop loss.

Orientações de otimização

  • Considere a combinação com outros indicadores como KD, MACD para filtrar entradas
  • Ajuste dinâmico das percentagens de stop loss/take profit
  • Otimizar os parâmetros de Bollinger
  • Ensaiar a robustez em diferentes produtos

Conclusão

O perfil geral de risco/recompensa desta estratégia é equilibrado e os resultados do backtest são bons. Melhorias adicionais podem ser feitas através da otimização de parâmetros e melhorias de indicadores. O conceito de negociação de reversão baseado em Bandas de Bollinger é simples e confiável, garantindo mais pesquisa e refinamento.

[/trans]


/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy(title="Bollinger Band with RSI", shorttitle="BB&RSI", format=format.price, precision=2, pyramiding=50, initial_capital=10000, calc_on_order_fills=false, calc_on_every_tick=true, default_qty_type=strategy.cash, default_qty_value=1000, currency="USD")
len = input(14, minval=1, title="Length")
src = input(close, "Source", type = input.source)
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))
plot(rsi, "RSI", color=#8E1599)
band1 = hline(70, "Upper Band", color=#C0C0C0)
band0 = hline(30, "Lower Band", color=#C0C0C0)
fill(band1, band0, color=#9915FF, transp=90, title="Background")

length_bb = input(20,title="BB Length", minval=1)
mult = input(2.0, minval=0.001, maxval=50, title="BB StdDev")
basis = sma(src, length_bb)
dev = mult * stdev(src, length_bb)
upper = basis + dev
lower = basis - dev
offset = input(0, "BB Offset", type = input.integer, minval = -500, maxval = 500)


Plot_PnL = input(title="Plot Cummulative PnL", type=input.bool, defval=false)
Plot_Pos = input(title="Plot Current Position Size", type=input.bool, defval=false)

long_tp_inp = input(10, title='Long Take Profit %', step=0.1)/100
long_sl_inp = input(25, title='Long Stop Loss %', step=0.1)/100
// Take profit/stop loss
long_take_level = strategy.position_avg_price * (1 + long_tp_inp)
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)

entry_long = rsi < 30 and src < lower
exit_long = rsi > 70

plotshape(entry_long, style=shape.labelup, color=color.green,  location=location.bottom, text="L", textcolor=color.white, title="LONG_ORDER")
plotshape(exit_long, style=shape.labeldown, color=color.red,  location=location.top, text="S", textcolor=color.white, title="SHORT_ORDER")

strategy.entry("Long",true,when=entry_long)    
strategy.exit("TP/SL","Long", limit=long_take_level, stop=long_stop_level)
strategy.close("Long", when=exit_long, comment="Exit")
plot(Plot_PnL ? strategy.equity-strategy.initial_capital : na, title="PnL", color=color.red)
plot(Plot_Pos ? strategy.position_size : na, title="open_position", color=color.fuchsia)


Mais.