def wilder_sum(arg, window=14): ''' An internal function of R TTR package ''' arg = utils.safe_series(arg) rval = fast.wilder_sum(arg, window) rval.name = arg.name utils.safe_name(rval, name='wilderSum') rval.index = arg.index return rval
def adx(hlc, window=14, atr_=None): ''' ADX ''' if atr_ is None: atr_ = atr(hlc, window) high, low, _= utils.safe_hlc(hlc) up_move = high-high.shift(1) down_move = low.shift(1)-low pos_dm = ((up_move>down_move)*(up_move>0)*(up_move)).astype(np.float) neg_dm = ((down_move>up_move)*(down_move>0)*(down_move)).astype(np.float) tr_sum = fast.wilder_sum(atr_.tr, window) DIp = 100 * fast.wilder_sum(pos_dm, window) / tr_sum DIn = 100 * fast.wilder_sum(neg_dm, window) / tr_sum dx = 100 * np.abs((DIp-DIn)/(DIp+DIn)) adx = ma.ema(dx, window=window) return pd.DataFrame(dict(DIp=DIp, DIn=DIn, DX=dx, ADX=adx), index=hlc.index)