추진 전략

저자:차오장, 날짜: 2023-09-26 15:16:56
태그:

전반적인 설명

추진력 전략은 가격 움직임에 따라 가격 추세를 따르는 거래 전략이다. 특정 기간 동안 가격 변화를 계산하여 거래 신호를 생성한다. 가격 상승 추세가 확인되면 구매 신호를 유발한다. 가격 하락 추세가 확인되면 판매 신호를 유발한다. 이 전략은 트레이딩 신호를 생성하기 위해 이중 추진력 지표 크로스오버를 사용합니다.

전략 논리

이 전략은 N 기간 전의 종료 가격과 비교하여 종료 가격의 변화를 측정하여 가격 동력을 계산합니다.

첫 번째 모멘텀 지표 MOM0는 다음과 같이 계산됩니다.

MOM0 = CLOSE - CLOSE[N]

여기서 CLOSE는 현재 기간의 종료 가격이고 CLOSE[N]는 N 기간 전의 종료 가격입니다. MOM0 > 0은 현재 종료 가격이 N 기간 전보다 높다는 것을 나타냅니다. MOM0 < 0은 현재 종료 가격이 N 기간 전보다 낮다는 것을 나타냅니다.

두 번째 모멘텀 지표 MOM1는 다음과 같이 계산됩니다.

MOM1 = MOM0 - MOM0 [1]

현재 MOM0과 이전 기간의 MOM0 사이의 차이를 계산합니다. MOM1 > 0은 MOM0이 증가하고 MOM1 < 0은 MOM0이 감소하는 것을 나타냅니다.

세 번째 모멘텀 지표 MOM2는 다음과 같이 계산됩니다.

MOM2 = CLOSE - CLOSE [1]

현재 종료 가격과 전기 종료 가격의 차이를 계산합니다. MOM2 > 0은 종료 가격이 상승하고 MOM2 < 0은 종료 가격이 감소하는 것을 나타냅니다.

MOM0 > 0과 MOM1 > 0이 되면, 이 모멘텀이 지속적으로 상승하고 있다는 것을 나타내고 구매 신호를 트리거합니다. MOM0 < 0과 MOM2 < 0이 되면, 이 모멘텀이 지속적으로 감소하고 있다는 것을 나타내고 판매 신호를 트리거합니다.

코드는 또한 시간 조건 time_cond을 포함하여 지정된 백테스팅 시간 범위 내에서 신호를 생성합니다. 신호가 사라지면 원치 않는 명령을 피하기 위해 주문을하기 전에 조건을 다시 확인합니다.

이점 분석

  • 가격 수준 자체에 관계없이 가격 변화 추세를 포착합니다. 최고치를 추격하고 최저치를 죽이는 것을 피합니다.
  • 이중 추진력 표시기 크로스오버는 잘못된 브레이크를 필터하고 잘못된 신호를 피합니다.
  • 추가 시간 및 상태 검사 불필요한 거래를 피합니다
  • 단순하고 이해하기 쉬운 논리, 실행하기 쉬운
  • 다양한 시장 환경에 맞게 조정 가능한 유연한 매개 변수

위험 분석

  • 동력 지표는 지연이 있고 전환점을 놓칠 수 있습니다.
  • 이중 지표 크로스오버는 필터레이션을 증가시키지만 일부 기회를 놓칠 수도 있습니다.
  • 가격 상승이나 하락의 힘과 속도를 결정할 수 없습니다.
  • 매개 변수는 신중한 선택이 필요합니다. 너무 민감한 설정은 거래 빈도와 미끄러짐 비용을 증가시킬 수 있습니다.
  • 성능은 매개 변수 최적화에 의존하고, 매개 변수는 다른 기간에 대한 조정이 필요합니다

위험은 모멘텀 기간을 단축하거나 트렌드 결정을 추가하거나 스톱 로스를 구성하여 줄일 수 있습니다. 추가 필터링을 위해 볼륨 지표도 고려 될 수 있습니다.

최적화 방향

  • ROC, RSI 등과 같은 다른 모멘텀 계산 방법을 테스트합니다.
  • 유행 결정 추가 범위 시장에서 을 피하기 위해
  • 단일 거래 손실을 통제하기 위해 스톱 로스 전략을 사용
  • 부피 지원을 보장하기 위해 부피 표시기와 결합
  • 동적 매개 변수 최적화를 위한 기계 학습 알고리즘을 도입
  • 단기 및 장기적 동향을 구분하기 위한 다중 시간 프레임 전략
  • 시장 간의 가격 관계를 이용한 시장 간 중재 전략을 고려하십시오.

요약

추진력 전략은 가격 수준이 아닌 가격 변화 추세를 따르며, 상승 및 하락 가격 움직임을 잡기 위해 시장 추진력 방향을 효과적으로 파악합니다. 그러나 추진력은 지체 특성을 가지고 있으며 매개 변수 선택과 조합 최적화는 전략 성과에 중요합니다. 이 전략은 두 개의 추진력 지표 크로스오버를 기본으로 사용하여 약간의 소음을 필터합니다. 성능은 매개 변수 지속적인 최적화, 새로운 기술적 지표 통합 및 기계 학습 기술을 활용하여 더욱 향상되고 위험을 제어 할 수 있습니다.


/*backtest
start: 2022-09-25 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Momentum Strategy", overlay = false, precision = 2, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash, commission_type = strategy.commission.percent, commission_value = 0, calc_on_every_tick = true)

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-02T00:00:00"), title = "Start Date", type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), title = "End Date",type = input.time)
 
time_cond  = true

i_len           =       input(defval = 12,      title = "Length",       minval = 1)
i_src           =       input(defval = close,   title = "Source")
i_percent       =       input(defval = true,    title = "Percent?")
i_mom           =       input(defval = "MOM2",  title = "MOM Choice",   options = ["MOM1", "MOM2"])

momentum(seria, length, percent) =>
	_mom        =       percent ? ( (seria / seria[length]) - 1) * 100 : seria - seria[length]
	_mom

mom0        =       momentum(i_src, i_len, i_percent)
mom1        =       momentum(mom0, 1, i_percent)
mom2        =       momentum(i_src, 1, i_percent)

momX        =       mom1

if i_mom == "MOM2"
    momX    :=     mom2

if (mom0 > 0 and momX > 0 and time_cond)
    strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE")
else
	strategy.cancel("MomLE")
if (mom0 < 0 and momX < 0 and time_cond)
	strategy.entry("MomSE", strategy.short, stop = low - syminfo.mintick, comment = "MomSE")
else
	strategy.cancel("MomSE")

plot(mom0, color = #00bcd4, title = "MOM")
plot(mom1, color = #00FF00, title = "MOM1", display = display.none)
plot(mom2, color = #00FF00, title = "MOM2")

더 많은