이 전략은 동적 변동 지표 ((DMI) 를 기반으로 거래한다. DMI는 가격과 다양한 길이의 평균선과의 비율의 편차를 계산하여 추세를 판단한다.
거래 논리는 다음과 같습니다.
가격과 긴 주기 평균선 (예: 200일) 의 비율 오차를 계산하여 1 DMI로
가격의 중간 주기 평균선 (예: 50일) 과의 비율 오차를 계산하여 2DMI로 나타냅니다.
단기 평균선 (예: 20일) 과 가격의 비율의 오차를 계산하여 3번째 DMI로 나타냅니다.
3 DMI가 1 DMI보다 높을 때 부진; 3 DMI가 2 DMI보다 낮을 때 부진
DMI 관계에 따라 거래 신호를 생성
DMI는 동적으로 다른 평균선 주기들의 상대적인 강도를 비교하여 시장 추세 전환점을 판단한다. 파라미터 최적화는 다른 주기들에 적응할 수 있다.
DMI는 다주기 판단과 결합하여 비교적 포괄적입니다.
상대적인 강도를 비교하여 절대적인 수치 판단을 피하십시오.
시장에 적응할 수 있는 유연한 주기 변수
DMI는 다소 뒤쳐져 있어 전환을 놓칠 수도 있다.
주기 변수를 신중하게 설정해야 합니다.
여러 번 유효하지 않은 신호를 생성할 수 있습니다.
DMI 전략은 평균선 주기보다 강한 약관 관계를 통해 전환을 판단한다. 다양한 시장 환경에 적응하기 위해 파라미터를 최적화 할 수 있다. 그러나 지연성이 존재하여 다른 지표가 판단을 보조해야합니다.
/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 31/06/2018
// The related article is copyrighted materialfrom Stocks & Commodities Dec 2009
// My strategy modification.
//
// You can change long to short in the Input Settings
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title="CMOaDisparity Index Backtest")
LengthFirst = input(200, minval=1)
LengthSecond = input(50, minval=1)
LengthThird = input(20, minval=1)
ShowFirst = input(type=bool, defval=true)
ShowSecond = input(type=bool, defval=true)
ShowThird = input(type=bool, defval=true)
reverse = input(false, title="Trade reverse")
xEMAFirst = ema(close,LengthFirst)
xEMASecond = ema(close,LengthSecond)
xEMAThird = ema(close,LengthThird)
xResFirst = 100 * (close - xEMAFirst) / close
xResSecond = 100 * (close - xEMASecond) / close
xResThird = 100 * (close - xEMAThird) / close
pos = iff(xResThird > xResFirst, -1,
iff(xResThird < xResSecond, 1, nz(pos[1], 0)))
possig = iff(reverse and pos == 1, -1,
iff(reverse and pos == -1, 1, pos))
if (possig == 1)
strategy.entry("Long", strategy.long)
if (possig == -1)
strategy.entry("Short", strategy.short)
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(ShowFirst ? xResFirst : na, color=red, title="DIX 1")
plot(ShowSecond ? xResSecond : na, color=blue, title="DIX 2")
plot(ShowThird ? xResThird : na, color=green, title="DIX 3")