Cette stratégie est basée sur l'indicateur d'indice de force relative (RSI) et utilise les principes de surachat / survente du RSI pour effectuer des transactions de rupture.
Définir les paramètres de l'indicateur RSI en fonction des données fournies par l'utilisateur, y compris la période de l'indicateur RSI, le seuil de surachat et le seuil de survente.
Déterminez si l'indice de volatilité est dans la zone de surachat ou de survente en fonction de sa position par rapport aux seuils.
Lorsque le RSI sort de la zone de surachat/survente et franchit la ligne de seuil correspondante, effectuez des transactions dans la direction opposée. Par exemple, lorsque le RSI dépasse la ligne de surachat de la zone de surachat, le marché est considéré comme inversé, allez long à ce stade. Lorsque le RSI dépasse la ligne de survente de la zone de survente, le marché est considéré comme inversé, allez court ici.
Après l'entrée, définissez un stop loss et des lignes de profit.
La stratégie prévoit également l'option d'utiliser l'EMA comme filtre.
Il permet également de négocier uniquement dans des délais spécifiques.
Utilise les principes classiques de rupture RSI avec de bons résultats de backtest.
Des seuils de surachat/survente flexibles adaptés à différents produits.
Le filtre EMA facultatif évite les transactions à l'aide d'une pince à épiler excessive.
Prend en charge SL/TP pour améliorer la stabilité.
Prend en charge le filtrage des délais pour éviter des périodes inappropriées.
Prend en charge à la fois le long et le court pour une utilisation complète des fluctuations de prix bidirectionnelles.
La divergence du RSI se produit fréquemment, se fier uniquement au RSI peut générer des signaux inexacts.
Des seuils incorrects conduisent à des transactions trop fréquentes ou manquantes.
Les mauvais réglages SL/TP entraînent une agressivité ou une conservatisme excessifs.
Des paramètres de filtrage EMA incorrects peuvent manquer des transactions valides ou filtrer de bons signaux.
Solution au risque:
Optimiser les paramètres RSI pour différents produits.
Combiner avec les indicateurs de tendance pour identifier les divergences.
Tester et optimiser les paramètres SL/TP.
Testez et optimisez les paramètres de l'EMA.
La stratégie peut être améliorée dans les domaines suivants:
Optimiser les paramètres RSI pour trouver les meilleurs réglages pour différents produits par un backtest exhaustif.
Essayez d'utiliser différents indicateurs combinés avec ou remplaçant le RSI pour générer des signaux plus robustes, par exemple MACD, KD, Bollinger Bands, etc.
Optimiser le stop loss et adopter des stratégies de profit pour améliorer la stabilité.
Optimisez les paramètres du filtre EMA ou expérimentez avec d'autres filtres pour mieux éviter les coupes de fouet.
Ajouter des modules de filtrage de tendance pour éviter de négocier contre la tendance principale.
Testez différents délais pour trouver les meilleures sessions de trading pour cette stratégie.
La stratégie de rupture de l'inversion du RSI a une logique claire basée sur les principes classiques de surachat / survente. Elle vise à capturer la réversion moyenne aux extrêmes avec des filtres de contrôle des risques appropriés. Il existe un bon potentiel pour la transformer en une stratégie stable via l'ajustement des paramètres et des améliorations modulaires. Il vaut la peine d'être optimisé et appliqué dans le trading en direct.
/*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)