새로운 양적 거래 전략, 이 전략은 주로 DMI 지표에 기반하여 시장 상황의 바닥과 꼭대기를 식별합니다. 이 글은 이 거래 전략의 원리와 장점, 그리고 잠재적인 위험을 자세히 설명합니다.
DMI 지표는 평균 방향 운동 지표 (Average Directional Movement Index) 로 불리며, 1970년대 웰스 윌더 (Welles Wilder) 에 의해 시장의 경향과 강도를 판단하기 위해 제안되었다. DMI 지표는 3개의 선으로 구성된다:
+DI가 DI를 넘어서면 상승세가 강화되는 것을 의미하며, 더 많은 것을 고려할 수 있습니다. +DI가 DI를 넘어서면 하락세가 강화되는 것을 의미하며, 공백을 고려할 수 있습니다.
이 전략의 핵심 논리는 다음과 같습니다.
즉, 역 DI 선이 수직 DI 선보다 현저하게 강할 때, 현재 추세가 반전될 것이라고 판단할 수 있으며, 이때 적절한 개입을 통해 역전작업을 할 수 있다.
오류를 필터링하기 위해, 이 정책은 DI의 평균선을 사용하며, 구체적인 파라미터는 다음과 같습니다:
평균선 변수를 조정하여 거래 신호의 빈도를 제어한다.
이 전략은 주로 NIFTY50 지수 옵션 거래에 적용되지만 다른 품종에도 사용할 수 있습니다. 특정 거래 시 평준 옵션을 선택하여 손실이 10% 이상인 경우 20%의 손실을 설정하고, 손실이 초기 투자 자금의 20% 이상을 확장하면 손실을 중단합니다.
간단한 DI 크로스 전략에 비해, 이 전략은 DI 지표의 평균선 필터링을 적용하여, 휘파람을 효과적으로 줄일 수 있으며, 거래 횟수를 줄일 수 있어 거래 비용과 슬라이드 포인트 손실을 줄일 수 있다.
단순한 트렌드 추적 전략에 비해, 이 전략은 트렌드 역점을 판단할 때 비교적 정확하며, 역점 근처의 거래 기회를 적시에 잡을 수 있다.
이 정책의 매개 변수를 최적화하는 것은 비교적 간단하며 효과 최적화를 실현하기 쉽다.
이 전략은 거래 신호의 방향을 제시하는 것뿐이며, 구체적인 스톱로스 요구사항은 개인의 위험 선호도에 따라 설정해야 합니다.
DMI 지표는 지역 정렬을 할 때 많은 가짜 신호를 생성할 수 있으며, 비 트렌드 시장에서 이 전략을 사용하는 것은 피해야 한다.
DI 교차는 100% 트렌드 전환점을 예측할 수 없으며, 일정 시간 순서 오류가 있습니다. 거래 신호를 검증하기 위해 다른 지표와 적절히 결합해야합니다.
이 전략은 DI 평평선 필터링을 통해 트렌드 반전 기회를 효과적으로 식별할 수 있다. 다른 트렌드 추적 전략에 비해 반전 식별 능력이 더 강하다. 전반적으로 이 전략의 매개 변수는 양적 거래 시스템의 모듈로 사용하기 위해 최적화되고 유연하다. 사용 시 잘못된 신호를 방지하고 시장 추세를 적절하게 평가하는 데 주의가 필요합니다.
/*backtest
start: 2023-09-05 00:00:00
end: 2023-09-12 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © email_analysts
// This code gives indication on the chart to go long based on DMI and exit based on RSI.
//Default value has been taken as 14 for DMI+ and 6 for RSI.
//@version=5
strategy(title="DMI Strategy", overlay=false)
lensig = input.int(11, title="ADX Smoothing", minval=1, maxval=50)
len = input.int(11, minval=1, title="DI Length")
up = ta.change(high)
down = -ta.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 = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / trur)
minus = fixnan(100 * ta.rma(minusDM, len) / trur)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
//plot(adx, color=#F50057, title="ADX")
plot(plus, color=color.green, title="+DI")
plot(minus, color=color.red, title="-DI")
hlineup = hline(40, color=#787B86)
hlinelow = hline(10, color=#787B86)
buy = plus < 10 and minus > 40
if buy
strategy.entry('long', strategy.long)
sell = plus > 40 and minus < 10
if sell
strategy.entry('short', strategy.short)