Strategi pembalikan Bollinger Bands yang ditingkatkan

Penulis:ChaoZhang, Tanggal: 2023-09-21 11:45:37
Tag:

Gambaran umum

Strategi ini menggunakan indikator Bollinger Bands yang ditingkatkan untuk mengidentifikasi titik pembalikan harga, pergi panjang ketika harga mendekati band bawah, dan menutup posisi ketika lilin hijau muncul, bertujuan untuk menangkap reversi rata-rata di band bawah.

Logika Strategi

  1. Menghitung parameter BB standar dasar, dev, BB atas dan BB bawah.

  2. Menghitung SMA dan band penyimpangan upex2 dan dnex2 pada persentase tertentu dari SMA.

  3. Ambil rata-rata upex2, dnex2 dengan atasBB, bawahBB untuk mendapatkan upex3 dan dnex3.

  4. Ambil yang lebih besar dari upex3 dan upperBB sebagai new upper band upex, yang lebih kecil dari dnex3 dan lowerBB sebagai new lower band dnex.

  5. Pergi panjang ketika harga di bawah dnex, tutup posisi ketika lilin hijau muncul (tutup > buka).

Analisis Keuntungan

  1. BB yang ditingkatkan meningkatkan sensitivitas BB asli untuk sinyal pembalikan sebelumnya.

  2. Filter whipsaws dengan pola candlestick.

  3. Backtest menunjukkan profitabilitas yang stabil dari tahun 2008-2018, kurva yang halus, maksimal DD < 20%.

  4. Leverage yang dapat dikonfigurasi, jam perdagangan untuk pengendalian risiko.

Analisis Risiko

  1. Penyesuaian parameter BB yang buruk dapat menyebabkan over-trading atau peluang yang hilang.

  2. Hanya lama, tidak bisa mendapatkan keuntungan dari pembalikan tren.

  3. Filter lilin mungkin tertunda, tidak bisa keluar tepat waktu.

  4. Data backtest 10 tahun tidak cukup untuk menguji ketahanan.

  5. Tidak bisa beradaptasi dengan celah besar atau lompatan pembukaan.

Arahan Optimasi

  1. Uji kombinasi parameter untuk mengoptimalkan pengaturan BB.

  2. Tambahkan filter sinyal lain untuk meningkatkan profitabilitas.

  3. Pertimbangkan perdagangan pendek ketika harga melebihi band atas.

  4. Atur stop loss untuk membatasi kerugian perdagangan tunggal.

  5. Mengembangkan auto tuning berdasarkan perubahan pasar.

  6. Mengoptimalkan aturan masuk untuk celah dan lompatan.

  7. Memperluas periode backtest untuk menguji parameter.

Ringkasan

Strategi ini mengidentifikasi titik pembalikan dengan BB yang ditingkatkan dan berjalan panjang di dekat band bawah dengan filter lilin untuk pengambilan keuntungan yang cepat. Kinerja backtest bagus. Tapi hanya panjang, sampel terbatas, penyesuaian param diperlukan. Mungkin menghadapi penurunan ketika pasar berubah. Langkah selanjutnya adalah mengkonfirmasi sinyal untuk meningkatkan tingkat kemenangan, perdagangan pendek, backtest yang lebih lama untuk ketahanan, untuk meningkatkan daya adaptasi dan stabilitas.


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Advanced Bollinger Bands Strategy v1.0", shorttitle = "ABB str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
p = input(20, "bars")
d = input(25, "percent")
showlines = input(true, defval = true, title = "Show Lines?")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

mult = input(2.0, minval=0.001, maxval=50)
basis = sma(close, p)
dev = mult * stdev(close, p)
source = close
upperBB = basis + dev
lowerBB = basis - dev
b1 = plot(basis, color=gray, linewidth=1)
p1 = plot(upperBB, color=aqua,  linewidth=1)
p2 = plot(lowerBB, color=aqua, linewidth=1)

//SMAs
sma = sma(close, p)
upex2 = sma * ((100 + d) / 100)
dnex2 = sma * ((100 - d) / 100)

upex3 = (upex2 + upperBB) / 2
dnex3 = (dnex2 + lowerBB) / 2

upex = max(upperBB, upex3)
dnex = min(lowerBB, dnex3)
//exit = (high > sma and low < sma)
exit = close > open


//Lines
col = showlines ? blue : na
plot(upex, linewidth = 3, color = col, transp = 0)
plot(sma, linewidth = 3, color = col, transp = 0)
plot(dnex, linewidth = 3, color = col, transp = 0)

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[p]))
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, limit = dnex)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, limit = upex)

if exit
    strategy.close_all()

Lebih banyak