모멘텀 가격 채널 오픈 및 종료 전략

저자:차오장, 날짜: 2023-12-06 16:44:32
태그:

img

전반적인 설명

이 전략은 가격 채널 지표에 기반합니다. 모멘텀 매개 변수를 설정함으로써, 가격 채널의 중간선을 형성하기 위해 서로 다른 주기에 가장 높고 가장 낮은 가격의 평균 값을 계산하고, 이를 기반으로 긴 라인과 짧은 라인을 설정합니다. 가격이 긴 라인을 넘으면 길게 갈 때; 가격이 짧은 라인을 넘으면 짧게 갈 때. 종료 조건은 가격이 채널 중간선으로 회귀하는 것입니다.

전략 원칙

이 전략은 가격 채널 지표를 사용하여 채널 중선을 형성하기 위해 서로 다른 사이클에서 가장 높고 가장 낮은 가격의 평균 값을 계산합니다. 중선을 기반으로 긴 라인과 짧은 라인이 전환 매개 변수를 통해 설정됩니다. 구체적으로 긴 라인 계산 공식은: 중선 + (중선 × 긴 라인 매개 변수 %); 짧은 라인 계산 공식은: 중선 + (중선 × 짧은 라인 매개 변수%)

가격이 긴 라인보다 낮을 때, 제한 명령으로 긴 포지션을 열고, 가격이 짧은 라인보다 높을 때, 제한 명령으로 짧은 포지션을 열고. 긴 포지션과 짧은 포지션의 스톱 로스 방법은 채널 중선으로 회귀하는 가격입니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 가격 채널 지표를 사용하면 가격 추세와 주요 지지/저항 수준을 효과적으로 파악할 수 있습니다.
  2. 브레이크에 대한 포지션 오픈은 가짜 브레이크로 인한 손실을 줄일 수 있습니다.
  3. 스톱 로스 방식은 추격 스톱으로 인한 과도한 손실을 피하기 위해 가격 채널 중선을 표준으로 직접 사용합니다.

위험 분석

이 전략은 또한 몇 가지 위험을 안고 있습니다.

  1. 가격 채널의 잘못된 매개 변수 설정은 활성 트렌드를 놓칠 수 있거나 너무 많은 잘못된 브레이크를 생성 할 수 있습니다.
  2. 브레이크오프닝 방식은 어느 정도 미끄러짐 비용을 부담합니다.
  3. 급격한 가격 상승을 통해 적시에 손실을 막을 수 없습니다.

위의 위험은 매개 변수를 최적화하거나 손해를 막는 명령을 설정하거나 판단을 위해 다른 지표를 결합하여 완화 할 수 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 가장 좋은 조합을 찾기 위해 가격 채널의 매개 변수를 최적화합니다.
  2. 촛불 패턴과 지표 신호와 같은 다른 오픈 방법을 시도하십시오.
  3. 급격한 가격 하락으로 인한 손실을 방지하기 위해 스톱 로스 오더 설정을 추가합니다.
  4. 거래량, 변동성 및 다른 지표를 결합하여 증권 시장에서 거짓 파장을 피하십시오.

결론

가격 채널 지표에 기반한 이 전략의 설계 아이디어는 분명하다. 포지션을 열기 위해 브레이크아웃을 사용하면 위험을 효과적으로 제어할 수 있다. 그러나 또한 개선해야 할 큰 매개 변수 최적화 공간과 스톱 로스 메커니즘이 있다. 전반적으로, 전략은 특정 실용적 가치를 가지고 있으며 추가 테스트와 최적화를 가치가 있다.


/*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()

더 많은