Strategi Breakout Bollinger Bands Multi-Timeframe yang merangkumi RSI

Penulis:ChaoZhang, Tarikh: 2024-02-21 13:59:31
Tag:

img

Ringkasan

Strategi ini menggabungkan Bollinger Bands, penunjuk RSI dan analisis pelbagai jangka masa untuk menangkap arah trend jangka menengah hingga panjang. Ia mengenal pasti titik pembalikan trend melalui pecah Bollinger Bands digabungkan dengan isyarat overbought / oversold RSI untuk kemasukan berisiko rendah. Sementara itu, jangka masa yang lebih tinggi digunakan untuk menapis pasaran yang berbeza dan mengelakkan terperangkap.

Logika Strategi

  1. Band Bollinger digunakan untuk menentukan harga. Band tengah adalah Purata Bergerak harga penutupan selama N hari. Band atas dan bawah diletakkan pada jarak satu penyimpangan standard di kedua-dua sisi band tengah. Menjatuhkan di atas band atas menandakan bullishness manakala memecahkan di bawah band bawah menandakan bearishness.

  2. Menggabungkan penunjuk RSI untuk mengenal pasti tahap overbought / oversold. RSI di atas 70 menunjukkan keadaan overbought manakala di bawah 30 menunjukkan keadaan oversold. Penembusan RSI ke atas 70 mengesahkan kelemahan momentum menaik. Penembusan RSI ke bawah 30 mengesahkan kelemahan momentum menurun.

  3. Menggunakan jangka masa yang lebih tinggi untuk menapis penyebaran palsu. Apabila isyarat penyebaran muncul pada jangka masa harian, ia memerlukan pengesahan tambahan dari jangka masa 4 jam atau lebih tinggi untuk mengelakkan terperangkap.

Kelebihan

  1. Integrasi pelbagai penunjuk meningkatkan kestabilan strategi dan keuntungan.

  2. RSI termasuk mengurangkan kerugian daripada pecah palsu.

  3. Analisis pelbagai jangka masa dengan berkesan menapis pasaran yang berbeza dan mengelakkan terperangkap.

  4. Penentuan isyarat penembusan yang dioptimumkan (penembusan lebih daripada 3 bar berturut-turut) memastikan kematangan trend yang mencukupi sebelum kemasukan.

  5. Indikator Vortex menentukan arah trend yang baru bermula pada peringkat awal.

Risiko

  1. Parameter Bollinger Bands yang tidak mencukupi membawa kepada isyarat overbought / oversold yang salah.

  2. Nilai parameter RSI yang munasabah mesti ditentukan secara berasingan untuk produk yang berbeza.

  3. Isyarat pecah mungkin menjadi pecah palsu. Pertimbangkan untuk meluaskan stop loss.

  4. Mengekalkan margin stop loss yang mencukupi, contohnya 3 kali ATR.

Peluang Peningkatan

  1. Menggunakan algoritma pembelajaran mesin untuk menyesuaikan parameter automatik untuk Bollinger Bands dan RSI.

  2. Mengoptimumkan tahap stop loss berdasarkan metrik turun naik.

  3. Memasukkan modul ukuran kedudukan untuk mengkalibrasi pendedahan berdasarkan keadaan pasaran yang berubah.

  4. Mengehadkan kerugian maksimum setiap perdagangan berdasarkan prinsip pengurusan wang.

  5. Mengkaji kestabilan isyarat merentasi sesi dagangan yang berbeza.

Kesimpulan

Strategi ini mengkaji secara komprehensif penentuan trend, keadaan overbought / oversold dan pelbagai jangka masa untuk mengawal risiko sambil mencari masa kemasukan yang optimum untuk menangkap trend jangka menengah hingga panjang yang berkualiti tinggi untuk profil ganjaran risiko yang menarik. Penambahbaikan lanjut boleh diterokai melalui pengoptimuman parameter, mekanisme berhenti kerugian dll untuk mencapai prestasi pelaburan yang lebih baik.


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

Lebih lanjut