DMI DPO 경비 전략

저자:차오장, 날짜: 2024-01-04 17:56:28
태그:

img

전반적인 설명

이 전략은 트레이딩뷰에 내장된 두 가지 강력한 지표인 방향 움직임 지표 (Directional Movement Index, DMI) 와 유연 가격 오시레이터 (Detrended Price Oscillator, DPO) 를 결합하여 거래 결정을 위한 신뢰할 수 있는 기초를 형성한다. 전략의 핵심 논리는 DMI 황금 교차가 발생했을 때 DPO 값이 0보다 크는지, 그리고 그렇게 되면 긴 신호를 생성하는지 결정하는 것이다. 또는 DMI 죽은 교차가 발생했을 때 DPO 값이 0보다 작거나, 그렇게 되면 짧은 신호를 생성하는 것이다. 이것은 시장의 범위 제한 오시레이션 중에 생성되는 많은 잘못된 신호를 효과적으로 필터링할 수 있으며, 따라서 트렌드가 형성될 때만 거래 신호를 생성하여 오시레이션 중에 반복적인 스톱 손실을 피한다.

원칙

이 전략은 주로 트렌드 방향과 강도를 결정하기 위해 DMI 지표를 사용합니다. DMI 지표는 세 개의 곡선으로 구성됩니다: +DI, -DI 및 ADX. +DI는 상승 트렌드의 강도를 나타냅니다. -DI는 하락 트렌드의 강도를 나타냅니다. 그리고 그들의 교차점은 현재 트렌드 방향을 결정할 수 있습니다. ADX는 트렌드의 강도를 나타냅니다. 값이 높을수록 트렌드가 더 분명합니다. 그러나 ADX는 낮은 변동성 범위를 식별하는 데 좋지 않으므로이 전략은 ADX 결정을 제거하고 트렌드 방향을 결정하기 위해 +DI 및 -DI 교차점을 사용합니다.

범위에 묶인 오스실레이션에서 생성되는 잘못된 신호를 필터링하기 위해 DPO 지표가 보조 판단을 위해 도입됩니다. DPO 지표는 중간 레일에서 가격의 편차 정도를 나타냅니다. 가격이 중간 레일 위에있을 때 DPO는 긍정적이며 아래있을 때 부정적인 것입니다. 이 전략은 현재 트렌드에 있는지 판단하기 위해 DMI 지표의 긍정과 부정성을 사용합니다. DMI 지표가 넘어가지만 DPO 지표가 0 수준에 가깝다면 오스실레이션으로 결정되며 거래 신호가 생성되지 않습니다.

구체적으로 판단의 논리는 다음과 같습니다.

  1. +DI가 -DI 위에 넘어가면 황금색 십자이고, 황소시장을 나타냅니다. 이 때, DPO 지표가 0보다 크면 현재 상승 추세에 있음을 확인하고 긴 신호가 생성됩니다.

  2. -DI가 +DI 아래로 넘어가면 마른 십자이고, 하향 시장을 나타냅니다. 이 때, DPO 지표가 0보다 작으면 현재 하향 추세에 있음을 확인하고 짧은 신호가 생성됩니다.

  3. +DI/-DI가 교차하지만 DPO 지표가 0에 가깝다면, 오스실레이션으로 결정되며 신호가 생성되지 않습니다.

이점 분석

이 결합 전략의 가장 큰 장점은 트렌드를 식별하는 데 높은 정확성이며, 실제 트렌드 반전이 발생했을 때만 거래 신호를 생성하여 오스실레이션 간격에서 반복적 인 손실을 피하는 것입니다. 주요 장점은 다음과 같습니다.

  1. 트렌드 방향과 강도를 결정하기 위해 DMI 지표를 사용하는 것은 성숙하고 신뢰할 수있는 기술 지표입니다.

  2. DPO 지표의 도움으로 범위 내 오스실레이션에서 잘못된 신호를 필터링하고, 손실을 피하는 추세가 형성 될 때만 신호를 생성합니다.

  3. 여러 지표를 결합하면 상호 검증과 신호의 신뢰성을 향상시킬 수 있습니다.

  4. 전략 논리는 간단하고 이해하기 쉽고 구현하기 쉽고 자동화 또는 수동 거래에 적합합니다.

  5. 트렌드만 거래하기 때문에 상대적으로 높은 리스크 보상 비율을 얻을 수 있습니다.

