La stratégie des bandes de Bollinger est une stratégie classique qui utilise les bandes de Bollinger pour le suivi des tendances et les signaux de surachat / survente.
La stratégie évalue les conditions de surachat/survente à travers des croisements dorés/mortes des bandes de Bollinger supérieures/inférieures pour établir des positions. La zone entre les bandes reflète la fourchette de volatilité actuelle du marché. Les bandes se composent de bandes intermédiaires, supérieures et inférieures, où la bande intermédiaire est la moyenne mobile simple de N jours et les bandes supérieures/inférieures sont des bandes intermédiaires +/- K écarts types.
Les bandes de Bollinger reflètent la volatilité du marché et la gamme d'oscillations. Toucher la bande inférieure signifie un statu quo de survente - les lacunes ont une probabilité plus élevée d'être comblées. Ainsi, les positions longues doivent être considérées sur la base du principe de la réversion moyenne. De même, toucher la bande supérieure représente des conditions potentielles de surachat et des renversements de prix probables, de sorte que des positions courtes peuvent être établies pour tirer profit des mouvements à la baisse.
Cette stratégie combine les signaux de surachat/survente des bandes de Bollinger pour les entrées de suivi de tendance.
Lorsque le prix dépasse la marge inférieure, le marché sort de la zone de survente dans une plage raisonnable. Des positions longues peuvent être ouvertes. Lorsque le prix dépasse la marge supérieure, le marché devient suracheté. Des positions courtes peuvent alors être ouvertes.
Une fois les ordres exécutés, des niveaux de stop loss pourcentage fixes sont définis pour gérer les risques.
Identifier les niveaux de surachat/survente à l'aide des bandes de Bollinger pour les réglages d'achat à bas prix et de vente à haut prix en fonction des croisements de bandes.
Capturez les tendances grâce à la propriété de volatilité des bandes de Bollinger.
Le mécanisme de stop loss limite efficacement la perte maximale par transaction.
La combinaison du suivi des tendances et du stop loss conduit à des gains réguliers.
Les paramètres réglés ont une incidence sur la qualité du signal. La longueur de bande moyenne N et le multiplicateur de l'écart type K doivent être réglés de manière rationnelle pour différents marchés, sinon la précision en souffrira.
Un stop loss trop grand ou trop petit nuit à la stabilité du rendement. Un pourcentage trop grand risque des pertes plus lourdes par transaction, tandis qu'un pourcentage trop petit risque un stop loss prématuré. Un pourcentage raisonnable doit être défini en fonction de différents produits.
Des filtres supplémentaires avec d'autres indicateurs peuvent améliorer la précision du signal.
Différents réglages de périodes de détention peuvent être testés, par exemple en combinant des bandes horaires ou de périodes plus courtes pour des améliorations de la fréquence de négociation et de l'efficacité de l'utilisation du capital.
Cette stratégie tire parti des bandes de Bollinger pour les signaux de surachat / survente et intègre un stop loss pour contrôler les risques.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Bollinger Bands Strategy", overlay=false, shorttitle="BBS", pyramiding=0, currency=currency.USD, commission_type=strategy.commission.percent, commission_value=0.03, initial_capital=1000) source = input(close, "Source") length = input.int(20, minval=1) mult = input.float(2.0, minval=0.001, maxval=50, step=0.001) stopLossFactor = input.float(1, "Stop Loss Percent", maxval = 100, minval = 0, step=0.1) basis = ta.sma(source, length) dev = mult * ta.stdev(source, length) upper = basis + dev lower = basis - dev var float lastTradePrice = na var float stopLossLow = na var float stopLossHigh = na var bool currentIsLong = na var bool nextExpectedIsLong = true var bool existedLong = false var bool existedShort = false buyEntry = ta.crossover(source, lower) sellEntry = ta.crossunder(source, upper) if (buyEntry and nextExpectedIsLong == true) strategy.entry("BBandLE", strategy.long, comment="BBandLE") nextExpectedIsLong := false if(nz(strategy.position_size[1], 0) < 0) // new position detected lastTradePrice := close stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) else strategy.cancel("BBandLE") if (sellEntry and nextExpectedIsLong == false) strategy.entry("BBandSE", strategy.short, comment="BBandSE") nextExpectedIsLong := true if(nz(strategy.position_size[1], 0) > 0) // new position detected lastTradePrice := close stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) else strategy.cancel("BBandSE") strategy.close("BBandLE", close < stopLossLow) strategy.close("BBandSE", close > stopLossHigh) // if(nz(strategy.position_size[1], 0) < 0 and close > stopLossHigh) // strategy.entry("BBandLE", strategy.long, comment="BBandLE") // lastTradePrice := close // stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) // stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) // if(nz(strategy.position_size[1], 0) > 0 and close < stopLossLow) // strategy.exit("BBandSE", strategy.short, comment="BBandSE") // lastTradePrice := close // stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) // stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) plot(source, "close", color.blue) plot(lower, "lower", color.red) plot(upper, "upper", color.red) plot(stopLossLow, "StopLossLow", color.black) plot(stopLossHigh, "StopLossHigh", color.black) plot(lastTradePrice, "lastTradePrice", color.green) plotchar(strategy.position_size > 0, char="-", size=size.tiny, location=location.bottom, color=color.green) plotchar(strategy.position_size < 0, char="-", size=size.tiny, location=location.bottom, color=color.red)