Cette stratégie est un système de suivi des tendances qui combine les bandes de Bollinger, les métriques de volatilité et la gestion des risques. Elle capture les opportunités de tendance en surveillant les écarts de prix au-delà des bandes de Bollinger tout en ajustant dynamiquement les tailles de position à l'aide de l'ATR pour un contrôle précis des risques.
La stratégie fonctionne selon la logique de base suivante: 1. Utilise une moyenne mobile de 20 périodes comme bande moyenne des bandes de Bollinger, avec des bandes supérieures et inférieures à 2 écarts types. Identifie les périodes de consolidation du marché en comparant la largeur actuelle de la bande de Bollinger à sa moyenne mobile. 3. pendant les périodes de non-consolidation, entre dans des positions longues sur les écarts de bande supérieure et des positions courtes sur les écarts de bande inférieure. 4. Utilise l'ATR à 14 périodes pour calculer dynamiquement les niveaux de stop-loss et définit les niveaux de prise de profit sur la base d'un rapport risque-rendement de 2: 1. 5. Calcule automatiquement la taille de la position pour chaque transaction en fonction de la limite de risque du compte de 1% et de la valeur ATR.
Cette stratégie capte les tendances grâce à des ruptures de bandes de Bollinger tout en incorporant un système de contrôle des risques complet. Ses atouts résident dans une grande adaptabilité et un risque contrôlé, bien que l'attention soit portée aux fausses ruptures et aux risques d'inversion de tendance.
/*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!")