RSI Stratégie de négociation en divergence

Auteur:ChaoZhang est là., Date: 2023-10-25 16:47:14 Je suis désolé
Les étiquettes:

img

Résumé

La stratégie de trading RSI Divergence génère des signaux d'achat et de vente en identifiant les divergences entre l'indicateur RSI et le mouvement des prix.

Principe

Cette stratégie utilise principalement des divergences dans l'indicateur RSI pour identifier les opportunités de trading. Plus précisément, la stratégie calcule d'abord les valeurs de l'indicateur RSI sur une certaine période, puis trace les lignes de tendance pour l'indicateur RSI et le prix.

Si la stratégie détecte le bas de la ligne RSI alors que la ligne de prix dépasse, un signal d'achat est généré. Si la ligne RSI dépasse tandis que la ligne de prix dépasse, un signal de vente est généré. Une fois qu'un signal de trading se produit, la stratégie peut trader en fonction de la taille de la valeur du RSI.

En outre, la stratégie comporte des fonctionnalités de stop loss, de take profit et de trailing stop loss.

Les avantages

La stratégie de négociation de la divergence RSI présente les avantages suivants:

  1. En détectant les divergences de l'indicateur de volatilité, on peut détecter rapidement les renversements de tendance.

  2. Le RSI est largement utilisé et disponible sur la plupart des plateformes de trading.

  3. Les paramètres du RSI sont flexibles et peuvent être ajustés pour différentes conditions de marché.

  4. Le stop loss, le take profit et le trailing stop loss contrôlent efficacement le risque.

  5. La stratégie a une fréquence de signal modérée, évitant ainsi le sur-échange.

  6. La logique est simple et facile à programmer pour une automatisation.

Les risques

La stratégie comporte également certains risques:

  1. Les divergences RSI ne sont pas entièrement fiables et peuvent générer de faux signaux.

  2. Les divergences peuvent échouer sur des marchés où la tendance est forte, ce qui doit être évité.

  3. Des paramètres RSI incorrects peuvent affecter les performances. Des périodes trop courtes augmentent la fréquence et le risque.

  4. Un stop loss trop serré réduit les bénéfices; trop lâche ne permet pas de limiter les risques.

  5. L'arrêt de trailing peut s'arrêter prématurément pendant les marchés volatils.

Les risques peuvent être atténués par:

  1. Ajout d'autres indicateurs comme MACD, Bollinger Bands pour filtrer les signaux et réduire les faux signaux.

  2. Utilisation de la stratégie uniquement sur les marchés latéraux à fourchette, en évitant les fortes tendances.

  3. Optimiser les paramètres de l'indice de rentabilité, sélectionner les périodes optimales de repérage, tester les paramètres pour différents marchés.

  4. Définir des niveaux raisonnables de stop loss et de profit basés sur des tests antérieurs.

  5. Ajustement de la distance d'arrêt de traction en fonction de la volatilité du marché et de l'appétit pour le risque.

Optimisation

La stratégie peut être améliorée dans les domaines suivants:

  1. Incorporer d'autres indicateurs pour filtrer les signaux et améliorer la fiabilité.

  2. Utilisez l'apprentissage automatique pour optimiser automatiquement les paramètres RSI.

  3. Concevoir des algorithmes de stop loss dynamiques en fonction des régimes du marché.

  4. Construire un modèle dynamique de dimensionnement des positions basé sur la volatilité afin d'ajuster la taille des positions.

  5. Introduire la volatilité dans le trailing stop pour définir la distance de trail basée sur les fluctuations de prix.

  6. Déployer une stratégie sur d'autres marchés comme le forex et les crypto-monnaies.

  7. Développer un système de négociation quantitative pour l'automatisation.

Conclusion

La stratégie de trading de divergence du RSI génère des signaux en identifiant les divergences entre le RSI et le prix. La logique est simple et facile à automatiser. Le stop loss, le take profit et le trailing stop contrôlent efficacement les risques. Cependant, la stratégie a des limites en termes de précision et de tendance des marchés. Des améliorations peuvent être apportées en optimisant les paramètres, en ajoutant des filtres et des arrêts dynamiques.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © faytterro

//@version=5
// strategy("RSI Divergence Strategy", overlay=true, scale = scale.none)
rsilen=input.int(14, title="rsi length")
rsisrc=input(close, title="source")
x=ta.rsi(rsisrc,rsilen)
len=input.int(14, title="RSI Divergence length", maxval=500)
tpb = input.float(25, title="take profit", group = "buy", step = 0.5)
sb = input.float(5, title="stop", group = "buy", step = 0.5)
tsb = input.float(0.25, title="trailing stop", group = "buy", step = 0.5)
tps = input.float(25, title="take profit", group = "sell", step = 0.5)
ss =input.float(5, title="stop", group = "sell", step = 0.5)
tss = input.float(0.25, title="trailing stop", group = "sell", step = 0.5)
src=close
extrapolation=0
zoom=input.int(0, title="zoom", maxval=27, minval=-27)
hline(300-zoom*10, color=color.rgb(54, 58, 69, 100))
hline(10, color=color.rgb(54, 58, 69, 100))
// for ax+b
xo=0.0
yo=0.0
xyo=0.0
xxo=0.0
for i=0 to len-1
    xo:= xo + i/(len)
    yo:= yo + x[len-1-i]/(len)
    xyo:= xyo + i*x[len-1-i]/(len)
    xxo:= xxo + i*i/(len)
