
Cette stratégie permet de réaliser plusieurs ruptures de prix en réglant plusieurs fois les paramètres de l’indicateur RSI, ce qui permet d’obtenir des signaux d’entrée et de sortie plus précis.
La stratégie définit deux ensembles de paramètres RSI, respectivement un cycle RSI de 7 et un cycle RSI de 14 et un cycle RSI de 25 . L’opération de hausse ou de baisse est exécutée lorsque le prix franchit les limites de l’un ou l’autre des ensembles de RSI.
La stratégie commence par calculer les valeurs des deux ensembles d’indicateurs RSI, puis détermine si le prix a franchi la limite supérieure ou inférieure du RSI. Si la limite supérieure est franchie, un signal de plus est généré. Si la limite inférieure est franchie, un signal de moins est généré.
Si la position est déjà détenue, on continue à juger si le RSI actuel est dans la plage normale. Si le RSI est normal, et que l’entité franchit la moitié de la moyenne, un signal de sortie est généré.
La stratégie utilise également le système de mise en place de la Martingale. Après chaque perte, le volume de la transaction suivante est doublé.
L’utilisation de deux ensembles d’indicateurs RSI permet de détecter plus précisément les signaux de rupture et d’éviter les fausses ruptures.
En même temps, vérifiez les entrées et évitez les erreurs de transaction dans les tremblements de terre.
L’hypothèque de Martingale permet d’arrêter les pertes rapidement après les pertes.
Une combinaison de paramètres RSI personnalisable pour optimiser les chances d’entrée.
La période de transaction peut être limitée pour éviter les effets d’un événement majeur.
Les indices RSI doubles ne peuvent pas éviter complètement le phénomène de fausse rupture.
Il est facile de faire une rupture de position en cas de perte.
L’impact sur le coût des transactions n’est pas pris en compte.
Il y a beaucoup de paramètres à optimiser et il faut beaucoup de tests pour trouver la combinaison optimale.
Il est possible de définir des arrêts de perte pour limiter les pertes; optimiser la combinaison de paramètres du RSI; ajouter des considérations de coût; assouplir adéquatement la détermination des ruptures.
L’adhésion à un mécanisme de coupe des pertes peut limiter les pertes maximales.
Optimiser la combinaison de paramètres RSI pour trouver les paramètres optimaux afin de réduire les fausses ruptures.
Il faut tenir compte de l’impact sur les coûts des transactions et éviter les transactions trop fréquentes.
La libéralisation de l’appréciation de la rupture d’entité et l’accès à de nouvelles opportunités de transactions.
Ajouter des filtres pour plus d’indicateurs pour éviter d’être piégé.
La stratégie utilise le double RSI pour déterminer la rupture des prix, ajouter la rupture des entités et éviter d’être piégé dans un marché en crise. La stratégie utilise également l’hypothèse de Martingale pour arrêter rapidement les pertes. La stratégie permet d’obtenir des signaux de négociation plus précis grâce à l’optimisation des paramètres et à l’ajout de filtres plus indicatifs.
/*backtest
start: 2023-10-30 00:00:00
end: 2023-11-06 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Fast RSI Strategy v2.0", shorttitle = "Fast RSI str 2.0", overlay = true)
//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, %")
usersi1 = input(true, defval = true, title = "Use RSI #1")
rsiperiod1 = input(7, defval = 7, minval = 2, maxval = 50, title = "#1 RSI Period")
rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "#1 RSI limit")
usersi2 = input(true, defval = true, title = "Use RSI #2")
rsiperiod2 = input(14, defval = 14, minval = 2, maxval = 50, title = "#2 RSI Period")
rsilimit2 = input(25, defval = 25, minval = 1, maxval = 100, title = "#2 RSI limit")
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")
//RSI #1
uprsi1 = rma(max(change(close), 0), rsiperiod1)
dnrsi1 = rma(-min(change(close), 0), rsiperiod1)
rsi1 = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1))
uplimit1 = 100 - rsilimit1
dnlimit1 = rsilimit1
//RSI #2
uprsi2 = rma(max(change(close), 0), rsiperiod2)
dnrsi2 = rma(-min(change(close), 0), rsiperiod2)
rsi2 = dnrsi2 == 0 ? 100 : uprsi2 == 0 ? 0 : 100 - (100 / (1 + uprsi2 / dnrsi2))
uplimit2 = 100 - rsilimit2
dnlimit2 = rsilimit2
//Body
body = abs(close - open)
abody = sma(body, 10)
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi1 < dnlimit1 and body > abody / 5 and usersi1
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi1 > uplimit1 and body > abody / 5 and usersi1
up2 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi2 < dnlimit2 and body > abody / 5 and usersi2
dn2 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi2 > uplimit2 and body > abody / 5 and usersi2
norma = rsi1 > dnlimit1 and rsi1 < uplimit1 and rsi2 > dnlimit2 and rsi2 < uplimit2
exit = (((strategy.position_size > 0 and bar == 1 and norma) or (strategy.position_size < 0 and bar == -1 and norma)) 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
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
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if dn1 or dn2
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
if exit
strategy.close_all()