Strategi Pelacakan Bollinger Noro

Penulis:ChaoZhang, Tanggal: 2023-11-28 16:57:28
Tag:

img

Gambaran umum

Ini adalah strategi pelacakan momentum berdasarkan Bollinger Bands. Ini menggabungkan Bollinger Bands untuk menilai tren pasar dan titik pembalikan, dan menetapkan posisi panjang dan pendek untuk melacak fluktuasi pasar.

Prinsip-prinsip

Indikator inti dari strategi ini adalah Bollinger Bands, yang terdiri dari band tengah, band atas dan band bawah. Band tengah adalah rata-rata bergerak dari n hari, dan band atas dan bawah adalah offset dari band tengah ditambah/dikurangi standar deviasi. Ketika harga mendekati band atas/bawah, itu dianggap sinyal overbought/oversold. Strategi ini menggabungkan deviasi tren sebagai dasar untuk membuka posisi, yaitu membuka posisi ketika harga menerobos band tengah ke arah yang berlawanan. Untuk mencegah kerugian yang disebabkan oleh false breakout, strategi mengharuskan lebar breakout lebih besar dari rata-rata.

Strategi ini juga menggabungkan kedua entri trend-mengikuti dan entri rata-rata-reversi, sesuai dengan peluang perdagangan yang berbeda. entri trend-mengikuti membutuhkan band tengah untuk menjadi referensi dukungan / resistensi dan bentuk penyimpangan. entri rata-rata-reversi langsung berbalik dekat band Bollinger atas / bawah. strategi menggabungkan kedua jenis sinyal ini dan dapat mengambil baik pelacakan tren dan operasi pembalikan.

Analisis Keuntungan

Strategi ini menggabungkan karakteristik overbought/oversold dari Bollinger Bands dengan reversal point judgment. Hal ini memungkinkan untuk diterapkan pada kedua pasar tren dan range, menangkap berbagai jenis peluang perdagangan. Pengaturan stop loss exit mencegah kerugian berkembang. Juga, kemampuan untuk berdagang baik panjang maupun pendek meningkatkan penerapan strategi.

Dibandingkan dengan strategi Bollinger sederhana, logika tren tambahan membuat entri strategi ini lebih stabil, dan juga menangkap peluang pembalikan. Ini meningkatkan rasio sinyal-ke-noise. Selain itu, perdagangan kedua arah memanfaatkan peluang perdagangan lebih sepenuhnya di berbagai situasi pasar.

Analisis Risiko

Strategi ini terutama bergantung pada karakteristik overbought/oversold dari Bollinger Bands. Jadi ketika ada fluktuasi harga yang ekstrem, lebar Bollinger Bands terus berkembang, yang dapat dengan mudah menyebabkan beberapa perdagangan yang kalah. Ini adalah titik risiko potensial. Selain itu, masih ada beberapa ketidakpastian dan kesalahan dalam penilaian pembalikan, menyebabkan entri dan berhenti yang gagal.

Melawan kegagalan Bollinger Bands, kita dapat memperpendek parameter n untuk membuat band lebih sensitif, atau mengurangi lebar band untuk mengurangi kemungkinan kerugian.

Arahan Optimasi

Arah utama untuk mengoptimalkan strategi ini meliputi:

  1. Parameter Bollinger Bands dapat disesuaikan sesuai dengan pasar yang berbeda untuk menemukan kombinasi yang optimal.
  2. Ukuran penyimpangan dan perhitungan nilai rata-rata dapat diuji dengan opsi lain.
  3. Tambahkan lebih banyak filter untuk menilai sinyal masuk dan mengurangi positif palsu.
  4. Uji metode stop loss lainnya seperti trail stop loss.
  5. Parameter dapat dioptimalkan untuk produk dan kerangka waktu tertentu.

Kesimpulan

Strategi ini membuat ekspansi dan optimasi yang efektif untuk strategi Bollinger standar. Penyimpangan tren yang ditambahkan meningkatkan stabilitas dan memanfaatkan peluang pembalikan dengan baik. Kemampuan untuk memperdagangkan kedua arah dan menghentikan kerugian juga membuat strategi lebih kuat. Peningkatan lebih lanjut dapat dicapai melalui optimasi parameter dan menambahkan lebih banyak filter.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

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

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

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

uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")

fromyear = input(2018, defval = 2018, 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
body = abs(close - open)
abody = ema(body, 30)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0 
up1 = bar == -1 and ohlc4 >= basis and ohlc4 < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset
dn1 = bar == 1 and ohlc4 <= basis and ohlc4 > lower and (close > strategy.position_avg_price or strategy.position_size == 0) and uset
up2 = close <= lower and usect
dn2 = close >= upper and usect
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2

//Trading
if up1 or up2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Lebih banyak