
La stratégie est basée sur la conception d’un indicateur RSI relativement faible, utilisant le principe de sur-achat et de survente du RSI pour effectuer des opérations de rupture bidirectionnelles. Faire plus lorsque le RSI traverse la ligne de survente définie et faire moins lorsque le RSI traverse la ligne de survente définie est une stratégie de trading inversée typique.
Les paramètres de l’indicateur RSI sont calculés en fonction des paramètres d’entrée de l’utilisateur, y compris la longueur du cycle RSI, les seuils d’excédent de la ligne d’achat et les seuils d’excédent de la ligne de vente.
La courbe RSI est utilisée pour déterminer si une zone est sur-achetée ou sur-vendue par rapport à la position de la ligne sur-achat et de la ligne sur-vente.
Lorsque l’indicateur RSI franchit la ligne de dépréciation correspondante à partir de la zone de survente, effectuez une opération d’ouverture de position dans la direction opposée. Par exemple, lorsque la zone de survente franchit la ligne de survente, considérez que la tendance s’est inversée et ouvrez alors une position plus élevée; lorsque la zone de survente franchit la ligne de survente, considérez que la tendance s’est inversée et ouvrez alors une position vide.
Après avoir ouvert une position, définissez un stop-loss. Suivez le stop-loss et laissez la position si les conditions sont remplies.
La stratégie offre également la possibilité d’utiliser l’EMA comme filtre. Il est possible de prendre position uniquement si le RSI fait plus de signaux de couverture et que le prix doit franchir l’EMA.
La stratégie offre également la possibilité de négocier uniquement pendant une période de temps spécifique. L’utilisateur peut définir des transactions uniquement pendant une certaine période de temps, après quoi il peut se retirer de la position.
Résolution des risques:
Cette stratégie peut être optimisée dans les domaines suivants:
Optimiser les paramètres du RSI pour trouver les meilleures combinaisons de paramètres pour les différentes variétés. Les meilleures seuils de survente et de survente peuvent être trouvés en parcourant le suivi.
Essayez de remplacer ou de combiner différents indicateurs RSI pour former un signal de jugement plus fort. Par exemple, MACD, KD, Brin et ainsi de suite.
Optimiser les stratégies de stop loss et d’arrêt pour améliorer la stabilité des stratégies. Les stratégies peuvent être configurées en fonction de la volatilité du marché ou avec une fonction de suivi des pertes.
Optimisez les paramètres du filtre EMA ou testez d’autres filtres de mesure pour éviter d’être piégé.
Ajout d’un module de jugement de tendance pour éviter de faire des actions inverses à plusieurs têtes ou des actions inverses à plusieurs têtes.
Tester différents paramètres de périodes de négociation pour déterminer les périodes qui conviennent à la stratégie et celles qui doivent être évitées.
La stratégie de rupture bidirectionnelle du RSI est clairement décrite et utilise le principe classique du RSI de surachat et de survente pour effectuer des transactions de revers. Il est possible de saisir les opportunités de revers dans les zones de surachat et de survente et de contrôler les risques grâce au filtrage EMA et au stop-loss.
/*backtest
start: 2023-10-08 00:00:00
end: 2023-11-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © REV0LUTI0N
//@version=4
strategy("RSI Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)
// Strategy Backtesting
startDate = input(timestamp("2021-10-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("9999-12-31T00:00:00"), type = input.time, title='Backtesting End Date')
time_cond = true
// Strategy
Length = input(12, minval=1)
src = input(close, title="Source")
overbought = input(70, minval=1)
oversold = input(30, minval=1)
xRSI = rsi(src, Length)
rsinormal = input(true, title="Overbought Go Long & Oversold Go Short")
rsiflipped = input(false, title="Overbought Go Short & Oversold Go Long")
// EMA Filter
noemafilter = input(true, title="No EMA Filter")
useemafilter = input(false, title="Use EMA Filter")
ema_length = input(defval=15, minval=1, title="EMA Length")
emasrc = input(close, title="Source")
ema = ema(emasrc, ema_length)
plot(ema, "EMA", style=plot.style_linebr, color=#cad850, linewidth=2)
//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))
// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100
longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)
plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")
// Alert messages
message_enterlong = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")
// Strategy Execution
if (xRSI > overbought and close > ema and time_cond and timetobuy and rsinormal and useemafilter)
strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (xRSI < oversold and close < ema and time_cond and timetobuy and rsinormal and useemafilter)
strategy.entry("Short", strategy.short, alert_message = message_entershort)
if (xRSI < oversold and close > ema and time_cond and timetobuy and rsiflipped and useemafilter)
strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (xRSI > overbought and close < ema and time_cond and timetobuy and rsiflipped and useemafilter)
strategy.entry("Short", strategy.short, alert_message = message_entershort)
if (xRSI > overbought and time_cond and timetobuy and rsinormal and noemafilter)
strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (xRSI < oversold and time_cond and timetobuy and rsinormal and noemafilter)
strategy.entry("Short", strategy.short, alert_message = message_entershort)
if (xRSI < oversold and time_cond and timetobuy and rsiflipped and noemafilter)
strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (xRSI > overbought and time_cond and timetobuy and rsiflipped and noemafilter)
strategy.entry("Short", strategy.short, alert_message = message_entershort)
if strategy.position_size > 0 and timetoclose and enableclose
strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
strategy.close_all(alert_message = message_closeshort)
if strategy.position_size > 0 and enablesl and time_cond
strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
if strategy.position_size > 0 and enabletp and time_cond
strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)