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.
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.
Sinyal yang tepat, mengelakkan pecah palsu, menggabungkan penapis jumlah, ia hanya membeli pada momentum yang kuat, mengurangkan risiko.
Mampu mengurangkan kerugian dalam masa melalui penentuan trend purata bergerak, mengurangkan kerugian pegangan.
Strategi kuantitatif yang dilaksanakan yang menggabungkan beberapa penunjuk untuk membuat keputusan.
Struktur kod yang jelas, mudah dibaca dan dikekalkan.
Bollinger Bands boleh gagal semasa turun naik harga yang melampau, kehilangan isyarat atau menghasilkan isyarat palsu.
Tiada keuntungan apabila jumlah dagangan keseluruhan rendah. Isyarat beli mungkin tidak menguntungkan tanpa jumlah dagangan yang mencukupi.
Penentuan trend purata bergerak juga mungkin gagal, tidak dapat memastikan sepenuhnya kerugian berhenti yang berkesan.
Penyesuaian parameter yang tidak betul juga mempengaruhi keuntungan strategi. Sebagai contoh, tetingkap masa perdagangan yang ditetapkan terlalu pendek mungkin terlepas pembalikan trend.
Tambah lebih banyak penunjuk teknikal untuk analisis trend dan sokongan / rintangan yang lebih baik, meningkatkan stop loss, contohnya corak candlestick, saluran, tahap sokongan utama.
Tambah model pembelajaran mesin untuk menilai kemungkinan terobosan sebenar, mengurangkan isyarat palsu. contohnya model pembelajaran mendalam LSTM.
Mengoptimumkan strategi pengurusan modal seperti saiz kedudukan dinamik, menghentikan kerugian untuk mengurangkan kesan kerugian perdagangan tunggal.
Uji lebih banyak produk dan jangka masa, sesuaikan parameter seperti Bollinger Bands, tetingkap jumlah untuk meningkatkan kekuatan strategi.
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")