Strategi Perdagangan Bollinger Band Multi-Filter

Penulis:ChaoZhang, Tanggal: 2024-01-17 15:12:57
Tag:

img

Gambaran umum

Multi-Filter Bollinger Band Trading Strategy adalah strategi perdagangan kuantitatif yang menggabungkan indikator Bollinger Band, indikator moving average, indikator RSI dan fitur grafis K-line untuk skrining multi-kondisi untuk menghasilkan sinyal perdagangan ketika kondisi terpenuhi.

Prinsip Strategi

Perhitungan Indikator

Strategi ini terutama menggunakan tiga indikator: Bollinger Bands, moving average dan RSI. Di antara mereka, rel tengah Bollinger Bands adalah rata-rata pergerakan harga sederhana n hari, dan rel atas dan bawah adalah rel tengah +2 standar deviasi dan rel tengah -2 standar deviasi masing-masing. Indikator RSI adalah nilai antara 0 dan 100 yang dihitung berdasarkan kisaran naik / turun selama periode waktu tertentu.

Sinyal Trading

Strategi menghasilkan sinyal perdagangan melalui tiga kondisi utama berikut:

(1) Bollinger lower-band breakout & K-line body contradiction. Ketika harga penutupan menembus band bawah ke atas dan warna K-line body bertentangan dengan arah tren saat ini, pergi panjang.

(2) Bollinger upper-band breakout & K-line body contradiction Ketika harga penutupan menembus band atas ke bawah dan warna tubuh K-line bertentangan dengan arah tren saat ini, pergi short.

(3) K-line body reversal Jika arah posisi konsisten dengan K-line body color reversal, tutup posisi.

Selain itu, strategi ini juga menetapkan filter rata-rata bergerak, filter bodi garis K, filter RSI dan kondisi tambahan lainnya untuk mengontrol masuknya secara ketat.

Analisis Keuntungan

  • Pengendalian kondisi yang ketat dapat mengurangi risiko pecah palsu
  • Metode pelacakan tren mengurangi frekuensi perdagangan
  • Indikator RSI membantu menghindari perangkap pembalikan

Analisis Risiko

  • Pengaturan parameter Bollinger yang tidak benar dapat menghasilkan sedikit sinyal
  • Kegagalan melarikan diri dapat menyebabkan kerugian yang lebih besar
  • Frekuensi perdagangan yang lebih rendah mungkin kehilangan beberapa peluang perdagangan

Risiko dapat dikurangi dengan menyesuaikan parameter Bollinger dan mengontrol stop secara ketat.

Arahan Optimasi

  • Uji kinerja strategi di bawah parameter yang berbeda untuk menemukan parameter optimal
  • Tambahkan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara otomatis
  • Tambahkan lebih banyak faktor dan filter untuk meningkatkan stabilitas strategi

Ringkasan

Secara keseluruhan, strategi ini adalah strategi trend berikut jangka menengah hingga panjang yang khas. Dengan skrining multi-kondisi dan mengontrol waktu masuk dan keluar dengan ketat dengan pendekatan perdagangan tren, dapat mengurangi perdagangan yang tidak perlu dan menangkap tren pasar jangka menengah hingga panjang. Masih ada ruang besar untuk mengoptimalkan strategi ini dengan menyesuaikan parameter, menambahkan lebih banyak alat bantu dan sebagainya, untuk lebih meningkatkan stabilitas dan profitabilitas strategi.


/*backtest
start: 2023-12-17 00:00:00
end: 2024-01-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy("Noro's Bollinger Strategy v1.4", shorttitle = "Bollinger str 1.4", overlay = true )

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")

length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length")
mult = input(1, defval = 1, minval = 0.001, maxval = 50, title = "Bollinger Mult")
source = input(ohlc4, defval = ohlc4, title = "Bollinger Source")

usebf = input(true, defval = true, title = "Use body-filter")
usecf = input(true, defval = true, title = "Use color-filter")
userf = input(true, defval = true, title = "Use RSI-filter")

fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
showbands = input(true, defval = true, title = "Show Bollinger Bands")

//Bollinger Bands
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev

//Lines
col = showbands ? black : na 
plot(upper, linewidth = 1, color = col)
plot(basis, linewidth = 1, color = col)
plot(lower, linewidth = 1, color = col)

//Body filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 2 or usebf == false

//Color filter
bar = close > open ? 1 : close < open ? -1 : 0 
gb = bar == 1 or usecf == false
rb = bar == -1 or usecf == false

//RSI Filter
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
rsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
ursi = rsi > 70 or userf == false
drsi = rsi < 30 or userf == false

//Signals
up = close <= lower and rb and body and drsi and (close < strategy.position_avg_price or strategy.position_size == 0)
dn = close >= upper and gb and body and ursi and (close > strategy.position_avg_price or strategy.position_size == 0)
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
if  exit
    strategy.close_all()

Lebih banyak