Sisihan piawai tiga kali ganda Strategi dagangan kuantitatif terobosan Bollinger band digabungkan dengan pengoptimuman purata bergerak 100 hari

MA BB SMA SD
Tarikh penciptaan: 2024-12-13 11:20:13 Akhirnya diubah suai: 2024-12-13 11:20:13
Salin: 3 Bilangan klik: 483
1
fokus pada
1617
Pengikut

Sisihan piawai tiga kali ganda Strategi dagangan kuantitatif terobosan Bollinger band digabungkan dengan pengoptimuman purata bergerak 100 hari

Gambaran keseluruhan

Strategi ini adalah strategi dagangan kuantitatif yang berasaskan Brin Belt Breakout, menggunakan 3 kali standard deviation uptrend dan 1 kali standard deviation downtrend, sambil menggabungkan purata bergerak 100 hari sebagai midtrend. Strategi ini terutamanya menangkap trend jangka panjang dengan mengesan harga yang menembusi uptrend, dan menggunakan downtrend sebagai isyarat berhenti.

Prinsip Strategi

Prinsip utama strategi ini adalah berdasarkan ciri-ciri statistik Brin Belt. Dengan menggunakan 3 kali standard deviasi, yang bermaksud bahawa pada asumsi peredaran normal, kemungkinan harga untuk menembusi arah atas hanya 0.15%, oleh itu, apabila terdapat penembusan, ia sering menunjukkan pembentukan trend yang ketara. Dengan menggunakan purata bergerak 100 hari, jangka masa ini cukup lama untuk menyaring dengan berkesan bunyi pasaran jangka pendek. Dengan menggunakan 1 kali standard deviasi, sebagai garis henti, ini adalah agak konservatif.

Kelebihan Strategik

  1. Keupayaan untuk menangkap trend yang kuat: Dengan 3 kali ganda ketidakseimbangan standard, peluang untuk memecahkan trend yang penting dapat ditangkap dengan berkesan.
  2. Pengendalian risiko munasabah: Menggunakan 1 kali perbezaan standard sebagai garis hentian, lebih konservatif dalam kawalan risiko.
  3. Parameter boleh diselaraskan: Perkalian perbezaan piawai dan kitaran purata bergerak di atas dan di bawah landasan boleh diselaraskan mengikut ciri-ciri pasaran yang berbeza.
  4. Sistematik yang kuat: Logik strategi jelas, fungsi pengesanan balik yang baik, prestasi perdagangan statistik yang tepat dapat diperolehi.
  5. Kebolehpasaran yang luas: boleh digunakan dalam pelbagai bidang seperti pasaran saham dan pasaran cryptocurrency.

Risiko Strategik

  1. Risiko penembusan palsu: Pasaran mungkin mengalami kemerosotan cepat selepas penembusan jangka pendek, yang menyebabkan isyarat palsu.
  2. Penarikan balik yang besar: Penarikan balik yang besar mungkin berlaku dalam pasaran yang bergolak.
  3. Risiko ketinggalan: 100 hari rata-rata garis mempunyai ketinggalan, mungkin terlepas beberapa pergerakan pantas.
  4. Kepercayaan kepada keadaan pasaran: Mungkin sering masuk dan keluar dalam pasaran yang bergolak, yang menyebabkan kos transaksi yang berlebihan.

Arah pengoptimuman strategi

  1. Memperkenalkan pengesahan kuantiti: mekanisme pengesahan penembusan kuantiti boleh ditambah untuk meningkatkan kebolehpercayaan isyarat.
  2. Mekanisme penghentian kerugian yang dioptimumkan: boleh mempertimbangkan untuk memperkenalkan penghentian penjejakan atau ATR untuk meningkatkan fleksibiliti penghentian kerugian.
  3. Tambah penapis trend: Tambah indikator untuk menilai trend jangka panjang dan hanya berdagang ke arah trend utama.
  4. Pengurusan kedudukan yang dioptimumkan: saiz kedudukan boleh disesuaikan mengikut dinamik kekuatan penembusan.
  5. Tambah penapis masa: anda boleh mengelakkan berdagang pada waktu pasaran tertentu.

ringkaskan

Ini adalah strategi trend-following yang dirancang dengan logik yang logik dan jelas. Dengan ciri-ciri statistik Brinbelt dan ciri-ciri trend-following rata-rata bergerak, ia dapat menangkap peluang penembusan penting di pasaran dengan berkesan. Walaupun terdapat risiko penarikan balik tertentu, ia masih mempunyai nilai praktikal yang baik melalui tetapan dan kawalan risiko yang munasabah.

Kod sumber strategi
/*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
// // =============================================================================