Strategi Mengikuti Tren Bollinger Bands Adaptif


Tanggal Pembuatan: 2023-11-16 16:35:01 Akhirnya memodifikasi: 2023-11-16 16:35:01
menyalin: 1 Jumlah klik: 605
1
fokus pada
1617
Pengikut

Strategi Mengikuti Tren Bollinger Bands Adaptif

Ringkasan

Strategi ini didasarkan pada indikator Bollinger Bands, yang dikombinasikan dengan rata-rata bergerak yang beradaptasi, memungkinkan penilaian dan pelacakan tren yang akurat. Dengan menyesuaikan parameter secara dinamis, strategi ini dapat beradaptasi dengan berbagai varietas dan lingkungan pasar, dengan stabilitas dan kemampuan adaptasi yang lebih kuat.

Prinsip Strategi

Strategi ini terdiri dari beberapa bagian utama:

  1. Perhitungan rata-rata bergerak beradaptasi. Di sini, indikator regresi linier digunakan untuk menghitung kurva regresi linier dalam periode tertentu sebagai rata-rata bergerak.

  2. Perhitungan atas dan bawah lintasan Brin channel. Di sini menggunakan band lintasan ATR yang beradaptasi sendiri, lalu digabungkan dengan parameter ratio2 yang ditentukan pengguna, untuk menghitung atas dan bawah lintasan Brin channel.

  3. Pertimbangkan arah tren dan waktu pembelian dan penjualan berdasarkan pada apakah harga telah menembus tren naik dan turun Brinch Channel. Pertimbangkan sebagai sinyal beli ketika harga menembus tren turun dari bawah ke atas; sebagai sinyal jual ketika harga turun dari atas ke bawah.

  4. Set stop loss stop profit. Menggunakan stop loss untuk mengontrol risiko, sementara menggunakan stop loss yang ditelusuri setelah titik tetap sebelumnya untuk mengatur stop loss, dan pada saat yang sama menjamin keuntungan untuk memaksimalkan tren.

  5. Tergabung dengan periode pengujian ulang, waktu mulai dan akhir pengujian ulang ditetapkan untuk optimasi pengujian strategi.

Keunggulan Strategis

  1. Desain parameter yang dapat beradaptasi. Jalur Brin dan garis rata-rata bergerak dihitung dengan cara yang dapat beradaptasi, sehingga strategi dapat beradaptasi dengan perubahan pasar.

  2. Penentuan terobosan yang jelas. Gunakan terobosan tren naik turun Brin saluran untuk menentukan titik balik tren, biosignal relatif jelas.

  3. Stop loss stop setting adalah wajar. Menggunakan risiko pengendalian stop loss tetap, melacak cara stop loss untuk memaksimalkan keuntungan tren.

  4. Validasi Validasi Retrospektif. Atur waktu retrospektif untuk memverifikasi strategi, memastikan bahwa strategi tersebut juga efektif dalam konteks sejarah.

  5. Implementasi yang mudah dipahami. Strategi yang jelas dan mudah dipahami, kode yang relatif ringkas, mudah dipahami dan dioperasikan secara langsung.

Risiko Strategis

  1. Saluran Brining memerlukan optimasi parameter. Saluran Brining membutuhkan optimasi jalur dan siklus pengembalian sesuai dengan varietas dan lingkungan pasar yang berbeda. Jika tidak dioptimalkan dengan benar, akan terjadi beberapa sinyal yang salah atau sering terjadi False Triggers.

  2. Waktu pengembalian mungkin tidak cukup. Pengembalian ini hanya mengatur ruang lingkup pengembalian baru-baru ini dan tidak dapat mencakup sejarah yang lebih panjang untuk sepenuhnya memverifikasi stabilitas strategi.

  3. Mungkin ada risiko overfit. Parameter pengembalian saat ini mungkin hanya dioptimalkan untuk situasi tertentu baru-baru ini, sehingga ada risiko overfit historis.

  4. Stop loss harus dinilai. Stop loss saat ini lebih kecil, mungkin terlalu sensitif dan dipotong oleh getaran kecil. Stop loss yang tepat harus dinilai.

  5. Kurangnya indikator verifikasi kuantitatif. Saat ini, sinyal perdagangan hanya dinilai dari terobosan grafis, dan tidak ada indikator kuantitatif yang diperkenalkan untuk memverifikasi efektivitas sinyal.

Arah optimasi strategi

  1. Masukkan lebih banyak indikator adaptasi. Anda dapat menguji berbagai kombinasi indikator adaptasi rata-rata dan adaptasi saluran untuk membangun strategi pelacakan tren yang lebih robust.

  2. Optimalkan pengaturan parameter. Kombinasi optimal dari Brinch Path dan parameter linear dapat ditemukan melalui metode yang lebih sistematis seperti algoritma genetik.

  3. Memperluas jangka waktu pengujian ulang. Memperluas jangka waktu pengujian ulang, pengujian parameter stabilitas yang dioptimalkan. Memperkenalkan titik geser, biaya transaksi, dan lainnya untuk pengujian ulang yang lebih realistis.

  4. Memperkenalkan aturan penyaringan kuantitatif. Atur aturan indikator kuantitatif seperti volume transaksi yang terobosan, MACD gap, dan lain-lain untuk menghindari sinyal terobosan Brinks yang salah.

  5. Optimalkan mekanisme stop loss. Evaluasi berbagai pengaturan titik stop loss tetap dan berbagai cara untuk melacak stop loss untuk menemukan modus stop loss yang optimal.

  6. Verifikasi di lapangan. Mengoperasikan strategi yang telah dioptimalkan di lapangan, merekam penarikan keuntungan, dan memperbaiki lebih lanjut keandalan strategi yang stabil.

