La stratégie RSI-Bollinger Band pour la capture de la volatilité

Auteur:ChaoZhang est là., Date: le 12 janvier 2023 14:17:55
Les étiquettes:

img

Résumé

La stratégie RSI-Bollinger Band de capture de la volatilité est une stratégie de trading qui intègre les concepts de Bollinger Bands (BB), Relative Strength Index (RSI) et Simple Moving Average (SMA) pour générer des signaux de trading.

Le RSI peut aider à identifier les conditions de surachat ou de survente sur ces marchés souvent spéculatifs.

Comment fonctionne- t- il?

Dynamic Bollinger Band: La stratégie calcule d'abord les bandes de Bollinger supérieures et inférieures en fonction de la longueur et du multiplicateur définis par l'utilisateur. Elle utilise ensuite les bandes de Bollinger et le prix de clôture pour ajuster dynamiquement la valeur actuelle de la bande de Bolling. Enfin, elle génère un signal long lorsque le prix franchit la bande de Bolling actuelle et un signal court lorsque le prix franchit le niveau inférieur.

RSI: Si l'utilisateur choisit d'utiliser RSI pour les signaux, la stratégie calcule également le RSI et sa SMA, et les utilise pour générer des signaux longs et courts supplémentaires.

La stratégie vérifie ensuite la direction de trading sélectionnée et entre en positions longues ou courtes en conséquence.

Enfin, la stratégie sort d'une position lorsque le prix de clôture traverse la bande de Bolling actuelle pour les positions longues et courtes respectivement.

Analyse des avantages

La stratégie combine les atouts des bandes de Bollinger, du RSI et du SMA pour s'adapter à la volatilité du marché, capturer dynamiquement les fluctuations et générer des signaux de trading à des niveaux de surachat/survente.

L'indicateur complète les signaux de Bollinger, évitant de fausses entrées sur les marchés de gamme.

Les paramètres personnalisables permettent de régler les risques en fonction des préférences individuelles.

Analyse des risques

La stratégie repose sur des indicateurs techniques et ne peut pas prévoir des retombées majeures fondamentales.

Les paramètres de Bollinger incorrects peuvent générer des signaux trop fréquents ou trop rares.

Les transactions bidirectionnelles augmentent le risque, méfiez-vous des pertes courtes inversées.

Il est recommandé d' utiliser des arrêts pour contrôler le risque.

Directions d'optimisation

  1. Ajoutez d'autres filtres comme le MACD pour filtrer les signaux.

  2. Incorporer des stratégies de stop loss.

  3. Optimiser les paramètres de Bollinger et du RSI.

  4. Ajustez les paramètres pour différents produits et délais.

  5. Considérez les paramètres de réglage en direct pour s'adapter aux conditions réelles.

Résumé

La stratégie RSI-Bollinger de capture de volatilité est une stratégie basée sur des indicateurs techniques, combinant les forces des bandes de Bollinger, RSI et SMA en ajustant dynamiquement les bandes de Bollinger pour capturer les fluctuations du marché.


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PresentTrading

//@version=5
// Define the strategy settings
strategy('Volatility Capture RSI-Bollinger - Strategy [presentTrading]', overlay=true)

// Define the input parameters for the indicator
priceSource  = input.source(title='Source', defval=hlc3, group='presentBollingBand') // The price source to use
lengthParam   = input.int(50, 'lengthParam', minval=1, group='presentBollingBand') // The length of the moving average
multiplier = input.float(2.7183, 'Multiplier', minval=0.1, step=.1, group='presentBollingBand') // The multiplier for the ATR
useRSI = input.bool(true, 'Use RSI for signals', group='presentBollingBand') // Boolean input to decide whether to use RSI for signals
rsiPeriod = input.int(10, 'RSI Period', minval=1, group='presentBollingBand') // The period for the RSI calculation
smaPeriod = input.int(5, 'SMA Period', minval=1, group='presentBollingBand') // The period for the SMA calculation
boughtRange = input.float(55, 'Bought Range Level', minval=1, group='presentBollingBand') // The level for the bought range
soldRange = input.float(50, 'Sold Range Level', minval=1, group='presentBollingBand') // The level for the sold range

// Add a parameter for choosing Long or Short
tradeDirection = input.string("Both", "Trade Direction", options=["Long", "Short", "Both"], group='presentBollingBand') // Dropdown input for trade direction

// Calculate the bollingerBand
barIndex = bar_index // The current bar index
upperBollingerBand = ta.sma(high, lengthParam) + ta.stdev(high, lengthParam) * multiplier // Calculate the upper Bollinger Band
lowerBollingerBand = ta.sma(low, lengthParam) - ta.stdev(low, lengthParam) * multiplier // Calculate the lower Bollinger Band

var float presentBollingBand = na // Initialize the presentBollingBand variable
crossCount = 0 // Initialize the crossCount variable

// Calculate the buy and sell signals
longSignal1 = ta.crossover(priceSource, presentBollingBand) // Calculate the long signal
shortSignal1 = ta.crossunder(priceSource, presentBollingBand) // Calculate the short signal

// Calculate the RSI
rsiValue = ta.rsi(priceSource, rsiPeriod) // Calculate the RSI value
rsiSmaValue = ta.sma(rsiValue, smaPeriod) // Calculate the SMA of the RSI value

// Calculate the buy and sell signals
longSignal2 = rsiSmaValue > boughtRange // Calculate the long signal based on the RSI SMA
shortSignal2 = rsiSmaValue < soldRange // Calculate the short signal based on the RSI SMA

presentBollingBand := na(lowerBollingerBand) or na(upperBollingerBand)?0.0 : close>presentBollingBand?math.max(presentBollingBand,lowerBollingerBand) : close<presentBollingBand?math.min(presentBollingBand,upperBollingerBand) : 0.0


if (tradeDirection == "Long" or tradeDirection == "Both") and longSignal1 and (useRSI ? longSignal2 : true) // Use RSI for signals if useRSI is true
    presentBollingBand := lowerBollingerBand // If the trade direction is "Long" or "Both", and the long signal is true, and either useRSI is false or the long signal based on RSI is true, then assign the lowerBollingerBand to the presentBollingBand.
    strategy.entry("Long", strategy.long) // Enter a long position.

if (tradeDirection == "Short" or tradeDirection == "Both") and shortSignal1 and (useRSI ? shortSignal2 : true) // Use RSI for signals if useRSI is true
    presentBollingBand := upperBollingerBand // If the trade direction is "Short" or "Both", and the short signal is true, and either useRSI is false or the short signal based on RSI is true, then assign the upperBollingerBand to the presentBollingBand.
    strategy.entry("Short", strategy.short) // Enter a short position.

// Exit condition
if (strategy.position_size > 0 and ta.crossunder(close, presentBollingBand)) // If the strategy has a long position and the close price crosses under the presentBollingBand, then close the long position.
    strategy.close("Long")
if (strategy.position_size < 0 and ta.crossover(close, presentBollingBand)) // If the strategy has a short position and the close price crosses over the presentBollingBand, then close the short position.
    strategy.close("Short")

//~~ Plot
plot(presentBollingBand,"presentBollingBand", color=color.blue) // Plot the presentBollingBand on the chart.

Plus de