Cette stratégie est un système de suivi des tendances basé sur des croisements de moyennes mobiles exponentielles (EMA), incorporant une dimensionnement dynamique des positions et une gestion des risques.
La logique de base repose sur deux EMA avec des périodes différentes (défaut 9 et 21). Un signal d'entrée long est généré lorsque l'EMA rapide traverse au-dessus de l'EMA lente, tandis que les positions sont fermées lorsque l'EMA rapide traverse au-dessous de l'EMA lente.
Il s'agit d'un système de trading complet qui combine des méthodes d'analyse technique classiques avec des concepts de gestion des risques modernes. La stratégie contrôle le risque grâce à une dimensionnement dynamique des positions et à des arrêts de suivi tout en capturant les opportunités de tendance en utilisant des croisements EMA. Bien qu'il existe des limites inhérentes, les directions d'optimisation suggérées peuvent encore améliorer la robustesse et l'adaptabilité de la stratégie. La stratégie est particulièrement adaptée au trading de tendance à long terme avec un risque contrôlé.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-18 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bitcoin Exponential Profit Strategy", overlay=true) // User settings fastLength = input.int(9, title="Fast EMA Length", minval=1) slowLength = input.int(21, title="Slow EMA Length", minval=1) riskPercent = input.float(1, title="Risk % Per Trade", step=0.1) / 100 rewardMultiplier = input.float(2, title="Reward Multiplier (R:R)", step=0.1) trailOffsetPercent = input.float(0.5, title="Trailing Stop Offset %", step=0.1) / 100 // Calculate EMAs fastEMA = ta.ema(close, fastLength) slowEMA = ta.ema(close, slowLength) // Plot EMAs plot(fastEMA, color=color.blue, title="Fast EMA") plot(slowEMA, color=color.red, title="Slow EMA") // Account balance and dynamic position sizing capital = strategy.equity riskAmount = capital * riskPercent // Define Stop Loss and Take Profit Levels stopLossLevel = close * (1 - riskPercent) takeProfitLevel = close * (1 + rewardMultiplier * riskPercent) // Trailing stop offset trailOffset = close * trailOffsetPercent // Entry Condition: Bullish Crossover if ta.crossover(fastEMA, slowEMA) positionSize = riskAmount / math.max(close - stopLossLevel, 0.01) // Prevent division by zero strategy.entry("Long", strategy.long, qty=positionSize) strategy.exit("TakeProfit", from_entry="Long", stop=stopLossLevel, limit=takeProfitLevel, trail_offset=trailOffset) // Exit Condition: Bearish Crossunder if ta.crossunder(fastEMA, slowEMA) strategy.close("Long") // Labels for Signals if ta.crossover(fastEMA, slowEMA) label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up) if ta.crossunder(fastEMA, slowEMA) label.new(bar_index, high, "SELL", color=color.red, textcolor=color.white, style=label.style_label_down)