
A estratégia de negociação de RSI e RSI aleatório é um método de análise de alta tecnologia projetado especificamente para identificar os principais pontos de reversão no mercado. A estratégia combina o poder do indicador relativamente forte (RSI) e do indicador aleatório relativamente forte (SRSI) para prever mudanças de tendência potenciais, monitorando o desvio entre o preço e esses indicadores de dinamismo.
O princípio central da estratégia é baseado no conceito de desvio na análise técnica. O desvio ocorre quando o movimento dos preços não está de acordo com o movimento dos indicadores técnicos, geralmente indicando que a tendência atual pode estar prestes a se inverter. A estratégia se concentra em quatro tipos de desvio:
A estratégia usa rigorosas condições de filtragem para garantir a qualidade dos sinais desviados:
Quando um desvio é detectado, a estratégia traça etiquetas e linhas de ligação no gráfico, permitindo que o comerciante identifique esses sinais críticos de forma intuitiva. Além disso, a estratégia gera automaticamente sinais de entrada de mais e de menos com base no sinal de desvio.
Para minimizar esses riscos, recomenda-se:
A estratégia de negociação de RSI e RSI aleatório é uma ferramenta de análise técnica complexa e poderosa, capaz de capturar sinais potenciais de reversão de mercado e continuação de tendência através da identificação de discrepâncias entre o preço e o indicador de dinâmica. A estratégia oferece uma abordagem abrangente para identificar oportunidades de negociação de alta probabilidade, através da integração de detecção de desvio convencional e oculto e da aplicação de filtros cuidadosamente projetados.
No entanto, como todos os métodos de análise técnica, esta estratégia também apresenta limitações e riscos. A estabilidade e o desempenho da estratégia podem ser significativamente melhorados pela implementação de otimização de recomendações, como a adição de mecanismos de gerenciamento de riscos, melhorias na confirmação de sinais e na integração de ajustes de parâmetros dinâmicos.
Em última análise, a estratégia é mais adequada como parte de um sistema de negociação mais amplo, em combinação com outras ferramentas de análise e princípios de gestão de fundos adequados. Para os comerciantes que entendem a análise técnica e a estrutura do mercado, esta estratégia de desvio pode ser uma ferramenta valiosa para descobrir configurações de negociação de alta qualidade.
/*backtest
start: 2024-06-26 00:00:00
end: 2025-06-24 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("RSI Divergence Strategy", overlay=true)
//strategy("RSI & SRSI Divergence Strategy with EMA & Min Swing Filter + Price Chart Lines", overlay=true)
rsiLength = input.int(14, title="RSI Length")
srsiLength = input.int(14, title="Stochastic RSI Length")
kLength = input.int(3, title="%K Length")
dLength = input.int(3, title="%D Length")
emaLength = input.int(200, title="EMA Length")
lookback = input.int(40, title="Lookback Period for Divergence")
minSwingDistPercent = input.float(1.5, title="Minimum Swing Distance (%)")
minPriceMovePercent = input.float(0.5, title="Minimum Price Move from Last Swing (%)")
rsi = ta.rsi(close, rsiLength)
srsi = ta.stoch(rsi, rsi, rsi, srsiLength)
k = ta.sma(srsi, kLength)
d = ta.sma(k, dLength)
ema200 = ta.ema(close, emaLength)
// === Bullish Regular Divergence ===
var float lastLowPrice = na
var float lastLowRsi = na
var float lastLowSrsi = na
var int lastLowIndex = na
bullishDiv = false
if ta.lowestbars(low, lookback) == 0
if not na(lastLowPrice) and not na(lastLowRsi) and not na(lastLowSrsi)
swingDistLow = math.abs(low - lastLowPrice) / lastLowPrice * 100
priceMoveLow = math.abs(low - lastLowPrice) / lastLowPrice * 100
if swingDistLow >= minSwingDistPercent and priceMoveLow >= minPriceMovePercent
if (low < lastLowPrice and rsi > lastLowRsi) or (low < lastLowPrice and k > lastLowSrsi)
bullishDiv := true
lastLowPrice := low
lastLowRsi := rsi
lastLowSrsi := k
lastLowIndex := bar_index
else
lastLowPrice := low
lastLowRsi := rsi
lastLowSrsi := k
lastLowIndex := bar_index
// === Bearish Regular Divergence ===
var float lastHighPrice = na
var float lastHighRsi = na
var float lastHighSrsi = na
var int lastHighIndex = na
bearishDiv = false
if ta.highestbars(high, lookback) == 0
if not na(lastHighPrice) and not na(lastHighRsi) and not na(lastHighSrsi)
swingDistHigh = math.abs(high - lastHighPrice) / lastHighPrice * 100
priceMoveHigh = math.abs(high - lastHighPrice) / lastHighPrice * 100
if swingDistHigh >= minSwingDistPercent and priceMoveHigh >= minPriceMovePercent
if (high > lastHighPrice and rsi < lastHighRsi) or (high > lastHighPrice and k < lastHighSrsi)
bearishDiv := true
lastHighPrice := high
lastHighRsi := rsi
lastHighSrsi := k
lastHighIndex := bar_index
else
lastHighPrice := high
lastHighRsi := rsi
lastHighSrsi := k
lastHighIndex := bar_index
// === Bullish Hidden Divergence ===
bullishHiddenDiv = false
if ta.lowestbars(low, lookback) == 0
if not na(lastLowPrice) and not na(lastLowRsi) and not na(lastLowSrsi)
swingDistLowHidden = math.abs(low - lastLowPrice) / lastLowPrice * 100
priceMoveLowHidden = math.abs(low - lastLowPrice) / lastLowPrice * 100
if swingDistLowHidden >= minSwingDistPercent and priceMoveLowHidden >= minPriceMovePercent
if (low > lastLowPrice and rsi < lastLowRsi) or (low > lastLowPrice and k < lastLowSrsi)
bullishHiddenDiv := true
// === Bearish Hidden Divergence ===
bearishHiddenDiv = false
if ta.highestbars(high, lookback) == 0
if not na(lastHighPrice) and not na(lastHighRsi) and not na(lastHighSrsi)
swingDistHighHidden = math.abs(high - lastHighPrice) / lastHighPrice * 100
priceMoveHighHidden = math.abs(high - lastHighPrice) / lastHighPrice * 100
if swingDistHighHidden >= minSwingDistPercent and priceMoveHighHidden >= minPriceMovePercent
if (high < lastHighPrice and rsi > lastHighRsi) or (high < lastHighPrice and k > lastHighSrsi)
bearishHiddenDiv := true
// === PLOTS ===
plot(ema200, title="EMA 200", color=color.purple, linewidth=2)
// === STRATEGY ENTRIES ===
if bullishDiv or bullishHiddenDiv
strategy.entry("Long", strategy.long)
if bearishDiv or bearishHiddenDiv
strategy.entry("Short", strategy.short)