Strategi Pelacakan Tren Rata-rata Bergerak Berganda Bollinger Band

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

img

Gambaran umum

Strategi ini menggunakan kombinasi Bollinger Bands dan moving averages untuk identifikasi dan entri tren.

Logika Strategi

  1. Menghitung Bollinger Channel untuk menentukan arah tren pasar

    • Gunakan tertinggi tertinggi dan terendah rendah untuk menghitung band saluran
    • Saluran band tengah adalah rata-rata tinggi dan rendah
    • Menentukan arah tren berdasarkan lokasi harga dalam saluran
  2. Menghitung ukuran tubuh lilin bullish untuk stop loss dan sinyal pembalikan

    • Badan lilin bullish adalah nilai mutlak dari tutup dikurangi terbuka
    • Hitung rata-rata periode N dari tubuh lilin, bandingkan dengan tubuh saat ini untuk stop loss dan pembalikan
  3. Masukkan perdagangan ke arah saluran setelah konfirmasi tren

    • Entri panjang di dekat band bawah dalam tren naik
    • Entri pendek di dekat band atas dalam tren penurunan
  4. Menggunakan rata-rata bergerak untuk penyaringan untuk menghindari sinyal palsu

    • Menghitung rata-rata bergerak periode N dari harga penutupan
    • Menghasilkan sinyal hanya pada terobosan rata-rata bergerak

Keuntungan

  1. Identifikasi tren sistematis yang menggabungkan band dan rata-rata bergerak

    Band dengan jelas mengidentifikasi saluran harga dan arah tren. moving averages filter noise. kombinasi memungkinkan deteksi tren yang kuat yang kebal terhadap kejutan pasar sporadis.

  2. Pengendalian risiko yang efektif melalui stop loss body lilin

    Membandingkan tubuh lilin saat ini dengan rata-rata historis mendeteksi pembalikan tren untuk stop loss dan pengurangan posisi.

  3. Aturan masuk kuantitatif dan stop loss yang jelas

    Peraturan stop loss ukuran tubuh lilin membuat seluruh sistem masuk dan keluar jelas dan sistematis.

Analisis Risiko

  1. Potensi kerugian di pasar yang terikat rentang

    Harga yang bergeser di sekitar band dapat menyebabkan kerugian kecil berulang. ukuran posisi harus dikurangi untuk membatasi dampak kerugian.

  2. Stop loss prematur dalam tren yang kuat

    Retracement jangka pendek dapat memicu stop dalam tren naik/turun yang kuat.

  3. Sinyal yang salah dari pengaturan parameter yang buruk

    Parameter rata-rata bergerak dan band yang kurang optimal dapat menyebabkan sinyal palsu. Parameter harus dioptimalkan untuk keandalan sinyal.

Peluang Peningkatan

  1. Mengoptimalkan periode lookback rata-rata bergerak

    Sesuaikan periode untuk mengurangi perataan untuk deteksi perubahan tren yang lebih cepat.

  2. Uji mekanisme stop loss alternatif

    Evaluasi penghentian belakang, ATR berhenti dll untuk menemukan sistem yang optimal.

  3. Mengintegrasikan model pembelajaran mesin

    Latih model pada data sejarah yang luas untuk meningkatkan prediksi tren dan sinyal.

Kesimpulan

Strategi ini menyeimbangkan identifikasi tren dan pengendalian risiko menggunakan Bollinger Bands dan moving average. Pendekatan kuantitatif sistematis dengan aturan masuk / keluar yang jelas memungkinkan penangkapan imbalan yang efektif dengan risiko yang terkendali. Peningkatan lebih 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 banyak