Strategi RSI-Bollinger Band untuk menangkap volatilitas

Penulis:ChaoZhang, Tanggal: 2023-12-01 14:17:55
Tag:

img

Gambaran umum

Strategi Volatility Capture RSI-Bollinger Band adalah strategi perdagangan yang mengintegrasikan konsep Bollinger Bands (BB), Relative Strength Index (RSI) dan Simple Moving Average (SMA) untuk menghasilkan sinyal perdagangan. Keunikan strategi ini adalah bahwa strategi ini menghitung tingkat dinamis antara Bollinger Band atas dan bawah berdasarkan harga penutupan. Fitur unik ini memungkinkan strategi untuk beradaptasi dengan volatilitas pasar dan pergerakan harga.

Pasar kripto dan saham sangat fluktuatif, sehingga cocok untuk strategi menggunakan Bollinger Bands.

Cara Kerjanya

Bollinger Band Dinamis: Strategi ini pertama-tama menghitung Bollinger Band atas dan bawah berdasarkan panjang dan pengganda yang ditentukan pengguna. Kemudian menggunakan Bollinger Band dan harga penutupan untuk menyesuaikan nilai BollingBand saat ini secara dinamis. Akhirnya, menghasilkan sinyal panjang ketika harga melintasi Bolling Band saat ini dan sinyal pendek ketika harga melintasi di bawah.

RSI: Jika pengguna memilih untuk menggunakan RSI untuk sinyal, strategi juga menghitung RSI dan SMA-nya, dan menggunakannya untuk menghasilkan sinyal panjang dan pendek tambahan.

Strategi kemudian memeriksa arah perdagangan yang dipilih dan masuk posisi panjang atau pendek sesuai.

Akhirnya, strategi keluar dari posisi ketika harga penutupan melintasi di bawah/di atas Bolling Band saat ini untuk posisi panjang/pendek masing-masing.

Analisis Keuntungan

Strategi ini menggabungkan kekuatan Bollinger Bands, RSI dan SMA untuk beradaptasi dengan volatilitas pasar, menangkap fluktuasi secara dinamis dan menghasilkan sinyal perdagangan pada tingkat overbought/oversold.

RSI melengkapi sinyal Bollinger, menghindari entri palsu di pasar rentang.

Parameter yang dapat disesuaikan memungkinkan penyesuaian berdasarkan preferensi risiko individu.

Analisis Risiko

Strategi ini didasarkan pada indikator teknis dan tidak dapat mengantisipasi pembalikan utama yang didorong oleh fundamental.

Pengaturan parameter Bollinger yang tidak benar dapat menghasilkan sinyal yang terlalu sering atau terlalu jarang.

Perdagangan dua arah memperbesar risiko, hati-hati dengan kerugian pendek.

Penggunaan stop untuk mengendalikan risiko dianjurkan.

Arahan Optimasi

  1. Tambahkan filter lain seperti MACD ke sinyal filter.

  2. Sertakan strategi stop loss.

  3. Mengoptimalkan Bollinger dan RSI parameter.

  4. Sesuaikan parameter untuk produk dan jangka waktu yang berbeda.

  5. Pertimbangkan live tuning parameter untuk menyesuaikan kondisi aktual.

Ringkasan

Strategi Volatility Capture RSI-Bollinger adalah strategi yang didorong oleh indikator teknis, menggabungkan kekuatan Bollinger Bands, RSI dan SMA dengan menyesuaikan Bollinger Bands secara dinamis untuk menangkap fluktuasi pasar. Strategi ini memungkinkan penyesuaian dan optimalisasi yang tinggi tetapi tidak dapat memprediksi perubahan mendasar. Verifikasi perdagangan riil dan penyesuaian parameter atau menambahkan indikator lain untuk mengurangi risiko bila diperlukan dianjurkan.


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

Lebih banyak