def HCL(df, n): """均线通道""" new_df = pd.DataFrame() new_df["mah"] = ta_func.ma(df["high"], n) new_df["mal"] = ta_func.ma(df["low"], n) new_df["mac"] = ta_func.ma(df["close"], n) return new_df
def DMA(df, short, long, m): """平均线差""" new_df = pd.DataFrame() new_df["ddd"] = ta_func.ma(df["close"], short) - ta_func.ma( df["close"], long) new_df["ama"] = ta_func.ma(new_df["ddd"], m) return new_df
def PRICEOSC(df, long, short): """价格震荡指数 Price Oscillator""" ma_s = ta_func.ma(df["close"], short) ma_l = ta_func.ma(df["close"], long) new_df = pd.DataFrame(data=list((ma_s - ma_l) / ma_s * 100), columns=["priceosc"]) return new_df
def MICD(df, n, n1, n2): """异同离差动力指数""" new_df = pd.DataFrame() mi = df["close"] - df["close"].shift(1) ami = ta_func.sma(mi, n, 1) new_df["dif"] = ta_func.ma(ami.shift(1), n1) - ta_func.ma(ami.shift(1), n2) new_df["micd"] = ta_func.sma(new_df["dif"], 10, 1) return new_df
def RCCD(df, n, n1, n2): """异同离差变化率指数""" new_df = pd.DataFrame() rc = df["close"] / df["close"].shift(n) arc = ta_func.sma(rc.shift(1), n, 1) new_df["dif"] = ta_func.ma(arc.shift(1), n1) - ta_func.ma(arc.shift(1), n2) new_df["rccd"] = ta_func.sma(new_df["dif"], n, 1) return new_df
def BBIBOLL(df, n, m): """多空布林线""" new_df = pd.DataFrame() new_df["bbiboll"] = ( ta_func.ma(df["close"], 3) + ta_func.ma(df["close"], 6) + ta_func.ma(df["close"], 12) + ta_func.ma(df["close"], 24)) / 4 new_df["upr"] = new_df["bbiboll"] + m * new_df["bbiboll"].rolling(n).std() new_df["dwn"] = new_df["bbiboll"] - m * new_df["bbiboll"].rolling(n).std() return new_df
def DBCD(df, n, m, t): """异同离差乖离率""" new_df = pd.DataFrame() bias = (df["close"] - ta_func.ma(df["close"], n)) / ta_func.ma( df["close"], n) dif = bias - bias.shift(m) new_df["dbcd"] = ta_func.sma(dif, t, 1) new_df["mm"] = ta_func.ma(new_df["dbcd"], 5) return new_df
def ZDZB(df, n1, n2, n3): """筑底指标""" new_df = pd.DataFrame() a = pd.Series(np.where(df["close"] >= df["close"].shift(1), 1, 0)).rolling(n1).sum() / pd.Series( np.where(df["close"] < df["close"].shift(1), 1, 0)).rolling(n1).sum() new_df["b"] = ta_func.ma(a, n2) new_df["d"] = ta_func.ma(a, n3) return new_df
def CDP(df, n): """逆势操作""" new_df = pd.DataFrame() pt = df["high"].shift(1) - df["low"].shift(1) cdp = (df["high"].shift(1) + df["low"].shift(1) + df["close"].shift(1)) / 3 new_df["ah"] = ta_func.ma(cdp + pt, n) new_df["al"] = ta_func.ma(cdp - pt, n) new_df["nh"] = ta_func.ma(2 * cdp - df["low"], n) new_df["nl"] = ta_func.ma(2 * cdp - df["high"], n) return new_df
def ROC(df, n, m): """变动速率""" new_df = pd.DataFrame() new_df["roc"] = (df["close"] - df['close'].shift(n)) / df["close"].shift(n) * 100 new_df["rocma"] = ta_func.ma(new_df["roc"], m) return new_df
def PSY(df, n, m): """心理线""" new_df = pd.DataFrame() new_df["psy"] = ta_func.count(df["close"] > df["close"].shift(1), n) / n * 100 new_df["psyma"] = ta_func.ma(new_df["psy"], m) return new_df
def BOLL(df, n, p): """布林线""" new_df = pd.DataFrame() mid = ta_func.ma(df["close"], n) std = df["close"].rolling(n).std() new_df["mid"] = mid new_df["top"] = mid + p * std new_df["bottom"] = mid - p * std return new_df
def CR(df, n, m): """CR能量""" new_df = pd.DataFrame() mid = (df["high"] + df["low"] + df["close"]) / 3 new_df["cr"] = pd.Series( np.where(0 > df["high"] - mid.shift(1), 0, df["high"] - mid.shift(1))).rolling(n).sum() / pd.Series( np.where(0 > mid.shift(1) - df["low"], 0, mid.shift(1) - df["low"])).rolling(n).sum() * 100 new_df["crma"] = ta_func.ma(new_df["cr"], m).shift(int(m / 2.5 + 1)) return new_df
def CCI(df, n): """顺势指标""" typ = (df["high"] + df["low"] + df["close"]) / 3 ma = ta_func.ma(typ, n) def mad(x): return np.fabs(x - x.mean()).mean() md = typ.rolling(window=n).apply(mad, raw=True) # 平均绝对偏差 new_df = pd.DataFrame(data=list((typ - ma) / (md * 0.015)), columns=["cci"]) return new_df
def DMI(df, n, m): """动向指标""" new_df = pd.DataFrame() new_df["atr"] = ATR(df, n)["atr"] pre_high = df["high"].shift(1) pre_low = df["low"].shift(1) hd = df["high"] - pre_high ld = pre_low - df["low"] admp = ta_func.ma(pd.Series(np.where((hd > 0) & (hd > ld), hd, 0)), n) admm = ta_func.ma(pd.Series(np.where((ld > 0) & (ld > hd), ld, 0)), n) new_df["pdi"] = pd.Series( np.where(new_df["atr"] > 0, admp / new_df["atr"] * 100, np.NaN)).ffill() new_df["mdi"] = pd.Series( np.where(new_df["atr"] > 0, admm / new_df["atr"] * 100, np.NaN)).ffill() ad = pd.Series( np.absolute(new_df["mdi"] - new_df["pdi"]) / (new_df["mdi"] + new_df["pdi"]) * 100) new_df["adx"] = ta_func.ma(ad, m) new_df["adxr"] = (new_df["adx"] + new_df["adx"].shift(m)) / 2 return new_df
def DKX(df, m): """多空线""" new_df = pd.DataFrame() a = (3 * df["close"] + df["high"] + df["low"] + df["open"]) / 6 new_df["b"] = (20 * a + 19 * a.shift(1) + 18 * a.shift(2) + 17 * a.shift(3) + 16 * a.shift(4) + 15 * a.shift(5) + 14 * a.shift(6) + 13 * a.shift(7) + 12 * a.shift(8) + 11 * a.shift(9) + 10 * a.shift(10) + 9 * a.shift(11) + 8 * a.shift(12) + 7 * a.shift(13) + 6 * a.shift(14) + 5 * a.shift(15) + 4 * a.shift(16) + 3 * a.shift(17) + 2 * a.shift(18) + a.shift(20)) / 210 new_df["d"] = ta_func.ma(new_df["b"], m) return new_df
def SRDM(df, n): """动向速度比率""" new_df = pd.DataFrame() dmz = np.where((df["high"] + df["low"]) <= (df["high"].shift(1) + df["low"].shift(1)), 0, np.where( np.absolute(df["high"] - df["high"].shift(1)) > np.absolute(df["low"] - df["low"].shift(1)), np.absolute(df["high"] - df["high"].shift(1)), np.absolute(df["low"] - df["low"].shift(1)))) dmf = np.where((df["high"] + df["low"]) >= (df["high"].shift(1) + df["low"].shift(1)), 0, np.where( np.absolute(df["high"] - df["high"].shift(1)) > np.absolute(df["low"] - df["low"].shift(1)), np.absolute(df["high"] - df["high"].shift(1)), np.absolute(df["low"] - df["low"].shift(1)))) admz = ta_func.ma(pd.Series(dmz), 10) admf = ta_func.ma(pd.Series(dmf), 10) new_df["srdm"] = np.where(admz > admf, (admz - admf) / admz, np.where(admz == admf, 0, (admz - admf) / admf)) new_df["asrdm"] = ta_func.sma(new_df["srdm"], n, 1) return new_df
def ATR(df, n): """平均真实波幅""" new_df = pd.DataFrame() pre_close = df["close"].shift(1) new_df["tr"] = np.where( df["high"] - df["low"] > np.absolute(pre_close - df["high"]), np.where(df["high"] - df["low"] > np.absolute(pre_close - df["low"]), df["high"] - df["low"], np.absolute(pre_close - df["low"])), np.where( np.absolute(pre_close - df["high"]) > np.absolute(pre_close - df["low"]), np.absolute(pre_close - df["high"]), np.absolute(pre_close - df["low"]))) new_df["atr"] = ta_func.ma(new_df["tr"], n) return new_df
def SHORT(df): """短线指标""" new_df = pd.DataFrame() tb = np.where(df["high"] > df["close"].shift(1), df["high"] - df["close"].shift(1) + df["close"] - df["low"], df["close"] - df["low"]) ts = np.where(df["close"].shift(1) > df["low"], df["close"].shift(1) - df["low"] + df["high"] - df["close"], df["high"] - df["close"]) vol1 = (tb - ts) * df["volume"] / (tb + ts) / 10000 vol10 = vol1.ewm(alpha=0.1, adjust=False).mean() # DMA 动态均值 vol11 = vol1.ewm(alpha=0.05, adjust=False).mean() # DMA new_df["short"] = vol10 - vol11 new_df["ma1"] = ta_func.ma(new_df["short"], 10) return new_df
def ADTM(df, n, m): """动态买卖气指标""" new_df = pd.DataFrame() dtm = np.where( df["open"] < df["open"].shift(1), 0, np.where(df["high"] - df["open"] > df["open"] - df["open"].shift(1), df["high"] - df["open"], df["open"] - df["open"].shift(1))) dbm = np.where( df["open"] >= df["open"].shift(1), 0, np.where(df["open"] - df["low"] > df["open"] - df["open"].shift(1), df["open"] - df["low"], df["open"] - df["open"].shift(1))) stm = pd.Series(dtm).rolling(n).sum() sbm = pd.Series(dbm).rolling(n).sum() new_df["adtm"] = np.where(stm > sbm, (stm - sbm) / stm, np.where(stm == sbm, 0, (stm - sbm) / sbm)) new_df["adtmma"] = ta_func.ma(new_df["adtm"], m) return new_df
def DDI(df, n, n1, m, m1): """方向标准离差指数""" new_df = pd.DataFrame() tr = np.where( np.absolute(df["high"] - df["high"].shift(1)) > np.absolute(df["low"] - df["low"].shift(1)), np.absolute(df["high"] - df["high"].shift(1)), np.absolute(df["low"] - df["low"].shift(1))) dmz = np.where((df["high"] + df["low"]) <= (df["high"].shift(1) + df["low"].shift(1)), 0, tr) dmf = np.where((df["high"] + df["low"]) >= (df["high"].shift(1) + df["low"].shift(1)), 0, tr) diz = pd.Series(dmz).rolling(n).sum() / (pd.Series(dmz).rolling(n).sum() + pd.Series(dmf).rolling(n).sum()) dif = pd.Series(dmf).rolling(n).sum() / (pd.Series(dmf).rolling(n).sum() + pd.Series(dmz).rolling(n).sum()) new_df["ddi"] = diz - dif new_df["addi"] = ta_func.sma(new_df["ddi"], n1, m) new_df["ad"] = ta_func.ma(new_df["addi"], m1) return new_df
def MA(df, n): """简单移动平均线""" new_df = pd.DataFrame(data=list(ta_func.ma(df["close"], n)), columns=["ma"]) return new_df
def VOSC(df, short, long): """移动平均成交量指标 Volume Oscillator""" vosc = (ta_func.ma(df["volume"], short) - ta_func.ma( df["volume"], long)) / ta_func.ma(df["volume"], short) * 100 new_df = pd.DataFrame(data=list(vosc), columns=["vosc"]) return new_df
def DPO(df, n, m): """区间震荡线""" dpo = df["close"] - (ta_func.ma(df["close"], 20)).shift(11) new_df = pd.DataFrame(data=list(dpo), columns=["dpo"]) return new_df
def ENV(df, n, k): """包略线 (Envelopes)""" new_df = pd.DataFrame() new_df["upper"] = ta_func.ma(df["close"], n) * (1 + k / 100) new_df["lower"] = ta_func.ma(df["close"], n) * (1 - k / 100) return new_df
def BIAS(df, n): """乖离率""" ma1 = ta_func.ma(df["close"], n) new_df = pd.DataFrame(data=list((df["close"] - ma1) / ma1 * 100), columns=["bias"]) return new_df
def PUBU(df, m): """瀑布线""" pb = (ta_func.ema(df["close"], m) + ta_func.ma(df["close"], m * 2) + ta_func.ma(df["close"], m * 4)) / 3 new_df = pd.DataFrame(data=list(pb), columns=["pb"]) return new_df
def BBI(df, n1, n2, n3, n4): """多空指数""" bbi = (ta_func.ma(df["close"], n1) + ta_func.ma(df["close"], n2) + ta_func.ma(df["close"], n3) + ta_func.ma(df["close"], n4)) / 4 new_df = pd.DataFrame(data=list(bbi), columns=["bbi"]) return new_df
def B3612(df): """三减六日乖离率""" new_df = pd.DataFrame() new_df["b36"] = ta_func.ma(df["close"], 3) - ta_func.ma(df["close"], 6) new_df["b612"] = ta_func.ma(df["close"], 6) - ta_func.ma(df["close"], 12) return new_df
def MTM(df, n, n1): """MTM动力指标""" new_df = pd.DataFrame() new_df["mtm"] = df["close"] - df["close"].shift(n) new_df["mtmma"] = ta_func.ma(new_df["mtm"], n1) return new_df