Il s'agit d'une stratégie de trading qui utilise des bandes de Bollinger.
La stratégie calcule la bande supérieure, la bande moyenne et la bande inférieure des bandes de Bollinger pour déterminer si le prix actuel se situe dans la plage volatile et donc prendre des décisions sur l'ouverture ou la fermeture des positions. Lorsque le prix approche la bande supérieure, il est considéré comme le point extrême pour les longs et la stratégie choisit de fermer les positions longues. Lorsque le prix tombe près de la bande inférieure, il est considéré comme le point extrême pour les shorts et la stratégie choisit d'ouvrir des positions longues.
En outre, la stratégie introduit également des facteurs d'inversion de tendance. S'il y a un signal d'inversion, il déclenchera également les décisions d'achat ou de vente correspondantes. Plus précisément, la logique de la stratégie est la suivante:
En utilisant les caractéristiques des bandes de Bollinger et en combinant les facteurs de tendance et d'inversion, la stratégie tente d'attraper des points d'inversion lorsque la volatilité augmente.
Cette stratégie présente les avantages suivants par rapport aux stratégies de moyenne mobile ordinaires:
En général, cette stratégie combine relativement bien les bandes de Bollinger et les barres de prix. Elle se négocie à des points d'inversion raisonnables pour assurer un certain niveau de bénéfices tout en contrôlant les risques.
Toutefois, cette stratégie présente encore certains risques:
En conséquence, les optimisations futures peuvent se concentrer sur:
En conclusion, il s'agit d'un modèle de stratégie de trading typique de Bollinger Bands. Il évite les transactions inefficaces excessives courantes pour l'utilisation de Bollinger Bands seuls en introduisant un jugement d'inversion de tendance pour filtrer les signaux, ce qui peut théoriquement conduire à de bonnes performances de stratégie. Mais les paramètres et le filtrage des signaux ont encore besoin d'une optimisation et d'une amélioration supplémentaires pour la robustesse et pour réduire les erreurs de jugement.
/*backtest start: 2023-12-18 00:00:00 end: 2024-01-17 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy("Noro's Bollinger Strategy v1.2", shorttitle = "Bollinger str 1.2", overlay = true ) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length") mult = input(2.0, defval = 2.0, minval = 0.001, maxval = 50, title = "Bollinger Mult") source = input(ohlc4, defval = ohlc4, title = "Bollinger Source") uset = input(true, defval = true, title = "Use trend entry") usect = input(true, defval = true, title = "Use counter-trend entry") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") showbands = input(true, defval = true, title = "Show Bollinger Bands") //Bollinger Bands basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev //Lines col = showbands ? black : na plot(upper, linewidth = 1, color = col) plot(basis, linewidth = 1, color = col) plot(lower, linewidth = 1, color = col) //Body body = abs(close - open) abody = ema(body, 30) //Signals bar = close > open ? 1 : close < open ? -1 : 0 up1 = bar == -1 and close >= basis and close < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset dn1 = bar == 1 and close <= basis and close > lower and (close > strategy.position_avg_price or strategy.position_size == 0) and uset up2 = close <= lower and usect dn2 = close >= upper and usect exit = (strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open) and body > abody / 2 //Trading if up1 or up2 strategy.entry("Long", strategy.long, needlong == false ? 0 : na) if dn1 or dn2 strategy.entry("Short", strategy.short, needshort == false ? 0 : na) if exit strategy.close_all()