Estratégia de Crossover de Média Móvel CCI com Indicador RSI de Bandas de Bollinger


Data de criação: 2023-12-20 16:24:49 última modificação: 2023-12-20 16:24:49
cópia: 0 Cliques: 1107
1
focar em
1621
Seguidores

Estratégia de Crossover de Média Móvel CCI com Indicador RSI de Bandas de Bollinger

Visão geral

Esta estratégia combina o uso de três indicadores, a faixa de Brin, o índice de força relativa (RSI) e o índice de caminho de mercadorias (CCI), para procurar seus sinais de cruzamento e emitir sinais de compra e venda. A estratégia visa detectar o fenômeno de supercompra e supervenda do mercado, entrando no ponto de reversão, na esperança de obter um melhor retorno do investimento.

Princípio da estratégia

Faixa de Brin

A faixa de Brin é composta por um meio, um topo e um fundo. O meio é geralmente representado por uma média móvel de 20 dias. O topo e o fundo são, respectivamente, dois pontos de diferença padrão acima e abaixo do meio.

Indicador RSI

O indicador RSI reflete a variação da velocidade com que os preços de fechamento subem e descem ao longo de um período de tempo, e é usado para medir a relação de força entre os preços de compra e venda. O RSI é um sinal de venda quando o valor está entre 0 e 30 e é um sinal de compra quando o RSI está entre 70 e 100.

Índice CCI

O índice CCI é usado para medir o grau em que o preço de uma ação se desvia de seu preço médio. +100 representa um preço muito acima do preço médio, ou seja, uma sobrecompra; -100 representa um preço muito abaixo do preço médio, ou seja, uma sobrevenda. O CCI pode refletir situações extremas em que o preço pode ser exagerado.

Estratégia de sinal cruzado

Esta estratégia usa a faixa de Brin para determinar se o preço superou a sobrevenda em curto prazo, o indicador RSI para determinar o equilíbrio da força de compra e venda, o indicador CCI para determinar o grau de desvio do preço. A faixa de Brin, o RSI e o indicador CCI emitem instruções de negociação quando dão sinais de compra / venda ao mesmo tempo.

Vantagens estratégicas

  1. Combinação de vários indicadores de julgamento, redução de falsos sinais e melhoria da precisão do sinal
  2. Descobrir pontos de inflexão no mercado e capturar a oportunidade de uma reversão
  3. Os parâmetros podem ser customizados para adaptar-se a diferentes cenários de mercado
  4. Filtração uniforme de CCI, redução de ruído e maior estabilidade

Riscos e soluções

  1. Os indicadores Brinks, RSI e CCI podem gerar sinais errados, causando perdas de negociação. Os parâmetros podem ser relaxados de forma apropriada ou adicionados a outros indicadores para verificação.
  2. O indicador CCI não é muito adequado para o comportamento de curvatura, podendo ser substituído por indicadores de linha média ou de taxa de flutuação.
  3. As instruções de negociação são apenas stop loss, sem stop loss. Pode ser adicionado um stop stop móvel para bloquear parte dos lucros.

Direção de otimização

  1. Testar mais combinações de parâmetros para encontrar o melhor;
  2. Aumentar os algoritmos de aprendizagem de máquina para otimizar os parâmetros em tempo real;
  3. Aumentar as estratégias de contenção e estabelecer metas de lucro;
  4. Combinação de mais indicadores, como MACD, KD e outros para determinar a confiabilidade do sinal.

Resumir

Esta estratégia leva em consideração a situação do mercado a curto, médio e longo prazo, através de três indicadores de sinais cruzados de Brin, RSI e CCI, para determinar o momento da reversão do mercado, pertence a uma estratégia de rastreamento de reversão mais robusta. Pode ser ainda mais otimizada por meio de ajustes de parâmetros, métodos de parada e outros, e é aplicável a vários ambientes de mercado.

Código-fonte da estratégia
/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(shorttitle="BBRSIstr", title="Bollinger Bands", overlay=true)
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

//RSI
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")
showDivergence = input.bool(false, title="Show Divergence", group="RSI Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

rsiPlot = plot(rsi, "RSI", color=#7E57C2)
plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
midline = hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")

//cci
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
plot(cci, "CCI", color=#2962FF)
band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
hline(0, "Middle Band", color=color.new(#787B86, 50))
band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background")

typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing")

smoothingLine = ma(cci, smoothingLength, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none)


longCBB= close < lower
shortCBB = close>upper
longBRSI = rsi < 33
shortBRSI = rsi > 70
longcci = cci < -215
shortcci = cci > 250

strategy.entry("LONG", strategy.long, when = longCBB and longBRSI and longcci)
strategy.exit("Exit ", profit = 600)
strategy.entry("SHORT", strategy.short, when = shortCBB and shortBRSI and shortcci)
strategy.exit("Exit ", profit = 600)