가격 모멘텀 지표를 사용한 추세 추종 전략


생성 날짜: 2024-01-17 13:58:19 마지막으로 수정됨: 2024-01-17 13:58:19
복사: 1 클릭수: 540
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

가격 모멘텀 지표를 사용한 추세 추종 전략

개요

이 전략은 가격 동력 지표를 활용하여 실현되는 트렌드 추적 전략이다. 이는 일정 주기 동안의 종결 가격 변화를 계산하여 시장의 추세를 판단하고, 가격이 지속되는 상승 또는 하락 추세에 나타나면, 상응하는 상장 또는 상하 작업을 수행한다.

전략 원칙

이 전략의 핵심 지표는 가격의 운동 (momentum) 이다. 운동의 계산 공식은 다음과 같다.

momentum = close - close[n]

여기서 n는 동력주기의 길이를 나타냅니다. Momentum > 0일 때, 현재주기 동안 가격이 계속 상승하고 있음을 나타냅니다.

이 전략은 먼저 confirmBars 파라미터를 설정하여 몇 개의 K 선의 트렌드 판단이 필요하다는 것을 나타냅니다. 재검토 범위 내에서, 만약 momentum > 0 지속 confirmBars 루트 K 선이라면, 더 많은 진입을 수행합니다. 만약 momentum < 0 지속 confirmBars 루트 K 선이라면, 공백 진입을 수행합니다.

이 전략의 경향을 판단하는 핵심은 bcount과 scount 변수를 통해 momentum 연속적으로 0보다 크거나 작은 K 선의 수를 통계적으로 계산하는 데 있습니다. 해당 조건이 충족되면 +1, 만족하지 않으면 0으로 돌아갑니다. 카운트가 confirmBars에 도달하면 해당 거래를 더하거나 공백으로 수행합니다.

전략적 이점

이 전략은 매우 간단하며 다음과 같은 장점을 가지고 있습니다.

  1. 간단한 논리, 이해하기 쉬운 구현
  2. 동력 지표는 가격 변화에 민감하여 트렌드를 빠르게 잡을 수 있습니다.
  3. 설정 가능한 변수 조정 판단 민감도
  4. 다양한 시장 환경에서 사용할 수 있습니다.

전략적 위험

이 전략에는 몇 가지 위험도 있습니다.

  1. 여러 번의 충격적 거래와 과도한 거래가 발생할 수 있습니다.
  2. 합리적으로 구성된 파라미터, 특히 ConfirmBars 필터 흔들림이 필요합니다.
  3. 시장의 갑작스러운 사건에 대한 효율적인 대응이 불가능하다
  4. 리드 디스크와 차이가 있을 수 있으며, 데이터 확인과 추가 변수 최적화가 필요합니다.

전략 최적화 방향

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

  1. 단편 거래 위험을 제어하기 위한 스톱 로직을 추가합니다.
  2. 가격 변동으로 인한 잘못된 신호를 방지하기 위해 을 추가합니다.
  3. 다양한 품종과 시장 환경에 따라 수정된 confirmBars와 같은 파라미터
  4. 다중 요소 판단을 추가하고, 다른 지표와 결합하여 입학을 확정합니다.
  5. 기계학습을 사용하여 변수와 필터링 규칙을 조정합니다.

요약하다

전체적으로 볼 때, 이 동적 돌파 전략은 양적 거래에 적합한 간단한 실용적인 트렌드 추적 전략 중 하나입니다. 적용 과정에서 거래 주파수를 제어하고 과도한 거래와 거래 비용을 방지하는 문제에 주의를 기울여야 합니다. 동시에, 매개 변수와 필터링 규칙은 실제 품종과 시장 환경에 따라 조정 및 최적화가 필요합니다.

전략 소스 코드
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Momentum Strategy [TS Trader]", overlay=true)

confirmBars = input(1)
momentumLength = input(14, title="Momentum Length")

price = close
momentum = close - close[momentumLength]

// === INPUT BACKTEST RANGE ===
fromYear = input.int(2019, title="Backtest Start Year")
fromMonth = input.int(1, title="Backtest Start Month", minval=1, maxval=12)
fromDay = input.int(1, title="Backtest Start Day", minval=1, maxval=31)
toYear = input.int(2023, title="Backtest End Year")
toMonth = input.int(12, title="Backtest End Month", minval=1, maxval=12)
toDay = input.int(31, title="Backtest End Day", minval=1, maxval=31)

startTimestamp = timestamp(fromYear, fromMonth, fromDay, 00, 00)
endTimestamp = timestamp(toYear, toMonth, toDay, 23, 59)

inBacktestRange = true

// === STRATEGY LOGIC ===
bcond = momentum > 0
bcount = 0
bcount := bcond ? nz(bcount[1]) + 1 : 0
if (bcount == confirmBars and inBacktestRange)
    strategy.entry("Buy", strategy.long, comment="Long")

scond = momentum < 0
scount = 0
scount := scond ? nz(scount[1]) + 1 : 0
if (scount == confirmBars and inBacktestRange)
    strategy.entry("Sell", strategy.short, comment="Short")

// Plotting Momentum
plot(momentum, title="Momentum", color=color.purple)