Indicateur de divergence longue et courte RSI


Date de création: 2024-01-25 11:49:36 Dernière modification: 2024-01-25 11:49:36
Copier: 0 Nombre de clics: 861
1
Suivre
1617
Abonnés

Indicateur de divergence longue et courte RSI

Aperçu

L’indicateur de divergence du RSI est une stratégie de trading quantitative basée sur un indicateur relativement faible (le RSI). Il analyse les divergences entre l’indicateur du RSI et les prix afin de détecter les opportunités de renversement de la tendance des prix.

Principe de stratégie

L’indicateur central de cette stratégie est le RSI. Il analyse les divergences de coude entre l’indicateur RSI et le prix.

Plus précisément, lorsque le RSI forme des bas plus bas et que le prix forme des bas plus élevés, il s’agit d’une divergence de plusieurs têtes entre le RSI et le prix. Cela indique que le prix peut se retourner vers le haut. La stratégie crée des positions à plusieurs têtes à ce moment-là.

En revanche, lorsque le RSI forme des hauts plus élevés et que le prix forme des hauts plus bas, il s’agit d’une divergence de tête vide entre le RSI et le prix. Cela indique que le prix pourrait se retourner vers la baisse. La stratégie crée une position de tête vide à ce moment-là.

En capturant ces points de divergence entre le RSI et le prix, la stratégie peut détecter en temps opportun les occasions de retournement de prix et réaliser des transactions à bas prix et à haut prix.

Avantages stratégiques

Les stratégies de divergence de RSI avec plus d’espace ont les avantages suivants:

  1. Capturer le point de basculement des prix avec précision. L’écart entre le RSI et le prix est souvent un signal prédictif très efficace pour signaler un renversement de tendance imminent.

  2. L’achat à bas prix et la vente à haut prix sont réalisés. La construction d’une position par le biais d’un point de divergence permet d’acheter à un niveau relativement bas et de vendre à un niveau relativement élevé, conformément aux meilleures pratiques de trading quantitatif.

  3. Il dépasse les limites des stratégies RSI classiques. Les stratégies RSI classiques se concentrent uniquement sur les zones de survente et de survente. La stratégie RSI utilise les propriétés inverses de l’indicateur RSI lui-même pour capturer les points de basculement de manière plus précise.

  4. La définition des paramètres est simple: les paramètres principaux sont les cycles RSI et les intervalles de révision, qui sont très simples et faciles à optimiser.

Risque stratégique

La stratégie de divergence de la RSI présente également certains risques:

  1. Un signal de divergence peut être un faux signal. Un écart entre le RSI et le prix ne conduit pas nécessairement à un véritable revirement de prix. Il se produit parfois un faux revirement.

  2. La stratégie est moins rentable dans les marchés tendanciels. Lorsque le cours de l’action est clairement tendance, la marge de profit de la stratégie est plus faible. Dans ce cas, il est préférable de suspendre la stratégie et d’attendre de nouvelles tendances choquantes.

  3. Risque de reprise. La stratégie définit des paramètres de reprise qui peuvent accélérer la perte du compte en cas de plusieurs transactions perdantes. Cela nécessite de contrôler la taille de la position et le point de rupture pour réduire le risque.

Optimisation de la stratégie

La stratégie peut également être optimisée dans les domaines suivants:

  1. Il est possible d’ajouter d’autres indicateurs comme le MACD, le KDJ, etc. pour vérifier les points de divergence du RSI, filtrer certains faux signaux et améliorer le taux de victoire de la stratégie.

  2. Optimiser les paramètres RSI. Vous pouvez tester différents paramètres de cycle RSI pour trouver le réglage de cycle RSI qui correspond le mieux aux caractéristiques de la variété.

  3. Optimiser la zone de révision. La zone de révision affecte directement la fréquence des transactions de la stratégie. Il est possible de tester différents paramètres pour trouver la fréquence optimale.

  4. Augmentation des stratégies de stop-loss. Une logique de stop-loss raisonnable peut être définie en fonction de l’ATR, du stop-loss mobile, etc. Un stop-loss rapide en cas de perte permet de contrôler efficacement le risque de la stratégie.

Résumer

La stratégie de divergence polyvalente du RSI capte avec précision les points de basculement des variations de prix en analysant l’attribut inverse de l’indicateur RSI lui-même. Elle permet une stratégie de négociation à bas prix et à haut prix. Par rapport à la stratégie de survente et de survente du RSI dans le sens traditionnel, elle utilise des caractéristiques plus fines et plus primitives du RSI, ce qui améliore considérablement l’efficacité de la stratégie.

Code source de la stratégie
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//study(title="Divergence Indicator", format=format.price)
//GOOGL setting  5 , close, 3 , 1  profitLevel at 75 shows win rate  87.21 %  profit factor 7.059
//GOOGL setting  8 , close, 3 , 1  profitLevel at 80 shows win rate  86.57 %  profit factor 18.96 
//SPY setting    5, close , 3, 3  profitLevel at 70  , shows win rate 80.34%  profit factor 2.348
strategy(title="RSI Divergence Indicator", overlay=false,pyramiding=2, default_qty_value=2,   default_qty_type=strategy.fixed, initial_capital=10000, currency=currency.USD)

