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.
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.
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.
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
Strategi mengira saiz perdagangan secara automatik untuk pertumbuhan eksponen kedudukan:
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
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))
Band bawah Bollinger menyediakan kawasan sokongan dinamik untuk menangkap retracements selepas trend.
Gabungan badan lilin dan penapis warna mengelakkan pecah palsu dengan berkesan.
Saiz kedudukan meningkat secara eksponensial kepada 100% menguruskan risiko secara automatik.
Menetapkan julat tarikh mengurangkan risiko yang berkaitan dengan turun naik pasaran dalam tempoh tertentu.
Apabila trend menaik yang kuat, jalur BB tengah dan atas boleh bergeser ke atas dengan cepat, menyebabkan penurunan yang berpanjangan.
Gabungkan dengan penunjuk trend, hentikan strategi apabila dinilai sebagai pasaran bull untuk mengelakkan penurunan yang berpanjangan.
Penembusan mungkin gagal dengan menarik balik dan menguji semula jalur bawah.
Tambah stop loss di bawah tahap sokongan atau tambahkan logik untuk mengesan gagal ujian semula untuk stop loss cepat.
Mengoptimumkan stop loss di bawah sokongan berdasarkan hasil backtest.
Fine tune badan penapis tempoh tinggal, COLOR penapis dan lain-lain untuk mencari optimum.
Hentikan strategi apabila dilihat sebagai pasaran bull.
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()