Strategi ini menggunakan Bollinger Bands untuk mengukur tren pasar dan menggabungkan sinyal bandwidth untuk mengidentifikasi peluang perdagangan, bertujuan untuk pertumbuhan portofolio investasi yang stabil.
Jangan ragu untuk menyesuaikan parameter dan backtest strategi ini.
Jika Anda senang dengan hasil yang ada dan ingin mengotomatiskan strategi ini, yang dapat dilakukan melalui peringatan, Anda perlu mengubahnya menjadi studi dan menambahkan peringatan dalam kode.
Strategi ini menggunakan Bollinger Bands dan bandwidth untuk menentukan entri dan keluar.
Bollinger Bands terdiri dari band atas, band tengah dan band bawah. Band tengah adalah rata-rata bergerak sederhana n-periode, default n = 16. Band atas adalah band tengah + k * deviasi standar, band bawah adalah band tengah - k * deviasi standar, default k = 3. Ketika harga mendekati band atas, itu menunjukkan overvaluation atau overbought. Ketika harga mendekati band bawah, itu menunjukkan undervaluation atau oversold.
Indikator bandwidth menunjukkan volatilitas harga relatif terhadap band tengah. Hal ini dihitung dengan (band atas - band bawah) / band tengah * 1000. Ketika bandwidth di bawah 20, ini menunjukkan volatilitas rendah atau konsolidasi. Ketika bandwidth melebihi 50, ini mewakili peningkatan volatilitas.
Strategi ini mencari peluang jangka panjang ketika bandwidth berada di antara 20-50 dan harga pecah di bawah band bawah.
Keuntungan dari strategi ini meliputi:
Bollinger Bands mengukur arah tren, mengurangi risiko dari pecah palsu
Sinyal bandwidth secara akurat menemukan tindakan yang terbatas pada rentang, menghindari kerugian besar dari perubahan besar
Backtest menunjukkan hampir 80% profitabilitas selama 1 tahun, rasio risiko-manfaat yang sangat tinggi
Penarikan maksimum di bawah 5%, mengontrol risiko secara efektif dan mempertahankan pertumbuhan portofolio yang stabil
Logika yang sederhana dan jelas, mudah dimengerti dan diterapkan, dapat diterapkan secara luas pada berbagai aset
Risiko dari strategi ini meliputi:
Pengaturan parameter Bollinger yang buruk dapat kehilangan peluang perdagangan yang baik
Frekuensi perdagangan rendah selama pasar bull atau bear yang terus menerus, profitabilitas terbatas
Data backtest yang tidak cukup, kinerja sebenarnya mungkin berbeda dari backtest
Stop loss dapat diambil selama gerakan ekstrim, menyebabkan kerugian besar
Biaya transaksi yang tinggi juga mengurangi keuntungan yang sebenarnya
Solusi:
Mengoptimalkan parameter dan menyesuaikan periode Bollinger berdasarkan pasar
Memperkenalkan indikator tambahan untuk menangani kondisi pasar yang tidak normal
Mengumpulkan data yang cukup dan backtest di berbagai pasar untuk memverifikasi stabilitas
Sesuaikan stop loss dengan tepat untuk mencegah kerugian besar dari gerakan ekstrem
Pilih platform perdagangan dengan komisi rendah untuk mengurangi biaya transaksi
Strategi ini dapat ditingkatkan dalam hal berikut:
Tambahkan konfirmasi volume untuk menghindari gangguan palsu
Gabungkan dengan indikator tren untuk mengidentifikasi arah tren
Menggunakan pembelajaran mesin untuk menyesuaikan parameter otomatis dan beradaptasi dengan pasar
Tambahkan filter korelasi untuk menghindari perdagangan aset yang tidak berkorelasi
Mengoptimalkan mengambil keuntungan / menghentikan kerugian untuk lebih banyak keuntungan selama tren naik
Memperkenalkan lebih banyak filter kondisi untuk meningkatkan tingkat menang
Uji kombinasi multi-frame waktu untuk mendapatkan keuntungan dari beberapa siklus
Membangun portofolio terindeks untuk memperluas eksposur
Gunakan pembelajaran mesin untuk secara otomatis menghasilkan & memvalidasi strategi baru
Secara keseluruhan strategi breakout Bollinger Band ini backtested dengan baik dan dapat menghasilkan pengembalian yang stabil di pasar yang terikat kisaran. Logika inti sederhana dan jelas, mudah dipahami dan diterapkan. Tetapi perbaikan lebih lanjut dalam optimasi parameter, kontrol risiko dan manajemen portofolio diperlukan untuk keuntungan yang stabil di pasar yang kompleks. Ini adalah strategi dasar yang mengikuti tren, dan dapat ditingkatkan dengan memperkenalkan lebih banyak indikator teknis dan mekanisme manajemen risiko, atau dikombinasikan dengan pembelajaran mesin untuk otomatisasi. Singkatnya, strategi ini membuka pintu untuk perdagangan algoritmik bagi pemula, dan juga memberikan kemungkinan bagi pedagang berpengalaman untuk mengoptimalkan strategi.
/*backtest start: 2023-10-30 00:00:00 end: 2023-11-06 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Bollinger Bands BAT/USDT 30min", overlay=true ) /// Indicators ///Bollinger Bands source = close length = input(16, minval=1) mult = input(3, step=0.1, minval=0.001, maxval=50) basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev plot(basis, color=color.red) p1 = plot(upper, color=color.blue) p2 = plot(lower, color=color.blue) fill(p1, p2) //Bollinger bands width bbw = (upper-lower)/basis*1000 //plot(bbw, color=color.blue) upper_bbw_input = input(title="BBW Upper Threshold", step=1, minval=0, defval=50) lower_bbw_input = input(title="BBW Lower Threshold", step=1, minval=0, defval=20) // Backtesting Period testStartYear = input(2019, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2020, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriod() => true // Take Profit tp_inp = input(8, title='Take Profit %', step=0.1)/100 take_level = strategy.position_avg_price * (1 + tp_inp) //Entry Strategy entry_long = crossover(source, lower) and (bbw < upper_bbw_input) and (bbw > lower_bbw_input) exit_long = cross(high,upper) or close < lower if testPeriod() strategy.entry(id="LongBB", long=true, comment="LongBB", when=entry_long) strategy.exit("Take Profit Long","LongBB",limit=take_level) strategy.close(id="LongBB", when=exit_long )