
Cette stratégie est un système de trading adaptatif qui combine les bandes de Bollinger et le suivi des arrêts ATR. La stratégie identifie les signaux d’entrée par la rupture de la descente de Bollinger, tout en utilisant le suivi dynamique des arrêts basé sur ATR pour gérer les risques et déterminer le moment de sortie. La stratégie est capable de saisir les opportunités de tendance lorsque les tendances du marché sont évidentes, tout en offrant une protection dans les marchés instables.
La logique centrale de la stratégie comprend deux parties principales:
La stratégie, combinée à la bande de Brin et au suivi des arrêts ATR, construit un système de négociation doté de capacités de capture de tendance et de contrôle du risque. Les caractéristiques d’adaptation de la stratégie lui permettent de rester stable dans différents environnements de marché, tandis qu’un système de signaux clair fournit une base de négociation objective.
/*backtest
start: 2025-01-19 00:00:00
end: 2025-02-18 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("ATR Trailing Stop Loss with Bollinger Bands", overlay=true)
// Input parameters for Bollinger Bands
bb_length = input.int(20, title="Bollinger Bands Length")
bb_stddev = input.float(2.0, title="Bollinger Bands Std Dev")
// Input parameters for ATR Trailing Stop Loss
atr_length = input.int(14, title="ATR Length")
atr_multiplier = input.float(3.0, title="ATR Multiplier")
// Calculate Bollinger Bands
basis = ta.sma(close, bb_length)
upper_band = ta.sma(close, bb_length) + ta.stdev(close, bb_length) * bb_stddev
lower_band = ta.sma(close, bb_length) - ta.stdev(close, bb_length) * bb_stddev
// Calculate ATR
atr = ta.atr(atr_length)
// Trailing Stop Loss Calculation
var float long_stop = na // Explicitly define as float type
var float short_stop = na // Explicitly define as float type
if (strategy.position_size > 0)
long_stop := close - atr * atr_multiplier
long_stop := math.max(long_stop, nz(long_stop[1], long_stop))
else
long_stop := na
if (strategy.position_size < 0)
short_stop := close + atr * atr_multiplier
short_stop := math.min(short_stop, nz(short_stop[1], short_stop))
else
short_stop := na
// Entry and Exit Conditions
long_condition = ta.crossover(close, lower_band) // Enter long when price crosses above lower band
short_condition = ta.crossunder(close, upper_band) // Enter short when price crosses below upper band
exit_long_condition = ta.crossunder(close, long_stop) // Exit long when price crosses below trailing stop
exit_short_condition = ta.crossover(close, short_stop) // Exit short when price crosses above trailing stop
// Execute Trades
if (long_condition)
strategy.entry("Long", strategy.long)
if (short_condition)
strategy.entry("Short", strategy.short)
if (exit_long_condition)
strategy.close("Long")
if (exit_short_condition)
strategy.close("Short")
// Plot Bollinger Bands
plot(basis, color=color.blue, title="Basis")
plot(upper_band, color=color.red, title="Upper Band")
plot(lower_band, color=color.green, title="Lower Band")
// Plot Trailing Stop Loss
plot(strategy.position_size > 0 ? long_stop : na, color=color.orange, title="Long Trailing Stop")
plot(strategy.position_size < 0 ? short_stop : na, color=color.purple, title="Short Trailing Stop")
// Labels for Entry and Exit
if (long_condition)
label.new(bar_index, low, text="Entry Long", style=label.style_circle, color=color.green, textcolor=color.white, size=size.small)
if (short_condition)
label.new(bar_index, high, text="Entry Short", style=label.style_circle, color=color.red, textcolor=color.white, size=size.small)
if (exit_long_condition)
label.new(bar_index, low, text="Exit Long", style=label.style_circle, color=color.blue, textcolor=color.white, size=size.small)
if (exit_short_condition)
label.new(bar_index, high, text="Exit Short", style=label.style_circle, color=color.orange, textcolor=color.white, size=size.small)