Strategi Penembusan Julat Dinamik

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

img

Ringkasan

Strategi ini direka berdasarkan penunjuk Bollinger Bands untuk membuat strategi perdagangan breakout dinamik. Ia menggabungkan keadaan penapis badan lilin dan penapis warna untuk mencari peluang masuk breakout di sekitar band bawah Bollinger. Keluar berdasarkan penapis badan. Strategi ini secara automatik menguruskan saiz kedudukan dan risiko.

Logika Strategi

Pengiraan Penunjuk

Pertama, mengira garis asas 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 tempoh pengiraan, asas adalah purata bergerak, dev adalah penyimpangan standard, dan lebih rendah adalah jalur bawah.

mult biasanya ditetapkan kepada 2, yang bermaksud jalur bawah adalah satu penyimpangan piawai.

Keadaan penapis

Strategi ini merangkumi dua keadaan penapis:

Penapis badan lilinGunakan saiz badan nbody dan abody purata untuk menentukan, hanya menjana isyarat perdagangan apabila nbody adalah lebih besar daripada separuh dari abody.

Penapis Warna
Jangan lama apabila lilin menutup positif (tutup > terbuka). ini mengelakkan pecah palsu di kepala hbox.

Isyarat Perdagangan

Menghasilkan isyarat panjang apabila syarat di bawah dipenuhi:

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

Apabila saiz badan melebihi separuh daripada purata lagi, kedudukan dekat:

close > open and nbody > abody / 2  

Pengukuran Kedudukan

Strategi mengira saiz perdagangan secara automatik untuk pertumbuhan eksponen kedudukan:

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

Kawalan Risiko

Tambah sekatan pada tahun, bulan dan tarikh untuk mengehadkan perdagangan hanya dalam julat tarikh tertentu:

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

Kelebihan

Julat Dagangan Dinamis

Band bawah Bollinger menyediakan kawasan sokongan dinamik untuk menangkap retracements selepas trend.

Penapis berganda

Gabungan badan lilin dan penapis warna mengelakkan pecah palsu dengan berkesan.

Pengukuran Kedudukan Automatik

Saiz kedudukan meningkat secara eksponensial kepada 100% menguruskan risiko secara automatik.

Julat Tarikh

Menetapkan julat tarikh mengurangkan risiko yang berkaitan dengan turun naik pasaran dalam tempoh tertentu.

Risiko

Pengurangan Berpanjangan

Apabila trend menaik yang kuat, jalur BB tengah dan atas boleh bergeser ke atas dengan cepat, menyebabkan penurunan yang berpanjangan.

Penyelesaian

Gabungkan dengan penunjuk trend, hentikan strategi apabila dinilai sebagai pasaran bull untuk mengelakkan penurunan yang berpanjangan.

Penembusan yang gagal

Penembusan mungkin gagal dengan menarik balik dan menguji semula jalur bawah.

Penyelesaian

Tambah stop loss di bawah tahap sokongan atau tambahkan logik untuk mengesan gagal ujian semula untuk stop loss cepat.

Peningkatan

Tambah Stop Loss

Mengoptimumkan stop loss di bawah sokongan berdasarkan hasil backtest.

Mengoptimumkan Parameter

Fine tune badan penapis tempoh tinggal, COLOR penapis dan lain-lain untuk mencari optimum.

Tambah Penapis Trend

Hentikan strategi apabila dilihat sebagai pasaran bull.

Kesimpulan

Strategi ini menggabungkan sokongan BB, penapis badan, penapis warna dan logik pecah untuk menangkap retracements kebarangkalian 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 lanjut