Sumber daya yang dimuat... Pemuatan...

Triple Standard Deviation Bollinger Bands Breakout Strategi dengan 100 Hari Moving Average Optimization

Penulis:ChaoZhang, Tanggal: 2024-12-13 11:20:13
Tag:MABBSMASD

img

Gambaran umum

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan breakout Bollinger Bands, menggunakan 3 standar deviasi untuk band atas dan 1 standar deviasi untuk band bawah, dikombinasikan dengan rata-rata bergerak 100 hari sebagai band tengah. Strategi ini terutama menangkap tren jangka panjang dengan mendeteksi price breakout di atas band atas dan menggunakan band bawah sebagai sinyal stop-loss. Konsep inti adalah untuk memasuki posisi selama breakout yang kuat dan keluar ketika harga jatuh di bawah band bawah, mencapai risiko terkontrol mengikuti tren.

Prinsip Strategi

Band atas menggunakan 3 standar deviasi, yang berarti di bawah asumsi distribusi normal, probabilitas harga pecah di atas tingkat ini hanya 0,15%, menunjukkan pembentukan tren yang signifikan ketika terjadi breakout. Band tengah menggunakan rata-rata bergerak 100 hari, periode yang cukup lama untuk secara efektif menyaring kebisingan pasar jangka pendek. Band bawah menggunakan 1 standar deviasi sebagai garis stop-loss, pengaturan yang relatif konservatif yang membantu dengan keluar tepat waktu. Strategi menghasilkan sinyal panjang ketika harga pecah di atas band atas dan keluar ketika harga jatuh di bawah band bawah.

Keuntungan Strategi

  1. Kemampuan menangkap tren yang kuat: Pengaturan 3 standar deviasi secara efektif menangkap peluang penembusan tren yang signifikan.
  2. Pengendalian risiko yang wajar: Menggunakan 1 standar deviasi sebagai garis stop-loss memberikan manajemen risiko yang konservatif.
  3. Kemampuan adaptasi parameter yang tinggi: Pengganda deviasi standar dan periode rata-rata bergerak dapat disesuaikan dengan karakteristik pasar yang berbeda.
  4. Pendekatan sistematis: Logika strategi yang jelas dengan kemampuan backtesting yang komprehensif untuk pelacakan kinerja yang akurat.
  5. Penerapan luas: Dapat diterapkan pada berbagai pasar termasuk saham dan cryptocurrency.

Risiko Strategi

  1. Risiko pecah palsu: Pasar mungkin menunjukkan pecah jangka pendek diikuti dengan pembalikan cepat, yang mengarah pada sinyal palsu.
  2. Penarikan yang signifikan: Penarikan yang besar dapat terjadi di pasar yang sangat volatile.
  3. Risiko lag: Rata-rata bergerak 100 hari memiliki lag yang melekat, berpotensi kehilangan beberapa pergerakan pasar yang cepat.
  4. Ketergantungan lingkungan pasar: Dapat menghasilkan perdagangan yang berlebihan di berbagai pasar, yang mengarah pada biaya transaksi yang tinggi.

Arah Optimasi Strategi

  1. Masukkan konfirmasi volume: Tambahkan mekanisme konfirmasi volume untuk meningkatkan keandalan sinyal.
  2. Mengoptimalkan mekanisme stop-loss: Pertimbangkan untuk menerapkan trailing stop atau stop dinamis berbasis ATR untuk manajemen exit yang lebih fleksibel.
  3. Tambahkan filter tren: Masukkan indikator identifikasi tren jangka panjang untuk hanya berdagang dalam arah tren utama.
  4. Meningkatkan manajemen posisi: Sesuaikan ukuran posisi secara dinamis berdasarkan kekuatan istirahat.
  5. Tambahkan filter waktu: Hindari perdagangan selama periode pasar tertentu.

Ringkasan

