
La stratégie de trading RSI par rapport au RSI aléatoire est une méthode d’analyse technique avancée conçue pour identifier les points de retournement clés du marché. La stratégie combine la force de l’indicateur relativement fort (RSI) et de l’indicateur relativement fort (SRSI) au hasard pour prédire les changements de tendance potentiels en surveillant le revers entre le prix et ces indicateurs dynamiques. En outre, la stratégie intègre l’indicateur des moyennes mobiles (EMA) comme filtre de tendance et applique un filtre de distance de fluctuation précis, assurant de capturer les changements significatifs de la structure du marché plutôt que le bruit du marché.
Le principe central de cette stratégie est basé sur le concept de déviation dans l’analyse technique. Les déviations se produisent lorsque le mouvement des prix est en désaccord avec le mouvement des indicateurs techniques, indiquant généralement que la tendance actuelle est susceptible d’une inversion imminente. La stratégie se concentre sur quatre types de déviation:
La stratégie utilise des conditions de filtrage strictes pour garantir la qualité des signaux déviants:
Lorsqu’une déviation est détectée, la stratégie dessine des étiquettes et des lignes de connexion sur le graphique, permettant ainsi au trader d’identifier intuitivement ces signaux critiques. De plus, la stratégie génère automatiquement des signaux d’entrée en surplus et en déficit en fonction des signaux de déviation.
Pour atténuer ces risques, il est recommandé de:
La stratégie de trading RSI et RSI aléatoire est un outil d’analyse technique complexe et puissant qui permet de capturer les signaux potentiels de revers du marché et de continuation de la tendance en identifiant les incohérences entre les prix et les indicateurs de dynamique. La stratégie fournit une approche globale pour identifier les opportunités de trading à haute probabilité en intégrant la détection de déviation régulière et cachée et en appliquant des filtres soigneusement conçus.
Cependant, comme pour toutes les méthodes d’analyse technique, cette stratégie présente des limites et des risques. La stabilité et la performance de la stratégie peuvent être considérablement améliorées par l’application d’optimisations recommandées, telles que l’ajout de mécanismes de gestion des risques, l’amélioration de la reconnaissance des signaux et l’intégration de l’ajustement des paramètres dynamiques.
En fin de compte, cette stratégie est la mieux adaptée pour faire partie d’un système de négociation plus large, en combinaison avec d’autres outils d’analyse et des principes de gestion de fonds appropriés. Pour les traders qui comprennent l’analyse technique et la structure du marché, cette stratégie de divergence peut être un outil précieux pour trouver des configurations de négociation de haute qualité.
/*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)