Stratégie de négociation rapide en cas de renversement du RSI

Auteur:ChaoZhang est là., Date: 2024-03-01 11:55:56 Je suis désolé
Les étiquettes:

img

Résumé

La stratégie de trading d'inversion rapide du RSI génère des signaux de trading en combinant l'indicateur Fast RSI, le filtre du corps du chandelier, le filtre de prix min/max et le filtre SMA pour déterminer les points d'inversion de tendance pour le trading d'inversion à faible risque.

La logique de la stratégie

La stratégie repose principalement sur les indicateurs suivants:

  1. Indicateur RSI rapide: Calcule le RSI en utilisant la fonction RMA pour le rendre plus sensible afin de capter plus rapidement les signaux de surachat/survente.

  2. Filtre du corps du chandelier: exige que la taille du corps du chandelier dépasse 1/5 de la moyenne du corps de l'EMA pour filtrer les situations de faible volatilité.

  3. Filtre de prix minimum/maximum: Juge si le prix atteint un nouveau sommet ou un nouveau plus bas pour confirmer l'inversion de tendance.

  4. Filtre SMA: nécessite que le prix dépasse la ligne SMA pour une confirmation supplémentaire.

Les signaux de trading sont générés lorsque plusieurs conditions ci-dessus sont déclenchées simultanément.

Entrée longue: RSI rapide en dessous du niveau de survente ET Corps de bougie > 1/5 du corps de l'EMA ET Brèche de prix minimale ET Croisée de prix au-dessus de la SMA

Entrée courte: RSI rapide au-dessus du niveau de surachat ET Corps de bougie > 1/5 du corps de l'EMA ET Brèche maximale des prix ET Croisée des prix en dessous de la SMA

Sortie: RSI rapide retour à la plage normale

Les avantages

La stratégie présente les avantages suivants:

  1. Capture de la volatilité résultant des revers à court terme
  2. L'indicateur RSI rapide est sensible.
  3. Plusieurs filtres réduisent les faux signaux
  4. Risque maîtrisable, faible recours

Risques et optimisation

La stratégie comporte également certains risques:

  1. Risque d'échec du renversement
  2. Espace d'optimisation limité

Peut optimiser davantage par:

  1. Ajouter un filtre de volume de négociation
  2. Mettre en œuvre le stop loss
  3. Optimiser la combinaison de paramètres

Conclusion

Dans l'ensemble, il s'agit d'une stratégie de trading à faible risque à court terme. Elle identifie les signaux de trading avec Fast RSI et utilise plusieurs filtres pour réduire les faux signaux, ce qui permet d'obtenir un trading à inversion de risque contrôlable.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-26 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Fast RSI Strategy v1.4", shorttitle = "Fast RSI str 1.4", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usersi = input(true, defval = true, title = "Use Fast RSI Strategy")
usemm = input(true, defval = true, title = "Use Min/Max Strategy")
usesma = input(true, defval = true, title = "Use SMA Filter")
smaperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "SMA Filter Period")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
mmbars = input(1, defval = 1, minval = 1, maxval = 5, title = "Min/Max Bars")
showsma = input(false, defval = false, title = "Show SMA Filter")
showarr = input(false, defval = false, title = "Show Arrows")
fromyear = input(2018, defval = 2018, 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")

//Fast RSI
fastup = rma(max(change(rsisrc), 0), rsiperiod)
fastdown = rma(-min(change(rsisrc), 0), rsiperiod)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Limits
bar = close > open ? 1 : close < open ? -1 : 0
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
upsignal = fastrsi > uplimit ? 1 : 0
dnsignal = fastrsi < dnlimit ? 1 : 0
uprsi = sma(upsignal, rsibars) == 1
dnrsi = sma(dnsignal, rsibars) == 1

//Body
body = abs(close - open)
emabody = ema(body, 30)

//MinMax Bars
min = min(close, open)
max = max(close, open)
minsignal = min < min[1] and bar == -1 and bar[1] == -1 ? 1 : 0
maxsignal = max > max[1] and bar == 1 and bar[1] == 1 ? 1 : 0
mins = sma(minsignal, mmbars) == 1
maxs = sma(maxsignal, mmbars) == 1

//SMA Filter
sma = sma(close, smaperiod)
colorsma = showsma ? blue : na
plot(sma, color = colorsma, linewidth = 3)

//Signals
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and dnrsi and body > emabody / 5 and usersi
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > emabody / 5 and usersi
up2 = mins and (close > sma or usesma == false) and usemm
dn2 = maxs and (close < sma or usesma == false) and usemm 
exit = ((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) and body > emabody / 2

//Arrows
col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
if up1 or up2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn1 or dn2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
if time > timestamp(toyear, tomonth, today, 00, 00) or exit
    strategy.close_all()

Plus de