Strategi ini didasarkan pada indikator saluran harga. Dengan menetapkan parameter momentum, ia menghitung nilai rata-rata harga tertinggi dan terendah dalam siklus yang berbeda untuk membentuk garis tengah saluran harga, dan menetapkan garis panjang dan pendek berdasarkan ini. Ketika harga menembus garis panjang, itu akan panjang; ketika harga menembus garis pendek, itu akan pendek. Kondisi penutupan adalah bahwa harga regresi ke garis tengah saluran.
Strategi ini menggunakan indikator saluran harga untuk menghitung nilai rata-rata harga tertinggi dan terendah dalam siklus yang berbeda untuk membentuk garis tengah saluran. Berdasarkan garis tengah, garis panjang dan pendek ditetapkan melalui parameter pergeseran. Secara khusus, rumus perhitungan garis panjang adalah: garis tengah + (parameter garis tengah × garis panjang %); rumus perhitungan garis pendek adalah: garis tengah + (parameter garis tengah × garis pendek%).
Ketika harga lebih rendah dari garis panjang, buka posisi panjang dengan perintah batas; ketika harga lebih tinggi dari garis pendek, buka posisi pendek dengan perintah batas.
Strategi ini memiliki keuntungan berikut:
Strategi ini juga memiliki beberapa risiko:
Risiko di atas dapat dikurangi dengan mengoptimalkan parameter, menetapkan perintah stop loss, atau menggabungkan indikator lain untuk penilaian.
Strategi dapat dioptimalkan dalam aspek berikut:
Ide desain strategi ini berdasarkan indikator saluran harga jelas. Menggunakan breakout untuk membuka posisi dapat secara efektif mengendalikan risiko. Tetapi ada juga ruang optimasi parameter yang besar dan mekanisme stop loss yang perlu ditingkatkan. Secara keseluruhan, strategi ini memiliki nilai praktis tertentu dan layak untuk pengujian dan optimasi lebih lanjut.
/*backtest start: 2022-11-29 00:00:00 end: 2023-12-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Noro's PCMA Strategy v1.0", shorttitle = "PCMA 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") per = input(3, title = "Length") shortlevel = input(10.0, title = "Short line (red)") longlevel = input(-5.0, title = "Long line (lime)") 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") //Price Channel h = highest(high, per) l = lowest(low, per) c = (h + l) / 2 ll = c + ((c / 100) * longlevel) sl = c + ((c / 100) * shortlevel) //Lines shortcolor = needshort ? red : na longcolor = needlong ? lime : na plot(sl, linewidth = 2, color = shortcolor, title = "Short line") plot(c, linewidth = 2, color = blue, title = "SMA line") plot(ll, linewidth = 2, color = longcolor, title = "Long line") //Trading size = strategy.position_size lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] if (not na(close[per])) and size == 0 and needlong strategy.entry("L", strategy.long, lot, limit = ll, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if (not na(close[per])) and size == 0 and needshort strategy.entry("S", strategy.short, lot, limit = sl, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if (not na(close[per])) and size > 0 strategy.entry("Close", strategy.short, 0, limit = c, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if (not na(close[per])) and size < 0 strategy.entry("Close", strategy.long, 0, limit = c, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()