
Cette stratégie est un système de trading quantitatif basé sur la moyenne mobile, l’indicateur RSI et le stop loss suiveur. Il combine le suivi des tendances et les indicateurs de momentum dans l’analyse technique pour réaliser des transactions à risque contrôlé en définissant des conditions d’entrée et de sortie strictes. La logique principale de la stratégie est de rechercher des opportunités de survente pour entrer sur le marché dans une tendance à la hausse et d’utiliser des stop loss suiveurs pour protéger les bénéfices.
La stratégie utilise la moyenne mobile simple (SMA) sur 200 jours comme base pour le jugement des tendances et la combine avec l’indice de force relative (RSI) pour générer des signaux de trading. Spécifiquement:
Il s’agit d’une stratégie de trading quantitative avec une structure complète et une logique claire. Il combine plusieurs indicateurs techniques pour rechercher des rendements stables tout en contrôlant les risques. Bien qu’il y ait une marge d’optimisation, le cadre de base présente une bonne praticité et une bonne évolutivité. La stratégie convient aux investisseurs à moyen et long terme et présente une bonne adaptabilité aux différents environnements de marché.
/*backtest
start: 2025-01-09 00:00:00
end: 2025-01-16 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("200 SMA Crossover Strategy", overlay=false)
// Define inputs
smaLength = input.int(200, title="SMA Length")
rsiLength = input.int(14, title="RSI Length")
rsiThreshold = input.float(40, title="RSI Threshold")
trailStopPercent = input.float(5.0, title="Trailing Stop Loss (%)")
waitingPeriod = input.int(10, title="Waiting Period (Days)")
// Calculate 200 SMA
sma200 = ta.sma(close, smaLength)
// Calculate RSI
rsi = ta.rsi(close, rsiLength)
// Plot the 200 SMA and RSI
plot(sma200, color=color.blue, linewidth=2, title="200 SMA")
plot(rsi, color=color.purple, title="RSI", display=display.none)
// Define buy and sell conditions
var isLong = false
var float lastExitTime = na
var float trailStopPrice = na
// Explicitly declare timeSinceExit as float
float timeSinceExit = na(lastExitTime) ? na : (time - lastExitTime) / (24 * 60 * 60 * 1000)
canEnter = na(lastExitTime) or timeSinceExit > waitingPeriod
buyCondition = close > sma200 and rsi < rsiThreshold and canEnter
if (buyCondition and not isLong)
strategy.entry("Buy", strategy.long)
trailStopPrice := na
isLong := true
// Update trailing stop loss if long
if (isLong)
trailStopPrice := na(trailStopPrice) ? close * (1 - trailStopPercent / 100) : math.max(trailStopPrice, close * (1 - trailStopPercent / 100))
// Check for trailing stop loss or sell condition
if (isLong and (close < trailStopPrice or close < sma200))
strategy.close("Buy")
lastExitTime := time
isLong := false
// Plot buy and sell signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=(isLong and close < trailStopPrice) or close < sma200, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")