Cette stratégie utilise plusieurs indicateurs RSI pour mettre en œuvre des percées de prix afin de générer des signaux d'entrée et de sortie plus précis.
La stratégie définit deux groupes de paramètres RSI, l'un avec une période de 7 et une limite de 25, l'autre avec une période de 14 et une limite de 25.
La stratégie calcule d'abord les valeurs des deux indicateurs RSI, puis juge si le prix franchit la limite supérieure ou inférieure du RSI. S'il franchit la limite supérieure, un signal long est généré. S'il franchit la limite inférieure, un signal court est généré.
Si vous avez déjà une position, il continue de juger si le RSI actuel est dans la plage normale.
La stratégie utilise également le système de Martingale. La taille de l'ordre double après chaque perte.
L'utilisation de deux indicateurs RSI permet de mieux juger les signaux de percée et d'éviter les faux signaux.
En outre, la vérification de la percée du corps évite les mauvaises transactions lors de la consolidation.
Martingale aide à arrêter la perte rapidement après les pertes.
Les paramètres RSI personnalisables optimisent les opportunités d'entrée.
Les sessions de négociation peuvent être limitées pour éviter les effets d'événements majeurs.
Le double RSI ne peut pas éviter complètement une fausse percée.
Martingale augmente sa position après des pertes, risque de faire exploser.
Le coût de négociation n'est pas pris en compte.
Trop de paramètres optimisables nécessitent beaucoup de tests pour trouver la meilleure combinaison.
Peut définir un stop loss pour limiter les pertes; optimiser les paramètres du RSI; ajouter une considération des coûts; assouplir les critères de percée.
Ajouter un stop loss pour limiter la perte maximale.
Optimiser les paramètres du RSI pour réduire les faux signaux.
Considérez l'impact sur les coûts de négociation pour éviter une survente.
Détendez les critères de découverte pour plus d'opportunités.
Ajoutez plus de filtres pour éviter d'être pris au piège.
Cette stratégie utilise le double RSI pour déterminer la percée des prix, ajoute un filtre de percée du corps pour éviter les fouets. Elle utilise également le Martingale pour réduire rapidement les pertes. La stratégie peut être améliorée en optimisant les paramètres et en ajoutant des filtres pour des signaux plus précis. La gestion des risques est importante pour limiter les pertes. Dans l'ensemble, cette stratégie fournit un système de percée relativement stable adapté au trading à haute efficacité.
/*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()