Stratégie de négociation d'oscillation des bandes de Bollinger

Auteur:ChaoZhang est là., Date: le 21 février 2024 à 14h39
Les étiquettes:

img

Résumé

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.

La logique de la stratégie

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.

Les avantages

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.

Les risques

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.

Optimisation

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.

Conclusion

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)))


Plus de