Stratégie de trading de divergence RSI


Date de création: 2023-10-25 16:47:14 Dernière modification: 2023-10-25 16:47:14
Copier: 0 Nombre de clics: 846
1
Suivre
1617
Abonnés

Stratégie de trading de divergence RSI

Aperçu

La stratégie de trading déviant de l’indicateur RSI permet de contrôler efficacement le risque en identifiant l’écart entre l’indicateur RSI et le mouvement des prix, donnant des signaux d’achat et de vente. La stratégie a en même temps des fonctions telles que l’arrêt de la perte, le stop-loss et le suivi des pertes.

Le principe

La stratégie repose principalement sur la déviation de l’indicateur RSI pour identifier les opportunités de trading. Plus précisément, la stratégie calcule d’abord la valeur du RSI sur un certain cycle, puis trace une ligne de tendance de l’indicateur RSI. En même temps, la stratégie trace également une ligne de tendance du prix.

Si vous identifiez une situation où le RSI augmente au-dessous de la ligne basse et le prix baisse au-dessus de la ligne haute, vous donnez un signal d’achat. Si vous identifiez une situation où le RSI augmente au-dessous de la ligne haute et le prix augmente au-dessous de la ligne basse, vous donnez un signal de vente. Une fois que le signal de transaction est formé, la stratégie peut être négociée en fonction de la taille de la valeur du RSI.

En outre, la stratégie a également des fonctionnalités de stop loss, stop loss et tracking stop loss. Le stop loss permet de contrôler le risque de perte, le stop stop peut verrouiller les bénéfices et le tracking stop loss peut permettre aux bénéfices de continuer à fonctionner. Ces paramètres permettent de gérer efficacement le risque de chaque transaction.

Les avantages

Les avantages de cette stratégie de détournement du RSI sont les suivants:

  1. En capturant la déviation de l’indicateur RSI, on peut détecter les virages de prix plus tôt.

  2. L’indicateur RSI est largement utilisé, et la plupart des logiciels de trading l’ont intégré.

  3. Les paramètres de l’indicateur RSI sont flexibles et peuvent être ajustés en fonction de la période d’observation du marché.

  4. Les paramètres Stop Loss, Stop Stop et Stop Loss Tracking permettent de contrôler efficacement le risque de chaque transaction.

  5. La stratégie consiste à échanger des signaux à une fréquence modérée et à éviter les transactions trop intenses.

  6. La stratégie est claire et compréhensible, et elle est facile à mettre en œuvre par un programme informatique.

Les risques

Cette stratégie comporte aussi des risques:

  1. La déviation du RSI n’est pas fiable à 100% et peut entraîner des faux signaux. Il est nécessaire de combiner les signaux de filtrage avec d’autres indicateurs.

  2. Le signal de déviation du RSI peut être inefficace dans les conditions de tendance et doit être évité.

  3. Une mauvaise configuration des paramètres RSI peut également affecter l’efficacité de la stratégie. Une configuration trop courte des cycles peut augmenter la fréquence des transactions et le risque.

  4. Si le point d’arrêt est trop petit, il peut s’arrêter prématurément; si le point d’arrêt est trop grand, il ne peut pas contrôler efficacement le risque. Un équilibre est nécessaire.

  5. Il est nécessaire de définir une distance de traçabilité raisonnable en fonction des fluctuations du marché.

Les risques correspondants peuvent être atténués par les mesures suivantes:

  1. Ajout d’autres indicateurs tels que MACD, Brinline et autres pour filtrer le signal et réduire les faux signaux.

  2. Cette stratégie est utilisée uniquement dans les cas de volatilité, afin d’éviter les tendances évidentes.

  3. Optimiser les paramètres du RSI, choisir la meilleure longueur de cycle et tester les préférences de paramètres de différents marchés

  4. Définition des positions de stop et d’arrêt raisonnables sur la base des données de retrospective historique.

  5. L’ampleur du stop loss est ajustée en fonction de la volatilité du marché et des préférences en matière de risque.

Direction d’optimisation

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

  1. L’ajout d’autres indicateurs permettra de filtrer les signaux de trading et d’améliorer la fiabilité des signaux.

  2. Optimiser automatiquement les paramètres RSI en utilisant l’apprentissage automatique.

  3. Les algorithmes d’arrêt dynamiques sont conçus en fonction des différentes tendances du marché. Par exemple, l’expansion de l’arrêt dans les conditions de choc et la réduction de l’arrêt dans les conditions de tendance.

  4. Conception d’algorithmes de gestion de position dynamiques qui ajustent la taille des positions pour chaque transaction en fonction de facteurs tels que la volatilité du marché.

  5. Introduire le concept de taux de fluctuation dans le suivi des arrêts et définir la distance de suivi des arrêts en fonction de l’intensité des fluctuations des prix.

  6. L’idée est d’essayer de déployer la stratégie sur d’autres types de marchés, tels que les devises et les crypto-monnaies.

  7. Construire un système de trading quantifié pour automatiser les transactions stratégiques.

Résumer

La stratégie de trading déviant du RSI génère des signaux de négociation en capturant le déviement entre l’indicateur RSI et les mouvements de prix. L’avantage de la stratégie réside dans sa simplicité et sa clarté, et sa facilité d’automatisation. Parallèlement, les paramètres d’arrêt, d’arrêt et de suivi des arrêts de perte permettent également de contrôler efficacement les risques.

Code source de la stratégie
/*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)