Bollinger Band Momentum Breakout Strategi Dagangan

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

img

Ringkasan

Strategi ini menggabungkan penunjuk Bollinger Band dan penunjuk jumlah untuk mengenal pasti peluang pecah momentum yang kuat di atas band atas Bollinger apabila jumlah dagangan tinggi, dan memasuki kedudukan panjang.

Logika Strategi

  1. Gunakan penunjuk Bollinger Band untuk menentukan sama ada harga pecah di atas band atas.
  2. Menggunakan penunjuk jumlah dagangan untuk menentukan sama ada jumlah semasa lebih tinggi daripada purata tempoh lalu.
  3. Masukkan kedudukan panjang apabila jumlah dagangan tinggi dan harga pecah di atas Bollinger band atas.
  4. Gunakan penunjuk purata bergerak untuk menentukan trend jangka pendek dan jangka sederhana untuk mengurangkan kerugian dalam masa.

Strategi ini terutamanya mempertimbangkan tiga faktor: tahap harga, momentum dan trend. Apabila harga memecahkan pita atas Bollinger ke zon beli, lonjakan dalam jumlah dagangan menunjukkan momentum yang kuat dan kemasukan modal. Ini adalah masa yang tepat untuk memasuki kedudukan panjang. Kemudian ia menggunakan purata bergerak untuk menentukan trend pasaran untuk mengelakkan memegang kedudukan mati. Dengan menggabungkan tindakan harga, momentum dan kawalan risiko, ia bertujuan untuk menangkap keuntungan dari trend yang kuat.

Kelebihan

  1. Sinyal yang tepat, mengelakkan pecah palsu, menggabungkan penapis jumlah, ia hanya membeli pada momentum yang kuat, mengurangkan risiko.

  2. Mampu mengurangkan kerugian dalam masa melalui penentuan trend purata bergerak, mengurangkan kerugian pegangan.

  3. Strategi kuantitatif yang dilaksanakan yang menggabungkan beberapa penunjuk untuk membuat keputusan.

  4. Struktur kod yang jelas, mudah dibaca dan dikekalkan.

Risiko

  1. Bollinger Bands boleh gagal semasa turun naik harga yang melampau, kehilangan isyarat atau menghasilkan isyarat palsu.

  2. Tiada keuntungan apabila jumlah dagangan keseluruhan rendah. Isyarat beli mungkin tidak menguntungkan tanpa jumlah dagangan yang mencukupi.

  3. Penentuan trend purata bergerak juga mungkin gagal, tidak dapat memastikan sepenuhnya kerugian berhenti yang berkesan.

  4. Penyesuaian parameter yang tidak betul juga mempengaruhi keuntungan strategi. Sebagai contoh, tetingkap masa perdagangan yang ditetapkan terlalu pendek mungkin terlepas pembalikan trend.

Arahan pengoptimuman

  1. Tambah lebih banyak penunjuk teknikal untuk analisis trend dan sokongan / rintangan yang lebih baik, meningkatkan stop loss, contohnya corak candlestick, saluran, tahap sokongan utama.

  2. Tambah model pembelajaran mesin untuk menilai kemungkinan terobosan sebenar, mengurangkan isyarat palsu. contohnya model pembelajaran mendalam LSTM.

  3. Mengoptimumkan strategi pengurusan modal seperti saiz kedudukan dinamik, menghentikan kerugian untuk mengurangkan kesan kerugian perdagangan tunggal.

  4. Uji lebih banyak produk dan jangka masa, sesuaikan parameter seperti Bollinger Bands, tetingkap jumlah untuk meningkatkan kekuatan strategi.

Kesimpulan

Strategi ini mengintegrasikan Bollinger Band dan penunjuk jumlah dagangan untuk mengenal pasti peluang pembelian momentum yang kuat, dengan purata bergerak memastikan stop loss yang berkesan. Berbanding dengan strategi penunjuk tunggal, ia mempunyai ketepatan dan keupayaan kawalan risiko yang lebih tinggi. Dengan reka bentuk modular, penapis trend dan mekanisme stop loss, ia membentuk strategi dagangan momentum breakout yang mudah dioptimumkan.


/*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 lanjut