Strategi ini berdasarkan konsep Bollinger Bands, menetapkan rel atas dan bawah untuk saluran harga dan menggunakannya untuk penghakiman trend dan penjanaan isyarat perdagangan. Khususnya, ia mengira penyesuaian mutlak purata harga sebagai lebar jalur saluran. Rel tengah saluran adalah purata bergerak mudah harga, dan rel atas dan bawah adalah rel tengah ditambah atau dikurangkan 1 atau 2 kali lebar saluran. Apabila harga memecahkan rel atas, pergi panjang. Apabila ia memecahkan rel bawah, pergi pendek.
Perkara utama strategi ini termasuk:
Mengira rel tengah harga, yang merupakan purata bergerak mudah harga.
Hitung purata bergerak mudah penyimpangan mutlak harga sebagai lebar jalur saluran.
Tentukan rel atas dan bawah mengikut rel tengah dan lebar jalur. Rel atas adalah rel tengah ditambah 1 atau 2 kali lebar jalur. Rel bawah adalah rel tengah dikurangkan 1 atau 2 kali lebar jalur.
Mengira penunjuk penilaian trend untuk panjang dan pendek. Apabila harga di atas rel atas 2, ia panjang. Apabila harga di bawah rel bawah 2, ia pendek.
Menghasilkan isyarat perdagangan. Apabila harga melintasi di atas rel atas 2, pergi panjang. Apabila ia melintasi di bawah rel bawah 2, pergi pendek.
Tetapkan barisan stop loss. barisan stop loss untuk pesanan panjang adalah rel bawah 1, dan untuk pesanan pendek ia adalah rel atas 1.
Mengira saiz kedudukan mengikut keperluan pengurusan modal.
Strategi ini mengintegrasikan idea menggunakan purata bergerak untuk menilai trend, Bollinger Bands untuk menilai overbought dan oversold, dan breakout untuk membuat pembalikan.
Kelebihan utama strategi ini ialah:
Sistem dua rel dapat menilai kekuatan trend dengan lebih baik.
Bollinger Bands mempunyai fungsi regresi yang kuat untuk mengelakkan pecah palsu dengan berkesan.
Perbezaan antara rel dua gabungan dengan regresi Bollinger Bands membentuk isyarat perdagangan yang agak stabil.
Terdapat logik stop loss / keluar yang jelas untuk mengawal risiko.
Ukuran kedudukan mengikuti keperluan pengurusan modal, mengelakkan leverage super.
Idea strategi adalah jelas dan mudah difahami dan dioptimumkan.
Tetapan parameter yang fleksibel menjadikannya dapat disesuaikan untuk pasaran yang berbeza.
Strategi ini juga mempunyai beberapa risiko:
Parameter Bollinger Bands yang tidak betul boleh menyebabkan kesan penyingkiran, gagal untuk mengesan harga dengan berkesan.
Perbezaan antara rel dua tidak dapat sepenuhnya mengelakkan pertimbangan trend yang salah.
Ia boleh menghasilkan isyarat yang lebih tidak sah di pasaran terhad julat.
Kerugian mungkin berlaku dalam situasi pecah palsu.
Terdapat beberapa kelewatan masa, mungkin hilang titik giliran kitaran.
Nisbah risiko / ganjaran terhad oleh titik stop loss, tidak dapat mengejar trend tanpa had.
Langkah pengurusan risiko yang sepadan:
Mengoptimumkan parameter untuk menjadikan Bollinger Bands dapat disesuaikan dengan kitaran yang berbeza.
Gabungkan penunjuk lain untuk pengesahan untuk mengelakkan penilaian yang salah.
Mengurangkan saiz kedudukan untuk mengawal kerugian tunggal.
Mengoptimumkan titik stop loss untuk memastikan nisbah risiko / ganjaran.
Pendekkan kitaran dengan betul untuk mengurangkan kelewatan.
Kawalan risiko harus kuat, tidak ada pengejaran tanpa had.
Strategi ini boleh dioptimumkan ke arah berikut:
Mengoptimumkan parameter Bollinger Bands untuk pengesanan harga yang lebih baik.
Cuba purata bergerak yang berbeza seperti EMA, DWMA, dan lain-lain.
Tambah penapisan trend untuk mengelakkan dagangan di pasaran yang terikat julat.
Tambah kaedah keluar yang agresif untuk menangkap lebih banyak keuntungan trend.
Memperkenalkan pelbagai jangka masa untuk gabungan, sesuai dengan keadaan pasaran yang berbeza.
Tambah syarat tambahan seperti lonjakan jumlah untuk mengelakkan pecah palsu.
Pertimbangkan Bollinger Band terbalik, menjual band atas, membeli band bawah.
Melakukan pengoptimuman parameter untuk kombinasi parameter terbaik.
Idea keseluruhan strategi ini jelas dan stabil. Terdapat juga ruang untuk peningkatan melalui pengoptimuman parameter, peningkatan logik, pengurusan risiko dan lain-lain untuk memperhaluskannya menjadi strategi perdagangan kuantitatif yang sangat praktikal. Strategi ini memberikan rujukan yang baik untuk pemula dalam perdagangan kuantitatif.
/*backtest start: 2022-11-09 00:00:00 end: 2023-11-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © noro //@version=4 strategy(title = "Noro's Bands Strategy", shorttitle = "Bands", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, commission_value = 0.1) //Sattings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") len = input(20, defval = 20, minval = 1, maxval = 1000, title = "Length") src = input(ohlc4, title = "Source") showbb = input(true, title = "Show Bands") showof = input(true, title = "Show Offset") showbg = input(false, title = "Show Background") 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") //PriceChannel lasthigh = highest(src, len) lastlow = lowest(src, len) center = (lasthigh + lastlow) / 2 //Distance dist = abs(src - center) distsma = sma(dist, len) hd = center + distsma ld = center - distsma hd2 = center + distsma * 2 ld2 = center - distsma * 2 //Trend trend = 0 trend := high > hd2 ? 1 : low < ld2 ? -1 : trend[1] bgcol = showbg == false ? na : trend == 1 ? color.lime : color.red bgcolor(bgcol, transp = 70) //Lines colo = showbb == false ? na : color.black offset = showof ? 1 : 0 plot(hd2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 2") plot(hd, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 1") plot(center, color = colo, linewidth = 1, transp = 0, offset = offset, title = "center") plot(ld, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 1") plot(ld2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 2") //Trading size = strategy.position_size needstop = needlong == false or needshort == false truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59) lot = 0.0 lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1] if distsma > 0 strategy.entry("Long", strategy.long, lot, stop = hd2, when = truetime and needlong) strategy.entry("Short", strategy.short, lot, stop = ld2, when = truetime and needshort) sl = size > 0 ? ld2 : size < 0 ? hd2 : na if size > 0 and needstop strategy.exit("Stop Long", "Long", stop = sl) if size < 0 and needstop strategy.exit("Stop Short", "Short", stop = sl) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("Long") strategy.cancel("Short")