
La stratégie est un système de suivi de tendance qui combine les bandes de Bollinger, la volatilité et la gestion des risques. Il capture principalement les opportunités de tendance en surveillant la manière dont les prix franchissent les pistes supérieures et inférieures des bandes de Bollinger, et en même temps ajuste dynamiquement la taille de la position en combinaison avec l’ATR pour obtenir un contrôle précis des risques. La stratégie intègre également un mécanisme d’identification des périodes de consolidation du marché afin de filtrer efficacement les faux signaux sur les marchés volatils.
La stratégie fonctionne sur la base de la logique fondamentale suivante :
Cette stratégie capture les tendances grâce aux cassures des bandes de Bollinger et les combine avec un système de contrôle des risques solide. Ses avantages sont une forte adaptabilité et des risques contrôlables, mais il faut néanmoins faire attention aux risques de fausses percées et de renversements de tendance. Il est encore possible d’améliorer encore la stratégie en ajoutant des indicateurs de confirmation de tendance, en optimisant les mécanismes d’ajustement des paramètres, etc. Dans l’ensemble, il s’agit d’une stratégie de suivi des tendances, dotée d’une logique claire et d’une grande praticité.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Bollinger Bands Breakout Strategy", overlay=true)
// Input parameters
length = input(20, title="Bollinger Bands Length")
stdDev = input(2.0, title="Standard Deviation")
riskRewardRatio = input(2.0, title="Risk/Reward Ratio")
atrLength = input(14, title="ATR Length")
riskPercentage = input(1.0, title="Risk Percentage per Trade")
// Calculate Bollinger Bands
basis = ta.sma(close, length)
dev = stdDev * ta.stdev(close, length)
upperBand = basis + dev
lowerBand = basis - dev
// Calculate ATR for position sizing
atr = ta.atr(atrLength)
// Plot Bollinger Bands
plot(basis, color=color.blue, title="Basis")
plot(upperBand, color=color.red, title="Upper Band")
plot(lowerBand, color=color.green, title="Lower Band")
// Market Consolidation Detection
isConsolidating = (upperBand - lowerBand) < ta.sma(upperBand - lowerBand, length) * 0.5
// Breakout Conditions
longCondition = ta.crossover(close, upperBand) and not isConsolidating
shortCondition = ta.crossunder(close, lowerBand) and not isConsolidating
// Risk Management: Calculate position size
equity = strategy.equity
riskAmount = equity * (riskPercentage / 100)
positionSize = riskAmount / (atr * riskRewardRatio)
// Execute trades with risk management
if (longCondition)
strategy.entry("Long", strategy.long, qty=positionSize)
strategy.exit("Take Profit", from_entry="Long", limit=close + atr * riskRewardRatio, stop=close - atr)
if (shortCondition)
strategy.entry("Short", strategy.short, qty=positionSize)
strategy.exit("Take Profit", from_entry="Short", limit=close - atr * riskRewardRatio, stop=close + atr)
// Alert conditions for breakouts
alertcondition(longCondition, title="Long Breakout", message="Long breakout detected!")
alertcondition(shortCondition, title="Short Breakout", message="Short breakout detected!")