Strategi Penembusan Jangkauan Dinamis

Penulis:ChaoZhang, Tanggal: 2023-11-21 15:03:19
Tag:

img

Gambaran umum

Strategi ini dirancang berdasarkan indikator Bollinger Bands untuk menciptakan strategi perdagangan breakout yang dinamis. Strategi ini menggabungkan kondisi filter tubuh lilin dan filter warna untuk mencari peluang masuk breakout di sekitar band bawah Bollinger. Keluar didasarkan pada filter tubuh. Strategi ini secara otomatis mengelola ukuran posisi dan risiko.

Logika Strategi

Perhitungan Indikator

Pertama, hitung garis dasar dan band bawah Bollinger Bands berdasarkan harga rendah:

src = low
basis = sma(src, length) 
dev = mult * stdev(src, length)
lower = basis - dev

Di mana src adalah harga rendah, panjang adalah periode perhitungan, basis adalah moving average, dev adalah standar deviasi, dan lebih rendah adalah band bawah.

mult biasanya ditetapkan menjadi 2, yang berarti band bawah adalah satu standar deviasi jauh.

Kondisi Filter

Strategi ini mencakup dua kondisi filter:

Filter tubuh lilinGunakan ukuran tubuh nbody dan abody rata-rata untuk menentukan, hanya menghasilkan sinyal perdagangan ketika nbody lebih besar dari setengah dari abody.

Filter Warna
Jangan lama ketika lilin menutup positif (close > open).

Sinyal Trading

Menghasilkan sinyal panjang ketika kondisi di bawah ini terpenuhi:

low < lower // price breaks lower band
close < open or usecol == false // color filter
nbody > abody / 2 or usebod == false // body filter  

Bila ukuran tubuh melebihi setengah dari rata-rata lagi, posisi dekat:

close > open and nbody > abody / 2  

Ukuran Posisi

Strategi menghitung ukuran perdagangan secara otomatis untuk pertumbuhan eksponensial posisi:

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

Pengendalian Risiko

Tambahkan batasan pada tahun, bulan dan tanggal untuk membatasi perdagangan hanya dalam kisaran tanggal tertentu:

when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))

Keuntungan

Jangkauan Perdagangan Dinamis

Bollinger lower band menyediakan area dukungan dinamis untuk menangkap retracements setelah tren.

Filter ganda

Kombinasi dari tubuh lilin dan filter warna mencegah pecahnya palsu secara efektif.

Pengukuran Posisi Otomatis

Ukuran posisi meningkat secara eksponensial hingga 100% mengelola risiko secara otomatis.

Jangka waktu

Menetapkan rentang tanggal mengurangi risiko yang terkait dengan volatilitas pasar pada periode tertentu.

Risiko

Penarikan Berpanjangan

Ketika tren naik yang kuat, BB tengah dan band atas dapat bergeser ke atas dengan cepat, menyebabkan penarikan yang berkepanjangan.

Solusi

Gabungkan dengan indikator tren, berhenti strategi ketika dinilai sebagai bull market untuk menghindari penarikan yang berkepanjangan.

Kegagalan Pencegahan

Penembusan mungkin gagal dengan mundur dan uji ulang band bawah.

Solusi

Tambahkan stop loss di bawah level support atau tambahkan logika untuk mendeteksi gagal uji ulang untuk stop loss cepat.

Peningkatan

Tambahkan Stop Loss

Optimalkan stop loss di bawah support berdasarkan hasil backtest.

Optimalkan Parameter

Fine tune body filter periode tinggal, COLOR filter dll untuk menemukan yang optimal.

Tambahkan Filter Tren

Hentikan strategi ketika dinilai sebagai bull market.

Kesimpulan

Strategi ini menggabungkan dukungan BB, filter bodi, filter warna dan logika breakout untuk menangkap retracement probabilitas tinggi.


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

//Noro
//2018

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

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
length = input(25, defval = 25, minval = 1, maxval = 200, title = "BB Period")
usebod = input(false, defval = false, title = "Use Body-Filter")
usecol = input(false, defval = false, title = "Use Color-Filter")
showar = input(false, defval = false, title = "Show Arrows")
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")

//Bollinger
src = low
mult = 2
basis = sma(src, length)
dev = mult * stdev(src, length)
lower = basis - dev
plot(lower, color = lime, linewidth = 3, title="Bottom Line")

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 2 or usebod == false

//Signals
up1 = low < lower and (close < open or usecol == false) and body
exit = close > open and nbody > abody / 2

//Arrows
needar = up1 and showar
plotarrow(needar ? 1 : na)

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

if up1
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Lebih banyak