Cet article détaillera la logique derrière la stratégie de rupture rapide du RSI de Noro
I. Vue d'ensemble de la stratégie
Cette stratégie utilise principalement l'indicateur RSI pour générer des signaux de trading, combiné avec le filtrage des bougies et les percées min/max comme jugements auxiliaires, formant un système de décision long/short complet.
II. Détails de la stratégie
La stratégie utilise un RSI rapide de longueur 7 pour capturer les signes des tendances du marché à travers des oscillations rapides du RSI.
La stratégie filtre les signaux RSI en utilisant la taille du corps du chandelier sma, en tenant compte uniquement des signaux RSI sur les chandeliers dont la taille du corps est supérieure à la taille moyenne du corps sur 5 jours, en évitant les coups de fouet.
La stratégie vérifie si des percées min/max se sont produites dans les mmbars récents, en combinaison avec le niveau du RSI pour déterminer les inversions inférieures et les ventilations supérieures.
Signaux longs: le RSI passe sous 30, la taille du corps dépasse la taille moyenne du corps, et les supports sont brisés.
Signal court: RSI dépasse 70, taille du corps dépasse la taille moyenne du corps, et résistances de rupture max.
Signal de sortie: lorsque le RSI franchit les limites dans le sens opposé de la position.
III. Avantages de la stratégie
Les paramètres RSI optimisés captent rapidement les changements de tendance.
La combinaison avec les chandeliers et le min/max évite les coupes inutiles.
Le mécanisme stop-loss s'éteint lorsque le RSI dépasse les limites.
IV. Risques liés à la stratégie
RSI sujette à de faux signaux, besoin de confirmation auxiliaire.
Les paramètres optimisés peuvent ne s'adapter qu'à des périodes spécifiques du marché.
Le mécanisme d'arrêt des pertes peut être trop mécanique, incapable de contrôler une grande perte sur un seul stop-loss.
V. Conclusion
Cette stratégie intègre plusieurs indicateurs techniques pour une tendance robuste suivie. Mais les risques de suradaptation de backtest et de stop loss doivent être notés, et les performances en direct doivent être évaluées avec prudence.
/*backtest start: 2022-09-11 00:00:00 end: 2023-01-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Noro's Fast RSI Strategy v1.6", shorttitle = "Fast RSI str 1.6", overlay = true, 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") usersi = input(true, defval = true, title = "Use Fast RSI Strategy") usemm = input(true, defval = true, title = "Use Min/Max Strategy") usebc = input(true, defval = true, title = "Use BarColor Strategy") usesma = input(false, defval = false, title = "Use SMA Filter") smaperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "SMA Filter Period") fast = input(7, defval = 7, minval = 2, maxval = 50, title = "Fast 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), fast) fastdown = rma(-min(change(rsisrc), 0), fast) 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) abody = sma(body, 10) //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 > abody / 5 and usersi dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > abody / 5 and usersi up2 = mins and (close > sma or usesma == false) and fastrsi < 70 and usemm dn2 = maxs and (close < sma or usesma == false) and fastrsi > 30 and usemm up3 = sma(bar, 2) == -1 and usebc dn3 = sma(bar, 2) == 1 and usebc exit = ((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) and body > abody / 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 or up3 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 or dn3 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()