RSI e Bandas de Bollinger Estratégia de negociação de fusão para LTC

Autora:ChaoZhang, Data: 2024-02-06 10:48:03
Tags:

img

Resumo

Esta estratégia combina o Índice de Força Relativa (RSI) e as Bandas de Bollinger para implementar uma estratégia automatizada que pode comprar e vender Litecoin (LTC).

Estratégia lógica

A estratégia baseia-se principalmente nos dois seguintes indicadores para as decisões de negociação:

  1. Índice de Força Relativa (RSI): Reflete a magnitude e a velocidade das mudanças de preço para determinar se um ativo está sobrecomprado ou sobrevendido.

  2. Bollinger Bands: contém três linhas - linha do meio, banda superior e banda inferior. A linha do meio é a média móvel de n dias. As bandas superior e inferior são a linha do meio ± 2 desvio padrão dos preços nos últimos n dias. O preço perto da banda superior sugere uma condição de sobrecompra e perto da banda inferior sugere uma condição de sobrevenda.

De acordo com estes dois indicadores, as regras de negociação são:

Comprar sinalQuando o RSI cruza acima de 20 a partir da zona baixa, indica uma condição de sobrevenda que pode reverter.

Venda de sinalQuando o RSI cruza abaixo de 80 a partir da zona alta, indica uma condição de sobrecompra que pode reverter.

Como podemos ver, a estratégia considera tanto a condição de sobrecompra/supervenda do mercado quanto a ruptura dos preços para gerar sinais de negociação.

Vantagens

As principais vantagens desta estratégia são:

  1. Combina o RSI e as Bandas de Bollinger para julgar de forma abrangente a condição do mercado, resultando em sinais confiáveis.

  2. Os indicadores RSI mostram os níveis de sobrecompra/supervenda, enquanto as Bandas de Bollinger mostram o desvio dos preços da distribuição típica.

  3. Considera tanto as leituras do indicador como a ruptura dos preços para evitar falsos sinais durante o mercado de intervalo.

  4. A definição de parâmetros razoáveis do período e dos limiares do RSI e das bandas de Bollinger baseados na otimização para evitar falhas do indicador.

  5. Especificamente otimizado para LTC. O desempenho é bom com base no backtest de dados históricos.

Riscos

Apesar das vantagens, existem alguns riscos:

  1. Tanto o RSI quanto as Bandas de Bollinger podem falhar, especialmente durante condições anormais de mercado, levando a sinais e perdas errados.

  2. A otimização de parâmetros baseia-se em dados históricos.

  3. Apesar de dois indicadores serem utilizados, ainda podem ocorrer flutuações durante o mercado de intervalo, causando perdas e custo de oportunidade.

  4. O custo de negociação é ignorado na estratégia. A alta frequência de negociação e a posição de grande porte podem corroer os lucros rapidamente através dos custos.

Para reduzir os riscos acima mencionados, podem ser adotados métodos como ajuste de parâmetros, mais indicadores, dimensionamento de posições, limitação da frequência de negociação, etc.

Orientações para melhorias

Algumas orientações para melhorar a estratégia:

  1. Teste diferentes parâmetros RSI e Bollinger Bands para melhores configurações.

  2. Introduzir regras de dimensionamento das posições baseadas no património líquido da conta.

  3. Definir o stop loss ou utilizar outros indicadores para determinar o stop loss e tomar níveis de lucro para limitar o drawdown máximo.

  4. Considere o deslizamento para ajustar parâmetros e parar perdas na negociação ao vivo.

  5. Adicione mais fatores como índice de volatilidade, volume, etc. para formar um modelo multifator para maior precisão.

  6. Projetar mecanismos adaptativos de acordo com diferentes regimes e ciclos de mercado LTC para ajustar dinamicamente os parâmetros da estratégia.

Conclusão

Esta estratégia julga os níveis de sobrecompra / sobrevenda primeiro e, em seguida, combina-se com o rompimento para gerar sinais de negociação, tornando-se adequado para LTC. Mas os riscos como falha do indicador, mudança de regime e custos de negociação devem ser observados.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-05 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("LTCUSD BB + RSI 30MIN,", shorttitle="LTCUSD BBRSI 30MIN ", overlay=true)
     
     // Strategy Tester Start Time
sYear = input(2019, title = "Start Year")
sMonth = input(01, title = "Start Month", minval = 01, maxval = 12)
sDay = input(01, title = "Start Day", minval = 01, maxval = 31)
sHour = input(00, title = "Start Hour", minval = 00, maxval = 23)
sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59)
startTime = true


///////////// RSI
RSIlength = input(5,title="RSI Period Length") 
RSIoverSold = input(20, minval=1,title="RSIL")
RSIoverBought = input(80, minval=1,title="RSIh")
price = open
vrsi = rsi(price, RSIlength)


///////////// Bollinger Bands
BBlength = input(60, minval=1,title="Bollinger Period Length")
BBmult = input(2.0, minval=0.001, maxval=50,title="Bb")
BBbasis = sma(price, BBlength)
BBdev = BBmult * stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = crossover(source, BBlower)
sellEntry = crossunder(source, BBupper)
plot(BBbasis, color=aqua,title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=silver,title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=silver,title="Bollinger Bands Lower Line")
fill(p1, p2)


///////////// 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] ? red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? green : na
barcolor(switch1?TrendColor:na)
bgcolor(switch2?TrendColor:na,transp=50)


///////////// RSI + Bollinger Bands Strategy
if (not na(vrsi))

    if (crossover(vrsi, RSIoverSold) and crossover(source, BBlower))
        strategy.entry("RSI_BB_L", strategy.long and startTime, stop=BBlower,  comment="RSI_BB_L")
    else
        strategy.cancel(id="RSI_BB_L")
        
    if (crossunder(vrsi, RSIoverBought) and crossunder(source, BBupper))
        strategy.entry("RSI_BB_S", strategy.short and startTime, stop=BBupper,  comment="RSI_BB_S")
    else
        strategy.cancel(id="RSI_BB_S")

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

Mais.