Stratégie de rupture des bandes de Bollinger sur plusieurs périodes intégrant le RSI

Auteur:ChaoZhang est là., Date: le 21 février 2024 13:59:31
Les étiquettes:

img

Résumé

Cette stratégie intègre les bandes de Bollinger, l'indicateur RSI et l'analyse de plusieurs délais pour capturer la direction des tendances à moyen et long terme. Elle identifie les points d'inversion de tendance à travers les ruptures de bandes de Bollinger combinées avec des signaux de surachat / survente du RSI pour une entrée à faible risque. Pendant ce temps, des délais plus longs sont appliqués pour filtrer les marchés variés et éviter d'être piégés.

La logique de la stratégie

  1. Appliquez des bandes de Bollinger pour déterminer les écarts de prix. La bande du milieu est la moyenne mobile du prix de clôture sur N jours. Les bandes supérieure et inférieure sont placées à une distance d'un écart type de chaque côté de la bande du milieu.

  2. Incorporer l'indicateur RSI pour identifier les niveaux de surachat/survente. RSI supérieur à 70 suggère des conditions de surachat tandis que inférieur à 30 suggère des conditions de survente. Une rupture à la hausse au-dessus de 70 confirme l'affaiblissement de l'élan haussier. Une rupture à la baisse au-dessous de 30 confirme l'affaiblissement de l'élan à la baisse.

  3. Utilisez des délais plus longs pour filtrer les fausses fuites. Lorsqu'un signal de fuite apparaît sur le calendrier quotidien, il nécessite une confirmation supplémentaire des délais de 4 heures ou plus pour éviter d'être piégé.

Les avantages

  1. L'intégration de plusieurs indicateurs améliore la stabilité et la rentabilité de la stratégie.

  2. L'inclusion du RSI atténue les pertes liées aux fausses ruptures.

  3. L'analyse multi-temporelle filtre efficacement les différents marchés et empêche de se retrouver pris au piège.

  4. La détermination optimisée du signal de rupture (ruptures sur 3 barres consécutives) garantit une maturité de tendance suffisante avant les entrées.

  5. L'indicateur de vortex détermine très tôt la direction de la tendance naissante.

Les risques

  1. Une paramétrisation insuffisante des bandes de Bollinger conduit à des signaux erronés de surachat/survente.

  2. Les valeurs raisonnables des paramètres RSI doivent être déterminées séparément pour les différents produits.

  3. Les signaux de rupture peuvent s'avérer être de fausses ruptures.

  4. Maintenir une marge de stop loss suffisante, par exemple 3 fois ATR.

Des possibilités d'amélioration

  1. Appliquer des algorithmes d'apprentissage automatique pour régler automatiquement les paramètres des bandes de Bollinger et du RSI.

  2. Optimiser les niveaux de stop loss en fonction des indicateurs de volatilité.

  3. Incorporer un module de dimensionnement des positions pour calibrer les expositions en fonction de l'évolution des conditions du marché.

  4. Limiter les pertes maximales par transaction sur la base des principes de gestion de l'argent.

  5. Évaluer la stabilité du signal à travers les différentes sessions de négociation.

Conclusion

Cette stratégie examine de manière exhaustive la détermination des tendances, les conditions de surachat/survente et plusieurs délais pour contrôler les risques tout en recherchant un moment d'entrée optimal pour capturer des tendances à moyen et long terme de haute qualité pour des profils de risque-rendement attrayants.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Noway0utstorm
//@version=5
strategy(title='Vortex0.71.3 + bb 3bar breakout + rsi - close hit upper or lower', shorttitle='truongphuthinh', format=format.price, precision=4,overlay = true)

length = input(20, title="Length")
mult = input(2.0, title="Multiplier")
source = close

basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)

upperBand = basis + dev
lowerBand = basis - dev

isClosedBar = ta.change(time("15"))

var bool closeAboveUpperBand = false
var bool closeBelowLowerBand = false


// Vortex Indicator Settings
period_ = input.int(14, title='Period', minval=2)

VMP = math.sum(math.abs(high - low[1]), period_)
VMM = math.sum(math.abs(low - high[1]), period_)
STR = math.sum(ta.atr(1), period_)
VIP = VMP / STR
VIM = VMM / STR

//
lengthrsi = input(14, title="RSI Length")
overboughtLevel = input(70, title="Overbought Level")
oversoldLevel = input(30, title="Oversold Level")

sourcersi = close
rsiValue = ta.rsi(sourcersi, lengthrsi)

shouldShort = rsiValue > overboughtLevel
shouldLong = rsiValue < oversoldLevel




if bool(isClosedBar[1]) and bool(isClosedBar[2]) and bool(isClosedBar[3])

    if close[1] > upperBand[1] and close[2] > upperBand[2] and close[3] > upperBand[3] and VIP > 1.25 and VIM < 0.7 and rsiValue > overboughtLevel
        strategy.entry("Short", strategy.short)
        closeAboveUpperBand := false  // Reset the condition when entering a new Short position
    if close[1] < lowerBand[1] and close[2] < lowerBand[2] and close[3] < lowerBand[3] and VIP < 0.7 and VIM > 1.25 and rsiValue < oversoldLevel
        strategy.entry("Long", strategy.long)
        closeBelowLowerBand := false  // Reset the condition when entering a new Long position



if strategy.position_size > 0  // Check if there is an open Long position
    closeAboveUpperBand := close > upperBand  // Update the condition based on close price
    if closeAboveUpperBand
        strategy.close("Long",disable_alert=true)  // Close the Long position if close price is above upper band

if strategy.position_size < 0  // Check if there is an open Short position
    closeBelowLowerBand := close < lowerBand  // Update the condition based on close price
    if closeBelowLowerBand
        strategy.close("Short",disable_alert=true)  // Close the Short position if close price is below lower band

// Plots
plot(basis, color=color.orange, title="Basis")
p1 = plot(upperBand, color=color.blue, title="Upper Band")
p2 = plot(lowerBand, color=color.blue, title="Lower Band")
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

Plus de