Stratégie basée sur les bandes de Bollinger, le RSI et la moyenne mobile

Auteur:ChaoZhang est là., Date: 2024-02-02 11h35 et 17h
Les étiquettes:

img

Résumé

Cette stratégie intègre les bandes de Bollinger, l'indice de force relative (RSI) et la moyenne mobile (MA) pour identifier les points d'entrée et de sortie potentiels sur le marché.

La logique de la stratégie

La stratégie utilise deux bandes de Bollinger avec des paramètres différents pour créer des canaux de prix. Les paramètres par défaut sont une longueur de 20 périodes et un écart type de 2.

L'indicateur RSI mesure la force de la dynamique des prix. Ses valeurs sont utilisées pour déterminer si des conditions de surachat ou de survente existent.

Une moyenne mobile sur 50 périodes est incorporée pour identifier la direction générale de la tendance. Lorsque le prix est au-dessus de la MA, il suggère une tendance haussière. Lorsque le prix est en dessous de la MA, il suggère une tendance à la baisse.

Les conditions d'entrée pour les transactions longues sont lorsque le RSI dépasse le niveau de surachat et que les bandes de Bollinger ne se contractent pas.

Les conditions de sortie pour les transactions longues sont lorsque l'indice de résistance chute en dessous du niveau de surachat ou lorsque le prix se ferme en dessous de l'AM de 50 périodes. Pour les transactions courtes, c'est lorsque l'indice de résistance dépasse le niveau de survente ou lorsque le prix se ferme au-dessus de l'AM de 50 périodes.

Les avantages

  1. La combinaison des bandes de Bollinger, du RSI et du MA évite de générer de faux signaux par validation croisée des signaux.

  2. Les bandes de Bollinger identifient les hauts / bas locaux et confirment les ruptures.

  3. Les paramètres optimisés des bandes de Bollinger utilisant deux écarts-types dépeignent plus précisément les canaux de prix.

Les risques

  1. Les bandes de Bollinger peuvent générer de faux signaux lors de la contraction.

  2. L'indice RSI et l'indice MA peuvent générer des signaux erronés lors de marchés à fourchette.

  3. Les écarts de prix ne peuvent pas être gérés efficacement.

Des possibilités d'amélioration

  1. Optimiser les paramètres des bandes de Bollinger et du RSI pour différents produits et délais.

  2. Ajoutez des ordres stop loss qui s'activent automatiquement lorsque les prix dépassent le niveau stop.

  3. Ajoutez un filtre de tendance comme ADX pour éviter les transactions inefficaces lors des marchés variables.

  4. Intégrer avec le système de trading automatisé pour exécuter les signaux automatiquement sans intervention manuelle.

Conclusion

Cette stratégie combine les forces des bandes de Bollinger, RSI et MA avec des paramètres optimisés pour améliorer la précision du signal. Elle peut générer automatiquement des alertes de trading pour l'exécution. Les principaux risques proviennent de faux signaux lors de marchés variables. L'ajout d'un filtre de tendance peut réduire les transactions inefficaces. Dans l'ensemble, en utilisant l'optimisation des paramètres et l'intégration de plusieurs indicateurs, cette stratégie améliore la qualité du signal et vaut la peine d'être validée sur les marchés en direct pour une utilisation.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bollinger Bands, RSI, and MA Strategy", overlay=true)

// Define input variables
b_len = input(20, title="BB Length")
bb_mult = input(2.0, title="BB Standard Deviation")
bb_deviation1 = input(1.0, title="BB Deviation 1")
rsi_len = input(14, title="RSI Length")
overbought = input(70, title="Overbought RSI Level")
oversold = input(30, title="Oversold RSI Level")
ma_len = input(50, title="MA Length")
stop_loss_percent = input(1.0, title="Stop Loss Percentage")
source = input(close, title="Source")

// Calculate Bollinger Bands
bb_upper = ta.sma(source, b_len) + bb_mult * ta.stdev(source, b_len)
bb_lower = ta.sma(source, b_len) - bb_mult * ta.stdev(source, b_len)
bb_upper1 = ta.sma(source, b_len) + bb_deviation1 * ta.stdev(source, b_len)
bb_lower1 = ta.sma(source, b_len) - bb_deviation1 * ta.stdev(source, b_len)

// Calculate RSI
rsi = ta.rsi(source, rsi_len)

// Calculate Moving Average
ma = ta.sma(source, ma_len)

// Determine if Bollinger Bands are contracting
bb_contracting = ta.stdev(source, b_len) < ta.stdev(source, b_len)[1]

// Entry conditions
enterLong = rsi > overbought and not bb_contracting
enterShort = rsi < oversold and not bb_contracting

// Exit conditions
exitLong = close < ma
exitShort = close > ma

// Exit trades and generate alerts
if strategy.position_size > 0 and exitLong
    strategy.close("Long") // Exit the long trade
    alert("Long Exit", alert.freq_once_per_bar_close)
if strategy.position_size < 0 and exitShort
    strategy.close("Short") // Exit the short trade
    alert("Short Exit", alert.freq_once_per_bar_close)

// Strategy orders
if enterLong
    strategy.entry("Long", strategy.long)
if enterShort
    strategy.entry("Short", strategy.short)
if exitLong
    strategy.close("Long")
if exitShort
    strategy.close("Short")

// Plotting Bollinger Bands
plot(bb_upper, color=color.blue, title="BB Upper 2")
plot(bb_lower, color=color.blue, title="BB Lower 2")
plot(bb_upper1, color=color.red, title="BB Upper 1")
plot(bb_lower1, color=color.red, title="BB Lower 1")

// Plotting RSI
plot(rsi, color=color.orange, title="RSI")

// Plotting Moving Average
plot(ma, color=color.green, title="Moving Average")


Plus de