La stratégie de trading d'oscillation des bandes de Bollinger de rupture est une stratégie de trading pour le moment où le marché est dans un état d'oscillation. Cette stratégie utilise l'indicateur des bandes de Bollinger pour juger de l'état d'oscillation du marché et envoie des signaux de trading lorsque le prix touche les rails supérieurs ou inférieurs des bandes de Bollinger.
Cette stratégie est principalement mise en œuvre sur la base de l'indicateur Bollinger Bands. Les bandes de Bollinger se composent d'un rail moyen, d'un rail supérieur et d'un rail inférieur. Lorsque le prix s'approche du rail supérieur ou inférieur, il représente un optimisme ou un pessimisme excessif sur le marché, ce qui signifie une probabilité relativement élevée d'inversion.
Plus précisément, cette stratégie utilise d'abord l'indicateur DMI pour déterminer si le marché est dans un état d'oscillation. Lorsque la différence entre +DMI et -DMI est inférieure à 20, le marché est considéré comme s'étendant latéralement. Dans cette condition, allez long lorsque le prix dépasse le rail inférieur et allez court lorsque le prix dépasse le rail supérieur.
Comparée aux stratégies de suivi de tendance, cette stratégie est plus adaptée aux environnements de marché à plage et ne perdra pas d'argent à la poursuite des tendances.
Cette stratégie repose principalement sur les bandes de Bollinger pour déterminer l'oscillation du marché et les conditions de surachat / survente. Lorsque les bandes de Bollinger divergent ou se contractent anormalement, cela peut entraîner de mauvais signaux. De plus, le point de stop loss est proche, donc un seul stop loss pourrait être relativement grand. Il est recommandé d'optimiser la stratégie de stop loss avec la gestion de l'argent.
Nous pouvons envisager de combiner d'autres indicateurs pour filtrer les signaux d'entrée, tels que le RSI et d'autres oscillateurs, afin d'améliorer la précision d'entrée.
En général, cette stratégie est adaptée aux marchés oscillants et peut être utilisée lorsque les stratégies de tendance échouent. Mais il y a encore place à améliorer son efficacité en jugeant les états du marché avec des indicateurs. Nous pouvons encore améliorer cette stratégie par des méthodes telles que des combinaisons multi-indicateurs, la gestion de l'argent, etc. pour la rendre plus stable et rentable.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(shorttitle='Sideways Strategy DMI + Bollinger Bands',title='Sideways Strategy DMI + Bollinger Bands (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1) // Works on ETHUSD 3h, 1h, 2h, 4h //Backtest dates fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12) fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31) fromYear = input(defval = 2021, title = "From Year", type = input.integer, minval = 1970) thruMonth = input(defval = 12, title = "Thru Month", type = input.integer, minval = 1, maxval = 12) thruDay = input(defval = 31, title = "Thru Day", type = input.integer, minval = 1, maxval = 31) thruYear = input(defval = 2022, title = "Thru Year", type = input.integer, minval = 1970) showDate = input(defval = true, title = "Show Date Range", type = input.bool) start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => true [pos_dm, neg_dm, adx] = dmi(14, 14) lengthBB = input(20, minval=1) src = input(close, title="Source") mult = input(2.0, minval=0.001, maxval=50, title="StdDev") basis = sma(src, lengthBB) dev = mult * stdev(src, lengthBB) upper = basis + dev lower = basis - dev offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) sideways = (abs(pos_dm - neg_dm) < 20) //Stop_loss= ((input (3))/100) //Take_profit= ((input (2))/100) //longStopPrice = strategy.position_avg_price * (1 - Stop_loss) //longTakeProfit = strategy.position_avg_price * (1 + Take_profit) //closeLong = close < longStopPrice or close > longTakeProfit or StopRSI //Entry strategy.entry(id="long", long = true, when = sideways and (crossover(close, lower)) and window()) //Exit strategy.close("long", when = (crossunder(close, upper)))