이 전략은 가격 채널 지표에 기반합니다. 모멘텀 매개 변수를 설정함으로써, 가격 채널의 중간선을 형성하기 위해 서로 다른 주기에 가장 높고 가장 낮은 가격의 평균 값을 계산하고, 이를 기반으로 긴 라인과 짧은 라인을 설정합니다. 가격이 긴 라인을 넘으면 길게 갈 때; 가격이 짧은 라인을 넘으면 짧게 갈 때. 종료 조건은 가격이 채널 중간선으로 회귀하는 것입니다.
이 전략은 가격 채널 지표를 사용하여 채널 중선을 형성하기 위해 서로 다른 사이클에서 가장 높고 가장 낮은 가격의 평균 값을 계산합니다. 중선을 기반으로 긴 라인과 짧은 라인이 전환 매개 변수를 통해 설정됩니다. 구체적으로 긴 라인 계산 공식은: 중선 + (중선 × 긴 라인 매개 변수 %); 짧은 라인 계산 공식은: 중선 + (중선 × 짧은 라인 매개 변수%)
가격이 긴 라인보다 낮을 때, 제한 명령으로 긴 포지션을 열고, 가격이 짧은 라인보다 높을 때, 제한 명령으로 짧은 포지션을 열고. 긴 포지션과 짧은 포지션의 스톱 로스 방법은 채널 중선으로 회귀하는 가격입니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략은 또한 몇 가지 위험을 안고 있습니다.
위의 위험은 매개 변수를 최적화하거나 손해를 막는 명령을 설정하거나 판단을 위해 다른 지표를 결합하여 완화 할 수 있습니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
가격 채널 지표에 기반한 이 전략의 설계 아이디어는 분명하다. 포지션을 열기 위해 브레이크아웃을 사용하면 위험을 효과적으로 제어할 수 있다. 그러나 또한 개선해야 할 큰 매개 변수 최적화 공간과 스톱 로스 메커니즘이 있다. 전반적으로, 전략은 특정 실용적 가치를 가지고 있으며 추가 테스트와 최적화를 가치가 있다.
/*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()