Bollinger Bands adalah strategi yang dirancang dengan baik untuk mengikuti tren dengan logika yang jelas. Melalui sifat statistik Bollinger Bands dan karakteristik trend-mengikuti rata-rata bergerak, secara efektif menangkap peluang keluar pasar yang signifikan. Meskipun ada risiko penarikan, strategi ini mempertahankan nilai praktis melalui pengaturan stop-loss yang wajar dan kontrol risiko. Potensi optimasi lebih lanjut terletak pada konfirmasi sinyal, mekanisme stop-loss, dan aspek manajemen posisi.


/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © MounirTrades007

// @version=6
strategy("Bollinger Bands", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=200)

// Get user input
var g_bb        = "Bollinger Band Settings"
upperBandSD     = input.float(title="Upper Band Std Dev", defval=3.0, tooltip="Upper band's standard deviation multiplier", group=g_bb)
lowerBandSD     = input.float(title="Lower Band Std Dev", defval=1.0, tooltip="Lower band's standard deviation multiplier", group=g_bb)
maPeriod        = input.int(title="Middle Band MA Length", defval=100, tooltip="Middle band's SMA period length", group=g_bb)
var g_tester    = "Backtester Settings"
drawTester      = input.bool(title="Draw Backtester", defval=true, group=g_tester, tooltip="Turn on/off inbuilt backtester display")

// Get Bollinger Bands
[bbIgnore1, bbHigh, bbIgnore2] = ta.bb(close, maPeriod, upperBandSD)
[bbMid, bbIgnore3, bbLow]      = ta.bb(close, maPeriod, lowerBandSD)

// Prepare trade persistent variables
drawEntry   = false
drawExit    = false

// Detect bollinger breakout
if close > bbHigh and barstate.isconfirmed and strategy.position_size == 0
    drawEntry := true
    strategy.entry(id="Trade", direction=strategy.long)
    alert("Bollinger Breakout Detected for " + syminfo.ticker, alert.freq_once_per_bar_close)

// Detect bollinger sell signal
if close < bbLow and barstate.isconfirmed and strategy.position_size != 0
    drawExit := true
    strategy.close(id="Trade")
    alert("Bollinger Exit detected for " + syminfo.ticker, alert.freq_once_per_bar_close)

// Draw bollinger bands
plot(bbMid, color=color.blue, title="Middle SMA")
plot(bbHigh, color=color.green, title="Upper Band")
plot(bbLow, color=color.red, title="Lower Band")

// Draw signals
plotshape(drawEntry, style=shape.triangleup, color=color.green, location=location.belowbar, size=size.normal, title="Buy Signal")
plotshape(drawExit, style=shape.xcross, color=color.red, location=location.belowbar, size=size.normal, title="Sell Signal")

// // =============================================================================
// // START BACKTEST CODE
// // =============================================================================

// // Prepare stats table
// var table testTable = table.new(position.top_right, 2, 2, border_width=1)
// f_fillCell(_table, _column, _row, _title, _value, _bgcolor, _txtcolor) =>
//     _cellText = _title + "\n" + _value
//     table.cell(_table, _column, _row, _cellText, bgcolor=_bgcolor, text_color=_txtcolor)

// // Draw stats table
// var bgcolor = color.black
// if barstate.islastconfirmedhistory
//     if drawTester
//         dollarReturn = strategy.equity - strategy.initial_capital
//         f_fillCell(testTable, 0, 0, "Total Trades:", str.tostring(strategy.closedtrades), bgcolor, color.white)
//         f_fillCell(testTable, 0, 1, "Win Rate:", str.tostring(strategy.wintrades / strategy.closedtrades * 100, "##.##") + "%", bgcolor, color.white)
//         f_fillCell(testTable, 1, 0, "Equity:", "$" + str.tostring(strategy.equity, "###,###.##"), bgcolor, color.white)
//         f_fillCell(testTable, 1, 1, "Return:", str.tostring((strategy.netprofit / strategy.initial_capital) * 100, "##.##") + "%", dollarReturn > 0 ? color.green : color.red, color.white)

// // =============================================================================
// // END BACKTEST CODE
// // =============================================================================

Berkaitan

Lebih banyak