dnm=ta.lowest(low,200)
dizi=array.new_float(len*2+1+extrapolation)
// linedizi=array.new_line()
a=(xo*yo-xyo)/(xo*xo-xxo)
b=yo-a*xo
for i=0 to len-1+extrapolation
    array.set(dizi,i,a*i+b)
//// for src
// for ax+b
xo2=0.0
yo2=0.0
xyo2=0.0
xxo2=0.0
for i=0 to len-1
    xo2:= xo2 + i/(len)
    yo2:= yo2 + src[len-1-i]/(len)
    xyo2:= xyo2 + i*src[len-1-i]/(len)
    xxo2:= xxo2 + i*i/(len)

dizi2=array.new_float(len*2+1+extrapolation)
// linedizi2=array.new_line()
a2=(xo2*yo2-xyo2)/(xo2*xo2-xxo2)
b2=yo2-a*xo2
for i=0 to len-1+extrapolation
    array.set(dizi2,i,a2*i+b2)
ttk=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)))? 1 : 
 ((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)))? -1 : 0
cg=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)))// and ta.highest(ttk[1],len/2)<1)
cr=((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)))// and ta.lowest(ttk[1],len/2)>-1)
bgcolor(color=(cg and ta.highest(ttk[1],len/2)<1)? color.rgb(76, 175, 79, 50) : 
 (cr and ta.lowest(ttk[1],len/2)>-1)? color.rgb(255, 82, 82, 50) : na, offset=0, display=display.none)
plot(x)

// for ax+b
xo3=0.0
yo3=0.0
xyo3=0.0
xxo3=0.0
for i=0 to len-1
    xo3:= xo3 + i/(len)
    yo3:= yo3 + x[len-1-i+(ta.barssince(cg))]/(len)
    xyo3:= xyo3 + i*x[len-1-i+(ta.barssince(cg))]/(len)
    xxo3:= xxo3 + i*i/(len)

dizi3=array.new_float(len*2+1+extrapolation)
// linedizi3=array.new_line()
a3=(xo3*yo3-xyo3)/(xo3*xo3-xxo3)
b3=yo3-a3*xo3
for i=0 to len-1+extrapolation
    array.set(dizi3,i,a3*i+b3)

// for ax+b
xo4=0.0
yo4=0.0
xyo4=0.0
xxo4=0.0
for i=0 to len-1
    xo4:= xo4 + i/(len)
    yo4:= yo4 + x[len-1-i+(ta.barssince(cr))]/(len)
    xyo4:= xyo4 + i*x[len-1-i+(ta.barssince(cr))]/(len)
    xxo4:= xxo4 + i*i/(len)

dizi4=array.new_float(len*2+1+extrapolation)
// linedizi4=array.new_line()
a4=(xo4*yo4-xyo4)/(xo4*xo4-xxo4)
b4=yo4-a4*xo4
for i=0 to len-1+extrapolation
    array.set(dizi4,i,a4*i+b4)

// line=line.new((last_bar_index-ta.barssince(cg)-len),
//  array.get(dizi3,0), 
//  last_bar_index-ta.barssince(cg),
//  array.get(dizi3,len-1), color=color.rgb(0,255,0), width=2)
// line2=line.new((last_bar_index-ta.barssince(cr)-len),
//  array.get(dizi4,0), 
//  last_bar_index-ta.barssince(cr),
//  array.get(dizi4,len-1), color=color.rgb(255, 0, 0, 0), width=2)
// line.delete(line[1])
// line.delete(line2[1])

alert=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)) and ta.highest(ttk[1],len/2)<1)
 or ((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)) and ta.lowest(ttk[1],len/2)>-1)
alertcondition(alert)
hline(50)
rs=hline(30)
rss=hline(70)
fill(rs, rss, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")

longCondition = cg and ta.highest(ttk[1],len/2)<1 
if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("exit long", "Long", limit = close*(100+tpb)/100 , stop =close*(100-sb)/100 , trail_price = close , trail_offset = close*tsb)

shortCondition = cr and ta.lowest(ttk[1],len/2)>-1 
if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("exit short", "Short", limit = close*(100-tps)/100, stop = close*(100+ss)/100, trail_price = close , trail_offset = close*tss)


Plus de