RSI Estratégia de negociação de divergência de alta e baixa

Autora:ChaoZhang, Data: 2024-01-15 12:09:54
Tags:

img

Resumo

Esta estratégia julga as tendências de alta e baixa do mercado e toma decisões de negociação calculando a divergência do indicador RSI. Especificamente, julgará sinais de alta ocultos quando o RSI forma mínimos mais baixos, mas os preços formam mínimos mais altos. E julgará sinais de baixa ocultos quando o RSI forma máximos mais altos, mas os preços formam máximos mais baixos. Em seguida, determina as potenciais tendências de alta ou baixa do mercado com base nesses sinais e realiza negociações.

Estratégia lógica

A estratégia é baseada principalmente na teoria de divergência de alta e baixa do indicador RSI. Quando o RSI e o preço formam divergências reversas, ele indica reversões potenciais do mercado.

  1. O sinal de alta regular: O RSI forma uma baixa mais alta enquanto o preço forma uma baixa mais baixa.

  2. Signo de alta oculta: O RSI se forma em baixa mais baixa enquanto o preço se forma em baixa mais alta.

  3. Signo de baixa regular: O RSI forma uma alta mais baixa enquanto o preço forma uma alta mais alta.

  4. Signo de baixa oculta: O RSI se forma em alta mais alta enquanto o preço se forma em baixa mais alta.

Com base nas divergências acima, julga as potenciais tendências de alta ou baixa do mercado e o reforço do poder de compra/venda para formular estratégias de negociação.

Vantagens

  1. Utilize a teoria de divergência de alta e baixa do RSI para determinar as tendências potenciais do mercado.
  2. Também combinar ações de preço para confirmar, evitando sinais ruidosos.
  3. Capaz de captar sinais críticos antes de rápidas inversões do mercado.
  4. Implementar indicação visualizada para sinais de alta e baixa, fácil e intuitiva de operar.
  5. Parâmetros personalizáveis adequados a diferentes ambientes de mercado.

Riscos

  1. As divergências entre o RSI e o preço podem não implicar necessariamente reversões, poderiam ser apenas ações de intervalo.
  2. Os sinais ocultos têm um ruído relativamente maior, riscos de erro de julgamento.
  3. É necessário incorporar mais indicadores ou métodos de análise técnica para confirmar os sinais.
  4. As definições incorretas dos parâmetros podem também afectar os julgamentos.

Orientações para a melhoria

  1. Incorporar MACD, KDJ e outros indicadores com o RSI para determinar os sinais de entrada.
  2. Adicionar estratégia de stop loss para reduzir as perdas por transação.
  3. Otimizar as configurações dos parâmetros, como procurar períodos de RSI mais adequados.
  4. Introduzir algoritmos de aprendizagem de máquina para treinar a precisão da captura de sinais de entrada.
  5. Implementar websocket para cotações em tempo real para reduzir a latência de confirmação do sinal.

Resumo

A estratégia aproveita principalmente as divergências de alta e baixa do RSI para determinar as potenciais tendências de alta ou baixa do mercado, capturando as mudanças de força relativa entre o poder de compra e venda por trás das ações de preço.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Divergence Indicator")
len = input.int(title="RSI Period", minval=1, defval=20)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=5)
lbL = input(title="Pivot Lookback Left", defval=5)
rangeUpper = input(title="Max of Lookback Range", defval=60)
rangeLower = input(title="Min of Lookback Range", defval=5)
plotBull = input(title="Plot Bullish", defval=true)
plotHiddenBull = input(title="Plot Hidden Bullish", defval=true)
plotBear = input(title="Plot Bearish", defval=true)
plotHiddenBear = input(title="Plot Hidden Bearish", defval=true)
bearColor = color.red
bullColor = color.green
hiddenBullColor = color.new(color.green, 80)
hiddenBearColor = color.new(color.red, 80)
textColor = color.white
noneColor = color.new(color.white, 100)
osc = ta.rsi(src, len)

plot(osc, title="RSI", linewidth=2, color=#2962FF)
hline(50, title="Middle Line", color=#787B86, linestyle=hline.style_dotted)
obLevel = hline(70, title="Overbought", color=#787B86, linestyle=hline.style_dotted)
osLevel = hline(30, title="Oversold", color=#787B86, linestyle=hline.style_dotted)
fill(obLevel, osLevel, title="Background", color=color.rgb(33, 150, 243, 90))

plFound = na(ta.pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(ta.pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
	bars = ta.barssince(cond == true)
	rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Regular Bullish
// Osc: Higher Low

oscHL = osc[lbR] > ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Lower Low

priceLL = low[lbR] < ta.valuewhen(plFound, low[lbR], 1) 
// bull : 상승 Condition : 조건
bullCond = plotBull and priceLL and oscHL and plFound // 상승다이버전스?
strategy.entry("상승 다이버전스 진입", strategy.long, when = bullCond)
// strategy.close("상승 다이버전스 진입", when = ta.crossover(osc, 70)) 
plot(
     plFound ? osc[lbR] : na,
     offset=-lbR,
     title="Regular Bullish",
     linewidth=2,
     color=(bullCond ? bullColor : noneColor)
     )

plotshape(
	 bullCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bullish Label",
	 text=" Bull ",
	 style=shape.labelup,
	 location=location.absolute,
	 color=bullColor,
	 textcolor=textColor
	 )

//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low

oscLL = osc[lbR] < ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low

priceHL = low[lbR] > ta.valuewhen(plFound, low[lbR], 1)
hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound
strategy.entry("히든 상승 다이버전스 진입", strategy.long, when = hiddenBullCond)
// strategy.close("히든 상승 다이버전스 진입", when = ta.crossover(osc, 70))
plot(
	 plFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish",
	 linewidth=2,
	 color=(hiddenBullCond ? hiddenBullColor : noneColor)
	 )

plotshape(
	 hiddenBullCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish Label",
	 text=" H Bull ",
	 style=shape.labelup,
	 location=location.absolute,
	 color=bullColor,
	 textcolor=textColor
	 )

//------------------------------------------------------------------------------
// Regular Bearish
// Osc: Lower High

oscLH = osc[lbR] < ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Higher High

priceHH = high[lbR] > ta.valuewhen(phFound, high[lbR], 1)
// bear : 하락 
bearCond = plotBear and priceHH and oscLH and phFound
strategy.entry("하락 다이버전스 진입", strategy.short, when = bearCond)
// strategy.close("하락 다이버전스 진입", when = ta.crossunder(osc, 50)) 
plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish",
	 linewidth=2,
	 color=(bearCond ? bearColor : noneColor)
	 )

plotshape(
	 bearCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish Label",
	 text=" Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor
	 )

//------------------------------------------------------------------------------
// Hidden Bearish
// Osc: Higher High

oscHH = osc[lbR] > ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Lower High

priceLH = high[lbR] < ta.valuewhen(phFound, high[lbR], 1)

hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound
strategy.entry("히든 하락 다이버전스 진입", strategy.short, when = hiddenBearCond)
// strategy.close("히든 하락 다이버전스 진입", when = ta.crossunder(osc, 50)) 
plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish",
	 linewidth=2,
	 color=(hiddenBearCond ? hiddenBearColor : noneColor)
	 )

plotshape(
	 hiddenBearCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish Label",
	 text=" H Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor
	 )

Mais.