
Cette stratégie est un système de négociation qui combine le suivi de la tendance des moyennes mobiles et les arrêts de perte dynamiques. Elle utilise le MACD pour capturer le mouvement des prix, l’EMA pour la confirmation de la tendance et l’ATR pour la position des arrêts de perte dynamiques. Cette méthode d’analyse multidimensionnelle permet de saisir les opportunités de marché en temps opportun et de contrôler efficacement les risques.
La logique centrale de la stratégie comprend trois dimensions:
La stratégie est composée d’une combinaison de suivi des tendances, d’analyse de la dynamique et de contrôle des risques dynamiques pour construire un système de négociation complet. Sa principale caractéristique est de capturer efficacement les opportunités de marché et de contrôler dynamiquement les risques de négociation tout en maintenant la stabilité de la stratégie. Bien qu’il existe des risques inhérents, la stratégie a une bonne valeur d’application sur le terrain grâce à des paramètres raisonnables et une optimisation continue.
/*backtest
start: 2024-09-25 00:00:00
end: 2025-02-19 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("MACD + ATR Dynamic Stop-Loss Strategy", overlay=true)
// Input parameters
macdFastLength = input.int(12, title="MACD Fast Length")
macdSlowLength = input.int(26, title="MACD Slow Length")
macdSignalSmoothing = input.int(9, title="MACD Signal Smoothing")
atrLength = input.int(14, title="ATR Length")
stopLossMultiplier = input.float(1.0, title="Stop-Loss ATR Multiplier")
useTrailingStop = input.bool(true, title="Use Trailing Stop")
trailATRMultiplier = input.float(2.0, title="Trailing Stop ATR Multiplier")
emaLength = input.int(20, title="EMA Length")
// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalSmoothing)
// Calculate ATR
atr = ta.atr(atrLength)
// Calculate 20-period EMA
ema20 = ta.ema(close, emaLength)
// Entry Conditions
buyCondition = ta.crossover(macdLine, signalLine) and close > ema20
sellCondition = ta.crossunder(macdLine, signalLine)
// Plot Buy and Sell Signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=sellCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
// Dynamic Stop-Loss and Trailing Stop Logic
var float stopLossLevel = na
var float trailingStopLevel = na
if (buyCondition)
stopLossLevel := close - atr * stopLossMultiplier
trailingStopLevel := close - atr * trailATRMultiplier
if (strategy.position_size > 0)
if (useTrailingStop)
trailingStopLevel := math.max(trailingStopLevel, close - atr * trailATRMultiplier)
stopLossLevel := trailingStopLevel
strategy.exit("Trailing Stop", stop=stopLossLevel)
// Execute Trades
if (buyCondition)
strategy.entry("Long", strategy.long)
if (sellCondition)
strategy.close("Long")
// Plot Stop-Loss Level
plot(stopLossLevel, title="Stop-Loss Level", color=color.red, linewidth=1, style=plot.style_linebr)