Strategie zur Erfassung der Volatilität des RSI-Bollinger-Band

Schriftsteller:ChaoZhang, Datum: 2023-12-01 14:17:55
Tags:

img

Übersicht

Die Volatility Capture RSI-Bollinger Band Strategie ist eine Handelsstrategie, die die Konzepte von Bollinger Bands (BB), Relative Strength Index (RSI) und Simple Moving Average (SMA) zur Erzeugung von Handelssignalen integriert.

Die Krypto- und Aktienmärkte sind sehr volatil, was sie für eine Strategie mit Bollinger-Bändern geeignet macht.

Wie es funktioniert

Dynamisches Bollinger Band: Die Strategie berechnet zunächst die oberen und unteren Bollinger Bands anhand der vom Benutzer definierten Länge und des Multiplikators. Anschließend verwendet sie die Bollinger Bands und den Schlusskurs, um den aktuellen BollingBand-Wert dynamisch anzupassen. Schließlich erzeugt sie ein langes Signal, wenn der Preis über das aktuelle Bolling Band überschreitet, und ein kurzes Signal, wenn der Preis unterschreitet.

RSI: Wenn sich der Benutzer dafür entscheidet, RSI für Signale zu verwenden, berechnet die Strategie auch den RSI und seinen SMA und verwendet sie, um zusätzliche lange und kurze Signale zu generieren.

Die Strategie überprüft dann die ausgewählte Handelsrichtung und tritt entsprechend in Long- oder Short-Positionen ein.

Schließlich tritt die Strategie aus einer Position aus, wenn der Schlusskurs unter/über die aktuelle Bolling-Bande für Long- bzw. Short-Positionen kreuzt.

Analyse der Vorteile

Die Strategie kombiniert die Stärken von Bollinger Bands, RSI und SMA, um sich an die Marktvolatilität anzupassen, Schwankungen dynamisch zu erfassen und Handelssignale bei überkauften/überverkauften Niveaus zu erzeugen.

Der RSI ergänzt die Bollinger-Signale und vermeidet falsche Eintritte in den Bereich der Märkte.

Anpassbare Parameter ermöglichen eine Anpassung an die individuellen Risikopräferenzen.

Risikoanalyse

Die Strategie stützt sich auf technische Indikatoren und kann keine grundsätzlich bedingten großen Umkehrungen voraussehen.

Bei falschen Bollinger-Parameter-Einstellungen können zu häufige oder zu spärliche Signale erzeugt werden.

Zwei-Wege-Handel vergrößert das Risiko, Vorsicht vor umgekehrten Kurzverlusten.

Es wird empfohlen, Stopps zur Risikokontrolle zu verwenden.

Optimierungsrichtlinien

  1. Fügen Sie andere Filter wie MACD zu Filtersignalen hinzu.

  2. Einbeziehung von Stop-Loss-Strategien.

  3. Optimieren Sie die Bollinger- und RSI-Parameter.

  4. Anpassung der Parameter für verschiedene Produkte und Zeitrahmen.

  5. Betrachten Sie Live-Tuning-Parameter, um die tatsächlichen Bedingungen zu erfüllen.

Zusammenfassung

Die Volatility Capture RSI-Bollinger-Strategie ist eine auf technischen Indikatoren basierende Strategie, die die Stärken von Bollinger Bands, RSI und SMA kombiniert, indem die Bollinger Bands dynamisch angepasst werden, um Marktschwankungen zu erfassen.


/*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.

Mehr