위험 분석

이 전략은 매우 신뢰할 수 있지만 다음과 같은 위험 요소가 주목되어야 합니다.

  1. 갑작스러운 사건은 시장에서 큰 일방적인 움직임을 일으킬 수 있으며, 이러한 트렌드 기회를 놓칠 수도 있습니다. 이 위험은 DPO 매개 변수를 낮추면 감소 할 수 있습니다.

  2. DMI 표시기 자체 또한 잘못된 신호를 생성 할 수 있으며 이 위험은 완전히 피할 수 없습니다. 손실은 중지 설정으로 제어 할 수 있습니다.

  3. 또한 DPO 지표의 잘못된 매개 변수 설정은 잘못된 판단으로 이어질 수 있습니다. 최적의 매개 변수는 반복된 백테스팅을 통해 결정해야합니다.

  4. 거래 비용은 이익에 어느 정도 영향을 미치므로 거래 빈도를 통제해야합니다. 매개 변수를 최적화함으로써 유효하지 않은 거래가 감소 할 수 있습니다.

최적화

이 전략의 더 많은 최적화를 위한 여지가 있습니다.

  1. 신호 지연을 줄이고 수익률을 높이기 위해 최적의 매개 변수를 찾기 위해 다양한 매개 변수 조합을 테스트 할 수 있습니다.

  2. KDJ, MACD 등과 같은 다른 지표와 결합하여 신호 정확성을 향상시킬 수 있습니다.

  3. 적응 매개 변수는 다른 품종, 주기 등에 따라 설정하여 전략을 더 적응력있게 할 수 있습니다.

  4. 동적 스톱은 단일 손실을 제어하기 위해 설정할 수 있습니다. 트렌드 단계에 따라 다른 스톱 손실 진폭도 설정할 수 있습니다.

  5. 기계 학습 방법은 더 높은 수익을 위해 입출시기를 최적화하기 위해 사용될 수 있습니다.

요약

이 전략은 DMI와 DPO 지표의 장점을 결합하여 트렌드 반전을 판단하는 데 높은 정확성을 가지고 있으며 트렌드 생성을 신뢰할 수 있습니다. 동시에 DPO 지표의 사용은 범위 제한 변동으로 인한 소음을 효과적으로 필터링하여 비효율적인 거래를 피합니다. 이것은 자동화 거래 및 수동 채택에 적합한 효율적인 전략으로 만듭니다. 물론 더 나은 전략 성과를 위해 추가로 최적화 할 수있는 많은 세부 사항이 있습니다. 그러나 지표를 결합하는 아이디어는 양적 거래 전략 설계에 중요한 참조 의미를 가지고 있습니다.


/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("DMI DPO Guard Strategy", calc_on_order_fills=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, currency="USD", commission_type=strategy.commission.percent, commission_value=0.25)

///Tradingview's DMI indicator logic///
len = input(34, minval=1, title="DI Lookback")
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / trur)
minus = fixnan(100 * rma(minusDM, len) / trur)

plot(plus, color=color.orange, title="+DI")
plot(minus, color=color.aqua, title="-DI")


period_ = input(34, title="Length", minval=1)
isCentered = input(false, title="Centered")
barsback = period_/2 + 1
ma = sma(close, period_)
dpo = isCentered ? close[barsback] - ma : close - ma[barsback]
plot(dpo, offset = isCentered ? -barsback : 0, title="Detrended Price Oscillator", color=#C0C000)
hline(0, title="Zero Line", color = #C0C0C0)

long = crossover(plus, minus) and (dpo > 0)
short = crossunder(plus, minus) and (dpo < 0)

strategy.entry("Long", strategy.long, when=long)
strategy.entry("Short", strategy.short, when=short)




더 많은