Strategi ini berdasarkan pada penunjuk saluran harga. Dengan menetapkan parameter momentum, ia mengira nilai purata harga tertinggi dan terendah dalam kitaran yang berbeza untuk membentuk garisan tengah saluran harga, dan menetapkan garis panjang dan pendek berdasarkan ini. Apabila harga menembusi garis panjang, ia pergi panjang; apabila harga menembusi garis pendek, ia pergi pendek. Syarat penutupan adalah bahawa harga regresi ke garisan tengah saluran.
Strategi ini menggunakan penunjuk saluran harga untuk mengira nilai purata harga tertinggi dan terendah dalam kitaran yang berbeza untuk membentuk garis tengah saluran. Berdasarkan garis tengah, garis panjang dan pendek ditetapkan melalui parameter pergeseran. Khususnya, formula pengiraan garis panjang adalah: garis tengah + (parameter garis tengah × garis panjang%); formula pengiraan garis pendek adalah: garis tengah + (parameter garis tengah × garis pendek%).
Apabila harga lebih rendah daripada garis panjang, buka kedudukan panjang dengan pesanan had; apabila harga lebih tinggi daripada baris pendek, buka kedudukan pendek dengan pesanan had. Kaedah stop loss untuk kedudukan panjang dan pendek adalah harga regresi ke saluran pertengahan.
Strategi ini mempunyai kelebihan berikut:
Strategi ini juga mempunyai beberapa risiko:
Risiko di atas boleh dikurangkan dengan mengoptimumkan parameter, menetapkan perintah stop loss, atau menggabungkan penunjuk lain untuk penilaian.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Idea reka bentuk strategi ini berdasarkan penunjuk saluran harga adalah jelas. Menggunakan breakout untuk membuka kedudukan dapat mengawal risiko dengan berkesan. Tetapi terdapat juga ruang pengoptimuman parameter yang besar dan mekanisme stop loss yang perlu ditingkatkan. Secara keseluruhan, strategi ini mempunyai nilai praktikal tertentu dan bernilai pengujian dan pengoptimuman 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()