Strategi ini didasarkan pada konsep Bollinger Bands, menetapkan rel atas dan bawah untuk saluran harga dan menggunakannya untuk penilaian tren dan generasi sinyal perdagangan. Secara khusus, ini menghitung deviasi mutlak rata-rata harga sebagai lebar jalur saluran. rel tengah saluran adalah rata-rata bergerak sederhana dari harga, dan rel atas dan bawah adalah rel tengah ditambah atau dikurangi 1 atau 2 kali lebar jalur saluran. Ketika harga menembus rel atas, pergi panjang. Ketika menembus rel bawah, pergi pendek.
Poin utama dari strategi ini meliputi:
Hitung rel tengah harga, yang merupakan rata-rata pergerakan sederhana harga.
Hitung rata-rata bergerak sederhana dari penyimpangan mutlak harga sebagai bandwidth saluran.
Tentukan rel atas dan bawah sesuai dengan rel tengah dan bandwidth. rel atas adalah rel tengah ditambah 1 atau 2 kali bandwidth. rel bawah adalah rel tengah dikurangi 1 atau 2 kali bandwidth.
Menghitung indikator penilaian tren untuk panjang dan pendek. Ketika harga di atas rel atas 2, itu panjang. Ketika harga di bawah rel bawah 2, itu pendek.
Saat harga melintasi rel atas 2, pergi panjang. Saat melintasi rel bawah 2, pergi pendek.
Setel stop loss line. Stop loss line untuk order panjang adalah rail bawah 1, dan untuk order pendek adalah rail atas 1.
Menghitung ukuran posisi sesuai dengan persyaratan manajemen modal.
Strategi ini mengintegrasikan gagasan menggunakan moving average untuk menilai tren, Bollinger Bands untuk menilai overbought dan oversold, dan breakout untuk melakukan pembalikan.
Keuntungan utama dari strategi ini adalah:
Sistem dual-rail dapat lebih baik menilai kekuatan tren.
Bollinger Bands memiliki fungsi regresi yang kuat untuk secara efektif menghindari false breakout.
Perbedaan antara dual rails dikombinasikan dengan regresi Bollinger Bands membentuk sinyal perdagangan yang relatif stabil.
Ada logika stop loss/exit yang jelas untuk mengendalikan risiko.
Ukuran posisi mengikuti persyaratan manajemen modal, menghindari leverage super.
Ide strategi jelas dan mudah dipahami dan dioptimalkan.
Pengaturan parameter yang fleksibel membuatnya dapat disesuaikan untuk pasar yang berbeda.
Strategi ini juga memiliki beberapa risiko:
Parameter Bollinger Bands yang tidak tepat dapat menyebabkan efek ditching, gagal melacak harga secara efektif.
Perbedaan antara rel ganda tidak dapat sepenuhnya menghindari penilaian tren yang salah.
Hal ini dapat menghasilkan sinyal yang lebih tidak valid di pasar yang terikat jangkauan.
Kerugian dapat terjadi dalam situasi breakout palsu.
Ada beberapa keterlambatan waktu, mungkin hilang titik giliran siklus.
Rasio risiko / imbalan dibatasi oleh titik stop loss, tidak dapat mengejar tren tanpa batas.
Langkah-langkah manajemen risiko yang sesuai:
Mengoptimalkan parameter untuk membuat Bollinger Bands dapat beradaptasi dengan siklus yang berbeda.
Gabungkan indikator lain untuk konfirmasi untuk menghindari penilaian yang salah.
Kurangi ukuran posisi untuk mengendalikan kerugian tunggal.
Optimalkan titik stop loss untuk memastikan rasio risiko / imbalan.
Singkatkan siklus dengan tepat untuk mengurangi lag.
Pengendalian risiko harus kuat, tidak ada pengejaran tanpa batas.
Strategi dapat dioptimalkan dalam arah berikut:
Mengoptimalkan parameter Bollinger Bands untuk pelacakan harga yang lebih baik.
Coba rata-rata bergerak yang berbeda seperti EMA, DWMA, dll.
Tambahkan penyaringan tren untuk menghindari perdagangan di pasar yang terikat rentang.
Tambahkan metode keluar yang agresif untuk menangkap lebih banyak keuntungan tren.
Memperkenalkan beberapa kerangka waktu untuk kombinasi, cocok untuk kondisi pasar yang berbeda.
Tambahkan kondisi tambahan seperti lonjakan volume untuk menghindari kebocoran palsu.
Pertimbangkan Bollinger Band terbalik, menjual band atas, membeli band bawah.
Melakukan optimasi parameter untuk kombinasi parameter terbaik.
Ide keseluruhan dari strategi ini jelas dan stabil. Ada juga ruang untuk perbaikan melalui optimasi parameter, peningkatan logika, manajemen risiko dll untuk lebih menyempurnakannya menjadi strategi perdagangan kuantitatif yang sangat praktis. Strategi ini memberikan referensi yang baik bagi 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")