len = input(title="RSI Period", minval=1, defval=9)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=3)
lbL = input(title="Pivot Lookback Left", defval=1)
takeProfitRSILevel = input(title="Take Profit at RSI Level", minval=70, defval=80)

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=false)

//useTrailStopLoss = input(false, title="Use Trailing Stop Loss")

sl_type = input("NONE", title="Trailing StopLoss Type", options=['ATR','PERC', 'NONE'])

stopLoss = input(title="Stop Loss%", defval=5, minval=1)

atrLength=input(14, title="ATR Length (for Trailing stop loss)")
atrMultiplier=input(3.5, title="ATR Multiplier (for Trailing stop loss)")


bearColor = color.purple
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 = rsi(src, len)

plot(osc, title="RSI", linewidth=2, color=#8D1699)
hline(50, title="Middle Line", linestyle=hline.style_dotted)
obLevel = hline(70, title="Overbought", linestyle=hline.style_dotted)
osLevel = hline(30, title="Oversold", linestyle=hline.style_dotted)
fill(obLevel, osLevel, title="Background", color=#9915FF, transp=90)

plFound = na(pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(pivothigh(osc, lbL, lbR)) ? false : true

_inRange(cond) =>
    bars = barssince(cond == true)
    rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Regular Bullish

// Osc: Higher Low
oscHL = osc[lbR] > valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Lower Low
priceLL = low[lbR] < valuewhen(plFound, low[lbR], 1)

bullCond = plotBull and priceLL and oscHL and plFound

plot(
	 plFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bullish",
	 linewidth=2,
	 color=(bullCond ? bullColor : noneColor),
	 transp=0
	 )


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

//------------------------------------------------------------------------------
// Hidden Bullish

// Osc: Lower Low
oscLL = osc[lbR] < valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low
priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)

hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound

plot(
	 plFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish",
	 linewidth=2,
	 color=(hiddenBullCond ? hiddenBullColor : noneColor),
	 transp=0
	 )

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

longCondition=bullCond or hiddenBullCond
//? osc[lbR] : na  
//hiddenBullCond
strategy.entry(id="RSIDivLE", long=true,  when=longCondition)


//Trailing StopLoss
////// Calculate trailing SL
/////////////////////////////////////////////////////
sl_val = sl_type == "ATR"      ? stopLoss * atr(atrLength) : 
         sl_type == "PERC" ? close * stopLoss / 100 : 0.00

trailing_sl = 0.0
trailing_sl :=   strategy.position_size>=1 ?  max(low  - sl_val, nz(trailing_sl[1])) :  na

//draw initil stop loss
//plot(strategy.position_size>=1 ? trailing_sl : na, color = color.blue , style=plot.style_linebr,  linewidth = 2, title = "stop loss")
//plot(trailing_sl, title="ATR Trailing Stop Loss", style=plot.style_linebr, linewidth=1, color=color.purple, transp=30)
//Trailing StopLoss
////// Calculate trailing SL
/////////////////////////////////////////////////////


//------------------------------------------------------------------------------
// Regular Bearish

// Osc: Lower High
oscLH = osc[lbR] < valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Higher High
priceHH = high[lbR] > valuewhen(phFound, high[lbR], 1)

bearCond = plotBear and priceHH and oscLH and phFound

plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish",
	 linewidth=2,
	 color=(bearCond ? bearColor : noneColor),
	 transp=0
	 )

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

//------------------------------------------------------------------------------
// Hidden Bearish

// Osc: Higher High
oscHH = osc[lbR] > valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Lower High
priceLH = high[lbR] < valuewhen(phFound, high[lbR], 1)

hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound

plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish",
	 linewidth=2,
	 color=(hiddenBearCond ? hiddenBearColor : noneColor),
	 transp=0
	 )

plotshape(
	 hiddenBearCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish Label",
	 text=" H Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor,
	 transp=0
	 )
longCloseCondition=crossover(osc,takeProfitRSILevel) or bearCond
strategy.close(id="RSIDivLE", comment="Close All="+tostring(close - strategy.position_avg_price, "####.##"), when= abs(strategy.position_size)>=1  and  sl_type == "NONE" and longCloseCondition)

//close all on stop loss
strategy.close(id="RSIDivLE", comment="TSL="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and (sl_type == "PERC"   or sl_type == "ATR" ) and crossunder(close, trailing_sl)  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89


// Calculate start/end date and time condition
startDate  = input(timestamp("2019-01-01T00:00:00"), type = input.time)
finishDate = input(timestamp("2021-01-01T00:00:00"), type = input.time)
 
time_cond  = time >= startDate and time <= finishDate