Sumber dimuat naik... memuat...

Triple Standard Deviation Bollinger Bands Breakout Strategy dengan pengoptimuman purata bergerak 100 hari

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

img

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan breakout Bollinger Bands, menggunakan 3 penyimpangan standard untuk band atas dan 1 penyimpangan standard untuk band bawah, digabungkan dengan purata bergerak 100 hari sebagai band tengah. Strategi ini terutamanya menangkap trend jangka panjang dengan mengesan penembusan harga di atas band atas dan menggunakan band bawah sebagai isyarat stop-loss. Konsep terasnya adalah untuk memasuki kedudukan semasa penembusan yang kuat dan keluar apabila harga jatuh di bawah band bawah, mencapai trend risiko terkawal yang mengikuti.

Prinsip Strategi

Prinsip terasnya adalah berdasarkan sifat statistik Bollinger Bands. Band atas menggunakan 3 penyimpangan standard, yang bermaksud di bawah andaian pengedaran normal, kebarangkalian harga memecahkan di atas tahap ini hanya 0.15%, menunjukkan pembentukan trend yang signifikan apabila pecah berlaku. Band tengah menggunakan purata bergerak 100 hari, tempoh yang cukup lama untuk menapis bunyi pasaran jangka pendek dengan berkesan. Band bawah menggunakan 1 penyimpangan standard sebagai garis stop-loss, tetapan yang agak konservatif yang membantu dengan keluar tepat pada masanya. Strategi ini menghasilkan isyarat panjang apabila harga memecahkan di atas band atas dan keluar apabila harga jatuh di bawah band bawah.

Kelebihan Strategi

  1. Keupayaan menangkap trend yang kuat: Pengaturan penyimpangan standard 3 secara berkesan menangkap peluang pecah trend yang signifikan.
  2. Pengendalian risiko yang munasabah: Menggunakan 1 penyimpangan piawai sebagai garis stop-loss memberikan pengurusan risiko yang konservatif.
  3. Kemudahan penyesuaian parameter yang tinggi: Pengganda penyimpangan standard dan tempoh purata bergerak boleh diselaraskan untuk ciri pasaran yang berbeza.
  4. Pendekatan sistematik: Logik strategi yang jelas dengan keupayaan backtesting yang komprehensif untuk mengesan prestasi yang tepat.
  5. Penggunaan luas: Boleh digunakan untuk pelbagai pasaran termasuk saham dan cryptocurrency.

Risiko Strategi

  1. Risiko pecah palsu: Pasaran mungkin menunjukkan pecah jangka pendek diikuti dengan pembalikan cepat, yang membawa kepada isyarat palsu.
  2. Pengeluaran yang signifikan: Pengeluaran yang besar boleh berlaku di pasaran yang sangat tidak menentu.
  3. Risiko kelewatan: Purata bergerak 100 hari mempunyai kelewatan yang melekat, berpotensi kehilangan beberapa pergerakan pasaran yang cepat.
  4. Kebergantungan persekitaran pasaran: Boleh menghasilkan perdagangan berlebihan di pasaran yang berbeza, yang membawa kepada kos transaksi yang tinggi.

Arahan Pengoptimuman Strategi

  1. Masukkan pengesahan jumlah: Tambahkan mekanisme pengesahan pecah jumlah untuk meningkatkan kebolehpercayaan isyarat.
  2. Mengoptimumkan mekanisme stop-loss: Pertimbangkan untuk melaksanakan hentian belakang atau hentian dinamik berasaskan ATR untuk pengurusan keluar yang lebih fleksibel.
  3. Tambah penapis trend: Masukkan penunjuk pengenalan trend jangka panjang untuk berdagang hanya dalam arah trend utama.
  4. Meningkatkan pengurusan kedudukan: Sesuaikan saiz kedudukan secara dinamik berdasarkan kekuatan pecah.
  5. Tambah penapis masa: Elakkan perdagangan semasa tempoh pasaran tertentu.

Ringkasan

Ini adalah trend yang dirancang dengan baik mengikuti strategi dengan logik yang jelas. Melalui sifat statistik Bollinger Bands dan ciri trend berikut purata bergerak, ia berkesan menangkap peluang pecah pasaran yang signifikan. Walaupun terdapat risiko penarikan, strategi ini mengekalkan nilai praktikal melalui tetapan stop-loss yang munasabah dan kawalan risiko. Potensi pengoptimuman lanjut terletak pada pengesahan isyarat, mekanisme stop-loss, dan aspek pengurusan kedudukan.


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