
La stratégie est un système de trading composite combinant l’indicateur de dynamique RSI et l’indicateur de tendance EMA. Elle fonctionne sur deux périodes de 1 minute et 5 minutes, et prend des décisions de négociation en fonction du signal de survente et de survente du RSI et de la tendance de la triple EMA.
La stratégie utilise le triple EMA 21/50/200 comme référence pour déterminer la tendance, et en combinaison avec l’indicateur RSI modifié (calculé selon la méthode Chebyshev) pour identifier les sur-achats et les sur-vente du marché. Sur une période de 1 minute, le cours est ouvert à la baisse lorsque le RSI atteint 94, la position est levée à 4 heures et le stop-loss de garantie est défini lorsque le RSI revient à 50. Sur une période de 5 minutes, le cours est ouvert à la hausse lorsque le cours dépasse l’EMA de 200 jours et rebondit, et la position est levée lorsque le RSI est en hausse ou en baisse.
La stratégie améliore la stabilité et la fiabilité des transactions en combinant plusieurs indicateurs techniques et une analyse de plusieurs cycles de temps. Bien qu’il existe un certain risque, un contrôle efficace du risque peut être réalisé grâce à une gestion de position et un mécanisme de stop-loss raisonnables.
/*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