La stratégie de négociation de l'oscillateur de dynamique Bollinger Band RSI

Auteur:ChaoZhang est là., Date: 18 septembre 2023 à 14h07
Les étiquettes:

Résumé

Cette stratégie combine les bandes de Bollinger et l'indicateur d'indice de force relative (RSI) pour prédire la volatilité des prix et déterminer les points d'entrée optimaux. La logique est simple - nous regardons les prix de clôture qui touchent la bande inférieure de Bollinger, après quoi il y a deux scénarios possibles: soit le prix rebondit de la bande inférieure de Bollinger, soit il continue à baisser. Pour confirmer le mouvement des prix, nous utilisons un deuxième indicateur, le RSI, pour enquêter davantage sur la tendance. Par exemple, si le prix atteint la bande inférieure de Bollinger mais que la valeur du RSI n'est pas survendue, nous pouvons conclure que le prix continuera à baisser. Si la valeur du RSI est survendue, nous pouvons utiliser cette zone comme point d'entrée.

Un stop loss est nécessaire pour éviter de perdre trop de capital si l'indice de volatilité s'attarde trop longtemps sur le territoire de la survente.

La meilleure zone de prise de profit est lorsque le prix rebondit au-dessus de la bande moyenne/haute de Bollinger ou lorsque l'indice de volatilité atteint des niveaux de surachat, selon la première des deux.

Une longue entrée:

RSI < 30 et prix de clôture < bande inférieure de Bollinger

Sortie longue:

RSI > 70

La logique de la stratégie

La stratégie calcule d'abord l'indicateur RSI et définit des limites supérieures/inférieures pour déterminer les niveaux de surachat/survente. Elle calcule ensuite les bandes moyennes, supérieures et inférieures de Bollinger. Lorsque le prix de clôture touche la bande inférieure et que le RSI est inférieur à 30, passez long. Lorsque le RSI est supérieur à 70, fermez la position.

Lorsque vous entrez long, définissez des points de stop loss et de take profit.

Cela nous permet d'acheter à la bande inférieure de Bollinger lorsque le RSI est bas et de vendre lorsque le RSI est élevé, profitant de l'inversion.

Analyse des avantages

  • Les bandes de Bollinger déterminent avec précision les points de renversement
  • RSI filtre les fausses fuites, assurant une entrée fiable
  • Gérer efficacement les risques commerciaux
  • Des tests antérieurs approfondis et une optimisation des paramètres assurent une rentabilité stable

Analyse des risques

  • Les bandes de Bollinger ne prédisent pas parfaitement les renversements, certains échecs se produisent
  • Le RSI peut aussi donner de faux signaux
  • Le stop loss trop proche ne peut pas maintenir la position, trop lâche augmente le risque

Les risques peuvent être atténués en ajustant les paramètres de Bollinger, en utilisant d'autres indicateurs et en élargissant le stop loss de manière appropriée.

Directions d'optimisation

  • Considérez la combinaison avec d'autres indicateurs tels que KD, MACD pour filtrer les entrées
  • Réglage dynamique des pourcentages stop loss/take profit
  • Optimiser les paramètres de Bollinger
  • Test de robustesse sur différents produits

Conclusion

Le profil risque/rendement global de cette stratégie est équilibré et les résultats des backtests sont bons. Des améliorations supplémentaires peuvent être apportées grâce à l'optimisation des paramètres et à l'amélioration des indicateurs.

Je ne sais pas.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy(title="Bollinger Band with RSI", shorttitle="BB&RSI", format=format.price, precision=2, pyramiding=50, initial_capital=10000, calc_on_order_fills=false, calc_on_every_tick=true, default_qty_type=strategy.cash, default_qty_value=1000, currency="USD")
len = input(14, minval=1, title="Length")
src = input(close, "Source", type = input.source)
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, "RSI", color=#8E1599)
band1 = hline(70, "Upper Band", color=#C0C0C0)
band0 = hline(30, "Lower Band", color=#C0C0C0)
fill(band1, band0, color=#9915FF, transp=90, title="Background")

length_bb = input(20,title="BB Length", minval=1)
mult = input(2.0, minval=0.001, maxval=50, title="BB StdDev")
basis = sma(src, length_bb)
dev = mult * stdev(src, length_bb)
upper = basis + dev
lower = basis - dev
offset = input(0, "BB Offset", type = input.integer, minval = -500, maxval = 500)


Plot_PnL = input(title="Plot Cummulative PnL", type=input.bool, defval=false)
Plot_Pos = input(title="Plot Current Position Size", type=input.bool, defval=false)

long_tp_inp = input(10, title='Long Take Profit %', step=0.1)/100
long_sl_inp = input(25, title='Long Stop Loss %', step=0.1)/100
// Take profit/stop loss
long_take_level = strategy.position_avg_price * (1 + long_tp_inp)
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)

entry_long = rsi < 30 and src < lower
exit_long = rsi > 70

plotshape(entry_long, style=shape.labelup, color=color.green,  location=location.bottom, text="L", textcolor=color.white, title="LONG_ORDER")
plotshape(exit_long, style=shape.labeldown, color=color.red,  location=location.top, text="S", textcolor=color.white, title="SHORT_ORDER")

strategy.entry("Long",true,when=entry_long)    
strategy.exit("TP/SL","Long", limit=long_take_level, stop=long_stop_level)
strategy.close("Long", when=exit_long, comment="Exit")
plot(Plot_PnL ? strategy.equity-strategy.initial_capital : na, title="PnL", color=color.red)
plot(Plot_Pos ? strategy.position_size : na, title="open_position", color=color.fuchsia)


Plus de