Cette stratégie est un système de trading quantitatif basé sur les moyennes mobiles, l'indicateur RSI et le stop-loss. Elle combine les indicateurs de tendance et de dynamique de l'analyse technique, permettant de réaliser un trading contrôlé par les risques grâce à des conditions d'entrée et de sortie strictes.
La stratégie utilise une moyenne mobile simple (SMA) de 200 jours comme référence pour le jugement de la tendance, combinée à l'indice de force relative (RSI) pour générer des signaux de trading. 1. Utilise la SMA de 200 jours pour juger de la tendance majeure, en considérant uniquement les positions longues lorsque le prix est supérieur à la moyenne 2. Identifie les signaux de survente lorsque le RSI tombe en dessous du seuil prédéfini (par défaut 40) 3. déclenche l'entrée longue lorsque les deux conditions sont remplies et que la période d'attente depuis la dernière sortie (défaut 10 jours) a expiré 4. Protège les bénéfices lors de la détention de position par le biais d'un stop-loss (par défaut 5%) 5. Sort de la position lorsque le prix dépasse le seuil d'arrêt ou la SMA de 200 jours
Il s'agit d'une stratégie de trading quantitative avec une structure complète et une logique claire. Il poursuit des rendements stables tout en contrôlant le risque en combinant plusieurs indicateurs techniques. Bien qu'il y ait place à l'optimisation, le cadre de base a une bonne praticité et extensibilité. La stratégie convient aux investisseurs à moyen et long terme et s'adapte bien à 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")