Strategi Pengesanan Trend Bollinger Band

Penulis:ChaoZhang, Tarikh: 2023-12-22 14:54:20
Tag:

img

Ringkasan

Strategi ini menggunakan gabungan Bollinger Bands dan purata bergerak untuk pengenalan trend dan kemasukan. Ia memanfaatkan keupayaan pengenalan trend Bollinger Bands dan kesan penapisan purata bergerak untuk mengenal pasti arah trend pasaran dengan berkesan untuk kemasukan ke pasaran trend.

Logika Strategi

  1. Mengira Saluran Bollinger untuk menentukan arah trend pasaran

    • Gunakan tertinggi tertinggi dan terendah rendah untuk mengira jalur saluran
    • Band tengah saluran adalah purata tinggi dan rendah
    • Menentukan arah trend berdasarkan lokasi harga dalam saluran
  2. Mengira saiz badan lilin bullish untuk isyarat stop loss dan pembalikan

    • Badan lilin bullish adalah nilai mutlak penutupan tolak terbuka
    • Mengira purata tempoh N badan lilin, bandingkan dengan badan semasa untuk kehilangan berhenti dan pembalikan
  3. Masukkan perdagangan ke arah saluran apabila pengesahan trend

    • Pendaftaran panjang berhampiran jalur bawah dalam trend menaik
    • Pendaftaran pendek berhampiran band atas dalam trend penurunan
  4. Menggunakan purata bergerak untuk penapisan untuk mengelakkan isyarat palsu

    • Mengira purata bergerak tempoh N harga penutupan
    • Menghasilkan isyarat hanya pada kejayaan purata bergerak

Kelebihan

  1. Pengesanan trend sistematik yang menggabungkan jalur dan purata bergerak

    Band dengan jelas mengenal pasti saluran harga dan arah trend. purata bergerak menapis bunyi bising. Gabungan membolehkan pengesanan trend yang kukuh yang kebal terhadap kejutan pasaran sporadik.

  2. Kawalan risiko yang berkesan melalui kehilangan berhenti badan lilin

    Membandingkan badan lilin semasa dengan purata sejarah mengesan pembalikan trend untuk stop loss dan pengurangan kedudukan.

  3. Peraturan kemasukan kuantitatif dan hentian kerugian yang jelas

    Syarat purata bergerak dan arah saluran yang ketat untuk kemasukan. peraturan stop loss saiz badan lilin. menjadikan kemasukan dan keluar keseluruhan sistem jelas dan sistematik.

Analisis Risiko

  1. Kemungkinan kerugian di pasaran terhad julat

    Harga yang berayun di sekitar band boleh menyebabkan kerugian kecil berulang. saiz kedudukan harus dikurangkan untuk mengehadkan kesan kerugian.

  2. Stop loss awal dalam trend yang kuat

    Pengubahsuaian jangka pendek boleh mencetuskan hentian dalam trend menaik/menurun yang kuat. Lebar hentian kerugian harus santai untuk menaiki trend.

  3. Isyarat yang salah daripada penyesuaian parameter yang buruk

    Parameter purata bergerak dan jalur yang kurang optimum boleh menyebabkan isyarat palsu. Parameter harus dioptimumkan untuk kebolehpercayaan isyarat.

Peluang Peningkatan

  1. Mengoptimumkan tempoh carian purata bergerak

    Sesuaikan tempoh untuk mengurangkan kelancaran untuk pengesanan perubahan trend yang lebih cepat.

  2. Uji mekanisme stop loss alternatif

    Menilai hentian belakang, hentian ATR dan lain-lain untuk mencari sistem yang optimum.

  3. Menggabungkan model pembelajaran mesin

    Latih model pada data sejarah yang luas untuk meningkatkan trend dan ramalan isyarat.

Kesimpulan

Strategi ini menyeimbangkan pengenalan trend dan kawalan risiko menggunakan Bollinger Bands dan purata bergerak. Pendekatan kuantitatif sistematik dengan peraturan kemasukan / keluar yang jelas membolehkan penangkapan ganjaran yang berkesan dengan risiko terkawal. Penambahbaikan lanjut melalui penyesuaian parameter dan integrasi pembelajaran mesin akan meningkatkan ketahanan.


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


//@version=2
strategy("Noro's Bands Scalper Strategy v1.3", shorttitle = "Scalper str 1.3", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needct = input(false, defval = false, title = "Counter-trend entry")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd1 = center + distsma / 2
ld1 = center - distsma / 2

//Trend
trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30)
candle = high - low

//Engulfing
min = min(open, close)
max = max(open, close)
bar = close > open ? 1 : close < open ? -1 : 0
upeng = bar == 1 and bar[1] == -1 and min >= min[1] and max <= max[1] ? 1 : 0
dneng = bar == -1 and bar[1] == 1 and min >= min[1] and max <= max[1] ? 1 : 0

//Signals
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and close < open)) ? 1 : 0
dn7 = trend == 1 and bar == 1 and bar[1] == 1 and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and bar == -1 and bar[1] == -1 and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and close > open)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)

Lebih lanjut