Bollinger Band Momentum Breakout Strategi Perdagangan

Penulis:ChaoZhang, Tanggal: 2024-02-05 10:53:46
Tag:

img

Gambaran umum

Strategi ini menggabungkan indikator Bollinger Band dan indikator volume untuk mengidentifikasi peluang keluar momentum yang kuat di atas Bollinger band atas ketika volume perdagangan tinggi, dan memasuki posisi panjang.

Logika Strategi

  1. Gunakan indikator Bollinger Band untuk menentukan apakah harga keluar di atas band atas.
  2. Menggunakan indikator volume perdagangan untuk menentukan apakah volume saat ini secara signifikan lebih tinggi dari rata-rata periode sebelumnya.
  3. Masukkan posisi long ketika volume perdagangan tinggi dan harga keluar di atas Bollinger band atas.
  4. Gunakan indikator rata-rata bergerak untuk menentukan tren jangka pendek dan jangka menengah untuk memotong kerugian dalam waktu.

Strategi ini terutama mempertimbangkan tiga faktor: tingkat harga, momentum dan tren. Ketika harga menembus band atas Bollinger ke zona beli, lonjakan volume perdagangan menunjukkan momentum yang kuat dan masuk modal. Ini adalah waktu yang tepat untuk memasuki posisi panjang. Kemudian menggunakan rata-rata bergerak untuk menentukan tren pasar untuk menghindari memegang posisi mati. Dengan menggabungkan aksi harga, momentum dan kontrol risiko, itu bertujuan untuk menangkap keuntungan dari tren yang kuat.

Keuntungan

  1. Sinyal yang akurat, menghindari kebocoran palsu, menggabungkan volume filter, hanya membeli momentum yang kuat, mengurangi risiko.

  2. Mampu memotong kerugian dalam waktu melalui penentuan tren rata-rata bergerak, mengurangi kerugian kepemilikan.

  3. Strategi kuantitatif yang diterapkan menggabungkan beberapa indikator untuk pengambilan keputusan.

  4. Struktur kode yang jelas, mudah dibaca dan dipelihara.

Risiko

  1. Bollinger Bands bisa gagal selama perubahan harga yang ekstrim, sinyal yang hilang atau menghasilkan sinyal palsu.

  2. Tidak ada keuntungan ketika total volume perdagangan rendah.

  3. Determinasi tren rata-rata bergerak juga bisa gagal, tidak dapat sepenuhnya memastikan stop loss yang efektif.

  4. Pengaturan parameter yang tidak tepat juga mempengaruhi profitabilitas strategi.

Arahan Optimasi

  1. Tambahkan lebih banyak indikator teknis untuk analisis tren dan support/resistance yang lebih baik, meningkatkan stop loss, misalnya pola candlestick, saluran, level support utama.

  2. Tambahkan model pembelajaran mesin untuk menilai kemungkinan real breakout, mengurangi sinyal palsu. misalnya model pembelajaran mendalam LSTM.

  3. Mengoptimalkan strategi manajemen modal seperti ukuran posisi dinamis, trailing stop loss untuk mengurangi dampak kerugian perdagangan tunggal.

  4. Uji lebih banyak produk dan kerangka waktu, sesuaikan parameter seperti Bollinger Bands, jendela volume untuk meningkatkan kekuatan strategi.

Kesimpulan

Strategi ini mengintegrasikan Bollinger Band dan indikator volume perdagangan untuk mengidentifikasi peluang pembelian momentum yang kuat, dengan moving average memastikan stop loss yang efektif. Dibandingkan dengan strategi indikator tunggal, strategi ini memiliki akurasi dan kemampuan pengendalian risiko yang lebih tinggi. Dengan desain modular, filter tren dan mekanisme stop loss, ini membentuk strategi perdagangan momentum breakout yang mudah dioptimalkan.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KAIST291

//@version=4
initial_capital=1000
strategy("prototype", overlay=true)
length1=input(1)
length3=input(3)
length7=input(7)
length9=input(9)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma9= sma(close,length9)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
mult4= input(2.5, minval=0.001, maxval=50, title="exp2")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
dev4= mult4 * stdev(src, length)
upper2=basis + dev4
lower2=basis - dev4
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=( BV>SV and BV>Davgvol)
bull2=(BV>SV and BV>Davgvol)
bux =(close>Supper and close>Slower and volume<Davgvol)
bear=(SV>BV and SV>Davgvol)
con=(BV>Wavgvol and rsi>80)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>upper1 and close>Supper and high>upper and rsi<80)
    strategy.entry("Long",strategy.long)

if (strategy.position_avg_price*1.02<close)
    strategy.close("Long")
else if (low<ma9 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (ma20>close and strategy.position_avg_price<close )
    strategy.close("Long")
else if (rsi>80 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
    strategy.close("Long")
else if (high<upper and strategy.position_avg_price<close)
    strategy.close("Long")
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120))

if (close<strategy.position_avg_price*0.98)
    strategy.close("Short")

else if (rsi<20)
    strategy.close("Short")



Lebih banyak