
La stratégie RSI Dynamic Reversal est utilisée pour identifier les tendances de survente et de survente en combinant l’indicateur RSI et la direction des entités de la ligne K. La stratégie utilise à la fois le RSI régulier et le RSI rapide et, en combinaison avec le filtre des entités de la ligne K, permet d’identifier efficacement les opportunités de revers.
La stratégie est principalement réalisée par les éléments suivants:
Calculez le RSI classique, le RSI du taux de victoire et le RSI du Paris-Charles en prenant la moyenne des trois pour le RSI de Connor.
Le RSI rapide est calculé en utilisant les variations de prix, et reflète les cycles ultra-court.
Il est nécessaire de faire plus de fil de lumière physique et de fil de lumière vide pour éviter les fausses percées.
Lorsque le RSI de Connors est inférieur à 20, le RSI rapide est inférieur à 25, et un rayonnement solaire apparaît.
Lorsque le RSI de Connors est supérieur à 80, le RSI rapide est supérieur à 75, et la ligne de l’ombre apparaît.
L’entité se tourne vers le stop loss et s’en va.
Le RSI de Connor détermine le point de revers de la tendance de la ligne longue, le RSI rapide détermine le point de revers de la ligne courte, et l’entité de la ligne K assure l’efficacité de la rupture, ce qui permet de détecter efficacement les opportunités de revers et d’ouvrir des positions en temps opportun pour effectuer des opérations de revers.
Cette stratégie présente les avantages suivants:
Le RSI de Connors reflète le cycle de la ligne longue, le RSI rapide reflète le cycle de la ligne courte, les deux combinés permettent de déterminer plus précisément le point de basculement.
Les opérations effectuées uniquement lors d’une percée réelle peuvent réduire les pertes causées par une fausse percée.
Les paramètres du RSI, le type de transaction et la période de transaction peuvent être librement ajustés pour s’adapter à différents marchés.
Les entités RSI et K-Line sont des indicateurs de base et la logique de la stratégie est simple et compréhensible.
Il utilise uniquement des indicateurs intégrés, peu de code et peu de difficulté à mettre en œuvre.
Les principaux risques de cette stratégie sont les suivants:
Après l’émission du signal de reprise, le cours a continué sa tendance initiale, entraînant des pertes.
Les signaux de secousse ont été déclenchés à plusieurs reprises, entraînant de nombreuses transactions invalides.
Le filtrage physique ne peut pas éviter complètement les fausses percées.
Les paramètres RSI sont mal définis, ce qui peut entraîner des opportunités manquées ou plusieurs transactions invalides.
L’indicateur RSI ne fonctionne pas dans des circonstances particulières et génère un signal erroné.
Cette stratégie peut être optimisée dans les domaines suivants:
Optimiser les stratégies de stop-loss pour les rendre plus raisonnables et réduire les pertes individuelles.
Le filtrage des indicateurs MACD, KD, etc. a été ajouté pour rendre le signal plus fiable.
Évitez les transactions à faible probabilité en combinant des probabilités de jugement telles que la tendance, la résistance au soutien.
Test de paramètres pour différents types de transactions et périodes afin de trouver les paramètres optimaux.
Il est important d’identifier les situations exceptionnelles, de suspendre les transactions et d’éviter les pertes massives.
La stratégie de retour dynamique du RSI augmente l’efficacité du signal en déterminant le retour du long et du court du RSI et du RSI rapide. Elle présente des avantages tels que la combinaison d’indicateurs, la flexibilité de régulation des paramètres, la possibilité de saisir les occasions de retour et d’intervenir en temps opportun dans les transactions en cas de survente.
/*backtest
start: 2023-10-07 00:00:00
end: 2023-11-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Connors RSI Strategy v1.0", shorttitle = "CRSI str 1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usecrsi = input(true, defval = true, title = "Use CRSI Strategy")
usefrsi = input(true, defval = true, title = "Use FRSI Strategy")
usemod = input(true, defval = true, title = "CRSI+FRSI Mode")
limit = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit")
usebod = input(true, defval = true, title = "Use Body-filter")
usecol = input(true, defval = true, title = "Use Color-filter")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//CRSI
rsilen = 3
streaklen = 2
lookback = 100
rsi = rsi(close,rsilen)
upday = close > close[1] ? 1 : 0
downday = close < close[1] ? -1 : 0
upstreak = upday!=0 ? upstreak[1] + upday : 0
downstreak = downday!=0 ? downstreak[1] + downday : 0
streak = upstreak + downstreak
streakrsi = rsi(streak,streaklen)
roc = close/close[1] - 1
roccount = 0
for i=1 to lookback-1
roccount := roc[i]<roc ? roccount + 1 : roccount
crsi = (rsi + streakrsi + roccount) / 3
//Oscilator
// rsiplot = plot(crsi, title="RSI", style=line, linewidth=1, color=blue)
// band1 = hline(80, title="Upper Line", linestyle=dashed, linewidth=1, color=red)
// band0 = hline(20, title="Lower Line", linestyle=dashed, linewidth=1, color=green)
// fill(band1, band0, color=purple, transp=90)
//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false
//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gbar = bar == 1 or usecol == false
rbar = bar == -1 or usecol == false
//Signals
up1 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and crsi < limit and body and usecrsi
dn1 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and crsi > 100 - limit and body and usecrsi
up2 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and fastrsi < limit and body and usefrsi
dn2 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and fastrsi > 100 - limit and body and usefrsi
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body
//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]
if ((up1 or up2) and usemod == false) or (up1 and up2 and usemod)
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if ((dn1 or dn2) and usemod == false) or (dn1 and dn2 and usemod)
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
if exit
strategy.close_all()