
Strategi ini didasarkan pada indikator saluran harga, yang mengatur parameter momentum, yang membentuk garis tengah saluran harga dengan menghitung rata-rata harga tertinggi dan terendah dari berbagai siklus, dan dengan ini menjadi acuan untuk menetapkan garis panjang dan garis pendek. Ketika harga menerobos garis panjang, lakukan lebih banyak; Ketika harga menerobos garis pendek, lakukan lebih banyak.
Strategi ini menggunakan indikator saluran harga untuk menghitung rata-rata harga tertinggi dan terendah dalam periode yang berbeda, membentuk garis tengah saluran harga. Dengan garis tengah sebagai dasar, atur garis panjang dan garis pendek melalui parameter shift. Secara khusus, rumus untuk menghitung garis panjang adalah: garis tengah + ((( garis tengah × garis panjang parameter%); rumus untuk menghitung garis pendek adalah: garis tengah + ((( garis tengah × garis pendek parameter%).
Bila harga lebih rendah dari garis panjang, bukalah dengan menggunakan opsi tunggal dengan harga terbatas; bila harga lebih tinggi dari garis pendek, bukalah dengan opsi tunggal dengan harga terbatas. Stop loss untuk opsi ganda adalah harga kembali ke saluran tengah.
Strategi ini memiliki keuntungan sebagai berikut:
Strategi ini juga memiliki beberapa risiko:
Risiko ini dapat dikurangi dengan mengoptimalkan parameter, menetapkan stop loss, atau menggabungkan penilaian indikator lainnya.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Strategi ini didasarkan pada indikator desain saluran harga yang jelas, menggunakan breakout open position dapat mengontrol risiko secara efektif. Namun, ada ruang untuk optimasi parameter yang lebih besar, mekanisme stop loss yang harus disempurnakan, dan lain-lain. Secara keseluruhan, strategi ini memiliki nilai praktis tertentu, layak untuk diuji dan dioptimalkan 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()