Cette stratégie met en œuvre le reversal trading en suivant les signaux manqués de surachat et de survente de l'indicateur RSI. Les signaux d'achat sont générés lorsque le RSI descend des niveaux de surachat et les signaux de vente lorsque le RSI rebondit des niveaux de survente, dans le but de saisir les opportunités de revers.
L'indicateur RSI identifie les niveaux de surachat/survente. Suracheté lorsque le RSI dépasse le seuil de surachat, survendu lorsqu'il dépasse le seuil de survente.
overbought = rsi > uplimit
oversold = rsi < dnlimit
Si RSI a été suracheté dernière barre et sorties suracheté cette barre, un signal d'achatup1
Si RSI a été survendu dernière barre et sorties survendus cette barre, un signal de ventedn1
est généré.
up1 = bar == -1 and strategy.position_size == 0 and overbought[1] and overbought == false
dn1 = bar == 1 and strategy.position_size == 0 and oversold[1] and oversold == false
Si la direction de la barre est alignée sur la direction de position et que le corps de la barre dépasse la moitié de sa moyenne de 10 périodes, un signal de sortie est déclenché.
exit = (((strategy.position_size > 0 and bar == 1) or
(strategy.position_size < 0 and bar == -1)) and
body > abody / 2)
Suivre les signaux de renversement du RSI manqués, évitant ainsi de détecter en temps opportun les points de surachat/survente.
Utilisez la propriété d'inversion du RSI
Incorporer la direction et la taille de la barre dans la logique de sortie pour éviter un suivi ultérieur après les retraits.
Risque de faux signaux provenant d'indicateurs de risque élevés
Les prix ont peut-être déjà baissé de manière significative lors du suivi du signal, augmentant le risque de perte
Risque de sortie prématurée avant le retour à la rentabilité totale
Optimiser les paramètres tels que les niveaux de surachat/survente, la période de réflexion, etc. basés sur différents marchés
Ajustez la taille de la position, comme la réduction de la taille lors du suivi des signaux
Améliorer le temps d'entrée, en ajoutant des filtres au-delà des signaux de suivi
Améliorer les sorties pour augmenter la rentabilité, comme les arrêts de profit de trail
Optimiser les arrêts pour réduire les pertes, comme les arrêts de trailing ou les arrêts de cône
Cette stratégie met en œuvre le trading de renversement en suivant les signaux de surachat/survente du RSI. Elle présente l'avantage de capturer les signaux de renversement, mais comporte également des risques de faux signaux et de pertes.
/*backtest start: 2023-09-20 00:00:00 end: 2023-09-27 00:00:00 period: 15m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Anti RSI Strategy v1.0", shorttitle = "Anti RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //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, %") rsiperiod1 = input(14, defval = 14, minval = 2, maxval = 50, title = "RSI Period") rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit") showarr = input(false, defval = false, title = "Show Arrows") 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") //RSI uprsi1 = rma(max(change(close), 0), rsiperiod1) dnrsi1 = rma(-min(change(close), 0), rsiperiod1) rsi = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1)) uplimit = 100 - rsilimit1 dnlimit = rsilimit1 //Body body = abs(close - open) abody = sma(body, 10) //Signals bar = close > open ? 1 : close < open ? -1 : 0 overbought = rsi > uplimit oversold = rsi < dnlimit up1 = bar == -1 and strategy.position_size == 0 and overbought[1] and overbought == false dn1 = bar == 1 and strategy.position_size == 0 and oversold[1] and oversold == false up2 = bar == -1 and strategy.position_size > 0 and overbought == false dn2 = bar == 1 and strategy.position_size < 0 and oversold == false norma = overbought == false and oversold == false exit = (((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2) //Arrows col = exit ? black : up1 or dn1 or up2 or dn2 ? blue : 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, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, 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()