이 전략은 ADX 지표의 동적인 변화를 추적하여 시장의 경향의 초기 변화를 포착하여 트렌드를 적시에 추적할 수 있습니다. ADX가 하위에서 빠르게 상승하면 트렌드가 형성되고 있다는 것을 알 수 있으며, 이는 입장이 좋은 시간입니다. 이동 평균의 보조와 결합하여 오류 진단을 효과적으로 돌파 할 수 있습니다.
이 전략은 주로 ADX 지표의 동적인 변화에 따라 트렌드의 발전을 판단한다. ADX 지표가 낮은 상태일 때, 트렌드의 변화는 거의 없다. ADX 지표가 낮은 상태에서 빠르게 상승하면 트렌드가 형성되고 있음을 나타낸다. ADX의 급격한 상승을 모니터링하여 트렌드의 발전을 포착한다.
특히, 전략에 대한 입시 판단에는 다음과 같은 조건이 포함됩니다.
위의 조건이 동시에 충족될 때, 대표적인 트렌드가 형성되고, 더 많은 것을 한다. 현재 이동 평균을 통과할 때, 평소한다. 두 개의 이동 평균을 사용하면, 트렌드의 발전을 더 정확하게 판단할 수 있다.
정지 조건도 비슷합니다. ADX가 급격히 아래로 내려갈 때, 공백이 됩니다. 가격이 아래로 이동 평균을 통과할 때, 평점입니다.
이 전략의 가장 큰 장점은 트렌드의 발전을 적시에 포착하는 데 있습니다. ADX 수치를 보는 전통적인 방법은 ADX가 20 또는 25로 상승할 때까지 트렌드를 확인하기 위해 기다려야합니다. 이것은 가장 좋은 진입 시기를 놓치고 있습니다. 이 전략은 ADX의 빠른 상승 단계를 추적함으로써 트렌드의 발전을 크게 파악할 수 있습니다.
또한, 전략은 이동 평균을 도입하여 일부 잘못된 진단을 효과적으로 필터링하여 전략의 안정성을 향상시킬 수 있습니다.
이 전략의 가장 큰 위험은 ADX 지표 자체의 낙후성이다. 빠른 상승 단계를 추적하여 낙후를 줄일 수 있음에도 불구하고, 여전히 약간의 낙후가 존재한다. 이것은 일부 급격하게 변하는 시장의 잡을 수 없게 만듭니다.
또한, ADX 지표는 추세 판단에 대해 100% 정확하지 않으며, 필연적으로 약간의 잘못된 진단이 발생할 수 있습니다. 이동 평균을 도입하면 일부 잡음을 필터링 할 수 있지만, 추가적인 최적화가 필요합니다.
이 전략의 최적화 공간은 여전히 넓으며, 핵심은 ADX 지표의 캡처 정확도를 더욱 향상시키는 데 있습니다. 기계 학습과 같은 방법을 도입하고, ADX 변경 후 확률 분포를 판단하는 모델 훈련하는 것을 고려할 수 있습니다. 또한 다른 파라미터 조합과 다른 보조 지표와 같은 방법을 테스트 최적화 할 수 있습니다.
이 동적 상승 ADX 트렌드 추적 전략은 ADX의 급격한 상승 시 시장의 변화점을 포착하여 트렌드에 대한 적시에 추적을 구현한다. 최대 장점은 시간적으로 매우 민첩하며, 트렌드를 초기 단계에 효과적으로 파악할 수 있다. 또한 일정 확률의 잘못된 판단의 위험이 있으며, 후속으로 지속적인 최적화 테스트가 필요하다.
/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 1h
basePeriod: 15m
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/
// © dhilipthegreat
//@version=4
//Rising ADX strategy
strategy(title="Rising ADX strategy", overlay=false)
adxlen = input(14, title="ADX Length", minval=1)
threshold = input(10, title="threshold", minval=5)
hline(threshold, color=color.black, linestyle=hline.style_dashed)
atype = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA")
malen=input(20, title="Moving average 1 ",minval=1, maxval=50)
avg = atype == 1 ? sma(close,malen) : atype == 2 ? ema(close,malen) : atype == 3 ? wma(close,malen) : atype == 4 ? hma(close,malen) : na
atype2 = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA")
malen2=input(20, title="Moving average 2",minval=1, maxval=200)
avg2 = atype2 == 1 ? sma(close,malen2) : atype2 == 2 ? ema(close,malen2) : atype2 == 3 ? wma(close,malen2) : atype2 == 4 ? hma(close,malen2) : na
//ADX&DI
dilen = 14
dirmov(len,_high,_low,_tr) =>
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)
truerange = rma(_tr, len)
plus = fixnan(100 * rma(plusDM, len) / truerange)
minus = fixnan(100 * rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen,_high,_low,_tr) =>
[plus, minus] = dirmov(dilen,_high,_low,_tr)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
[plus, minus] = dirmov(dilen,high,low,tr)
sig = adx(dilen, adxlen,high,low,tr)
prev_sig = adx(dilen, adxlen,high[1],low[1],tr)
plot(sig ? sig : na, color = rising(sig, 1) ? color.lime : falling(sig, 1) ? color.orange : color.purple, title="ADX",linewidth=2)
//////
longCondition= sig > threshold and rising(sig, 1) and falling(prev_sig, 1) and close > avg and close > avg2
barcolor(longCondition ? color.yellow: na)
Long_side = input(true, "Long side")
if Long_side
strategy.entry(id="Long", long=true, when= longCondition and strategy.position_size<1)
exitCondition= (rising(prev_sig, 1) and falling(sig, 1)) or close < avg and close < avg2
strategy.close(id="Long",comment="L exit", qty=strategy.position_size , when= exitCondition) //close all
shortCondition= sig > threshold and rising(sig, 1) and falling(prev_sig, 1) and close < avg and close < avg2
barcolor(shortCondition ? color.gray: na)
Short_side = input(true, "Short side")
if Short_side
strategy.entry(id="Short", long=false, when= shortCondition and strategy.position_size<1)
sell_exitCondition= (rising(prev_sig, 1) and falling(sig, 1)) or close > avg and close > avg2
strategy.close(id="Short",comment="S exit", qty=strategy.position_size , when= sell_exitCondition) //close all
barcolor(strategy.position_size>1 ? color.lime: na)
bgcolor(strategy.position_size>1 ? color.lime: na)
barcolor(strategy.position_size<0 ? color.orange: na)
bgcolor(strategy.position_size<0 ? color.orange: na)