Meringkaskan

Strategi ini secara keseluruhan memiliki ide yang jelas, menggunakan saluran Brin untuk menentukan arah tren dan menangkap sinyal penembusan, dan dibantu dengan garis rata-rata bergerak untuk menentukan arah tren secara keseluruhan. Dengan beberapa pengoptimalan, dapat menjadi strategi pelacakan tren yang lebih stabil dan andal. Namun, tetap perlu memperhatikan representasi rentang waktu pengamatan ulang, memperkenalkan aturan penyaringan kuantitatif, dan pengendalian tingkat kerugian.

Kode Sumber Strategi
/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Linear Regression (Backtest / Trailing Stop)",overlay=true)
close_price = close[0]

len = input(40)
linear_reg = linreg(close_price, len, 0)

calculationToPlotAverageMeanLine=linear_reg
useUpperDeviation = input(true, "Upper Deviation", bool)
useLowerDeviation = input(true, "Lower Deviation", bool)
ratio2=input(defval=2,title=" Ratio 2")
avg=atr(len)
r2=avg*ratio2
top=linear_reg+r2
bott=linear_reg-r2

calculationToPlotUpperLine=top
calculationToPlotLowerLine=bott

plotUpperDeviationLine = plot(not useUpperDeviation ? na : calculationToPlotUpperLine, color=color(blue,0))
plotAverageMeanLine = plot(calculationToPlotAverageMeanLine, color=color(olive,0))
plotLowererDeviationLine = plot(not useLowerDeviation ? na : calculationToPlotLowerLine, color=color(red,0))
fill(plotUpperDeviationLine, plotAverageMeanLine, color=color(blue,85))
fill(plotLowererDeviationLine, plotAverageMeanLine, color=color(red,85))


//
length = input(title="linear Length",  defval=40, minval=1)
multiplier = input(title="linear Deviation", type=float, defval=2, minval=1)
overbought = input(title="Overbought",  defval=1, minval=1)
oversold = input(title="Oversold",  defval=0, minval=1)
custom_timeframe = input(title="Use another Timeframe?", type=bool, defval=false)
highTimeFrame = input(title="Select The Timeframe",  defval="60")
res1 = custom_timeframe ? highTimeFrame : timeframe.period

fixedSL = input(title="SL Activation", defval=70)
trailSL = input(title="SL Trigger", defval=10)
fixedTP = input(title="TP Activation", defval=50)
trailTP = input(title="TP Trigger", defval=10)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2015)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2015)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

smabasis = linreg(close_price, length, 0)
stdev = stdev(close, length)
cierre = request.security(syminfo.tickerid, res1, close, false)
alta = request.security(syminfo.tickerid, res1, high, false)
baja = request.security(syminfo.tickerid, res1, low, false)
basis1 = request.security(syminfo.tickerid, res1, smabasis, false)
stdevb = request.security(syminfo.tickerid, res1, stdev, false)
dev = multiplier * stdevb // stdev(cierre, length)
upper = basis1 + dev
lower = basis1 - dev

bbr = (cierre - lower)/(upper - lower)

// plot(bbr)

// // MARCA LAS RESISTENCIAS
pintarojo = 0.0
pintarojo := nz(pintarojo[1])
pintarojo := bbr[1] > overbought and bbr < overbought ? alta[1] :  nz(pintarojo[1])
p = plot(pintarojo, color = red, style=circles, linewidth=2)

// // MARCA LOS SOPORTES
pintaverde = 0.0
pintaverde := nz(pintaverde[1])
pintaverde := bbr[1] < oversold and bbr > oversold ? baja[1] :  nz(pintaverde[1])
g = plot(pintaverde, color = black, style=circles, linewidth=2)
zz= crossover(pintaverde,pintaverde[1]) or crossunder(pintaverde,pintaverde[1])
kp= crossover(pintarojo,pintarojo[1]) or crossunder(pintarojo,pintarojo[1]) 
plotshape(zz,  title="buy", style=shape.triangleup,location=location.belowbar, color=green, transp=0, size=size.small)
plotshape(kp, title="sell", style=shape.triangledown,location=location.abovebar, color=red, transp=0, size=size.small)


strategy.entry("BUY", strategy.long, qty=10, oca_name="BUY",  when=zz and window())
strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)

strategy.entry("SELL", strategy.short, qty=10, oca_name="SELL",  when=kp and window())
strategy.exit("S.Exit", "SELL", qty_percent = 100, loss=fixedSL, trail_offset=trailSL, trail_points=fixedTP)