Cette stratégie est un système de trading composite qui combine l'indicateur de dynamique RSI avec l'indicateur de tendance EMA. Opérant sur des délais de 1 minute et 5 minutes, elle prend des décisions de trading basées sur les signaux de surachat/survente RSI et la détermination de la tendance triple EMA.
La stratégie utilise l'EMA triple de 21/50/200 jours comme référence de jugement de tendance, combinée à un indicateur RSI modifié (calculé à l'aide de la méthode Chebyshev) pour identifier les conditions de surachat / survente du marché. Sur la période d'une minute, elle lance des positions courtes lorsque le RSI dépasse 94 et ferme lorsqu'il tombe en dessous de 4, avec des arrêts d'équilibre définis lorsque le RSI revient à 50. Sur la période de 5 minutes, elle lance des positions longues lorsque le prix rebondit après avoir chuté en dessous de l'EMA de 200 jours, fermant les positions lorsque le RSI est suracheté ou dépasse la médiane.
La stratégie améliore la stabilité et la fiabilité du trading grâce à la combinaison de plusieurs indicateurs techniques et d'une analyse multi-temporelle. Bien que certains risques existent, ils peuvent être efficacement contrôlés grâce à une bonne gestion des positions et à des mécanismes de stop-loss.
/*backtest start: 2023-11-12 00:00:00 end: 2024-07-10 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Combined RSI Primed and 3 EMA Strategy", overlay=true) // Input for EMA lengths emaLength1 = input(21, title="EMA Length 1") emaLength2 = input(50, title="EMA Length 2") emaLength3 = input(200, title="EMA Length 3") // Input for RSI settings rsiLength = input(14, title="RSI Length") rsiOverbought = input(94, title="RSI Overbought Level") rsiNeutral = input(50, title="RSI Neutral Level") rsiOversold = input(4, title="RSI Oversold Level") // Calculate EMAs ema1 = ta.ema(close, emaLength1) ema2 = ta.ema(close, emaLength2) ema3 = ta.ema(close, emaLength3) // Calculate RSI using Chebyshev method from RSI Primed rsi(source) => up = math.max(ta.change(source), 0) down = -math.min(ta.change(source), 0) rs = up / down rsiValue = down == 0 ? 100 : 100 - (100 / (1 + rs)) rsiValue rsiValue = rsi(close) // Plot EMAs plot(ema1, color=color.red, title="EMA 21") plot(ema2, color=color.white, title="EMA 50") plot(ema3, color=color.blue, title="EMA 200") // Plot RSI for visual reference hline(rsiOverbought, "Overbought", color=color.red) hline(rsiNeutral, "Neutral", color=color.gray) hline(rsiOversold, "Oversold", color=color.green) plot(rsiValue, color=color.blue, title="RSI") // Trading logic with position management var bool inPositionShort = false var bool inPositionLong = false // Trading logic for 1-minute timeframe if (rsiValue > rsiOverbought and not inPositionShort) strategy.entry("Sell", strategy.short) inPositionShort := true if (rsiValue < rsiOversold and inPositionShort) strategy.close("Sell") inPositionShort := false if (ta.crossover(rsiValue, rsiNeutral) and inPositionShort) strategy.exit("Break Even", "Sell", stop=close) // Trading logic for 5-minute timeframe var float lastBearishClose = na if (close < ema3 and close[1] >= ema3) // Check if the current close is below EMA200 lastBearishClose := close if (not na(lastBearishClose) and close > lastBearishClose and not inPositionLong) strategy.entry("Buy", strategy.long) inPositionLong := true if (rsiValue > rsiOverbought and inPositionLong) strategy.close("Buy") inPositionLong := false if (ta.crossunder(rsiValue, rsiNeutral) and inPositionLong) strategy.exit("Break Even", "Buy", stop=close) lastBearishClose := na // Reset after trade execution