def TDX_ADX(highs, lows, closes):
"""??????ADX, ?????test_adx
return: np.ndarray
MTR:=EXPMEMA(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(REF(CLOSE,1)-LOW)),N);
HD :=HIGH-REF(HIGH,1);
LD :=REF(LOW,1)-LOW;
DMP:=EXPMEMA(IF(HD>0&&HD>LD,HD,0),N);
DMM:=EXPMEMA(IF(LD>0&&LD>HD,LD,0),N);
PDI: DMP*100/MTR;
MDI: DMM*100/MTR;
ADX: EXPMEMA(ABS(MDI-PDI)/(MDI+PDI)*100,MM);
ADXR:EXPMEMA(ADX,MM);
"""
assert(len(closes)>30)
highs = np.array(highs)
lows = np.array(lows)
closes = np.array(closes)
mtr = np.zeros(len(closes))
for i, v in np.ndenumerate(closes):
i = i[0]
if i>0:
y = closes[i-1]
mtr[i] = max(max(highs[i]-lows[i], abs(highs[i]-y)), abs(y-lows[i]))
n = 14
mm = 6
mtr = talib.EMA(mtr, n)
hd = np.zeros(len(highs))
ld = np.zeros(len(highs))
for i, v in np.ndenumerate(highs):
i = i[0]
if i>0:
hd[i] = highs[i] - highs[i-1]
ld[i] = lows[i-1] - lows[i]
if not (hd[i] > 0 and hd[i]>ld[i]):
hd[i] = 0
if not (ld[i]>0 and ld[i]>hd[i]):
ld[i] = 0
dmp = talib.EMA(hd, n)
dmm = talib.EMA(ld, n)
pdi = dmp * 100 / mtr
mdi = dmm * 100 / mtr
adx = np.zeros(len(mdi))
for i, v in np.ndenumerate(mdi):
i = i[0]
adx[i] = abs(mdi[i]-pdi[i]) / (mdi[i]+pdi[i])*100
adx = talib.EMA(adx, mm)
return adx
评论列表
文章目录