#简单理解为将最高价和最低价分别平滑后,如果src价格在介于其中就为0,当价格向上或者向下突破才认为有波动
import talib
import numpy as np
def get_inpulse_macd(highs, lows, closes,lengthMA = 34,lengthSignal = 9):
def calc_zlema_once(src, length): #寻找突破动能,
ema1 = talib.EMA(src, length)
ema2 = talib.EMA(ema1, length)
ds = ema1 - ema2
return ema1 + ds
src = (highs + lows + closes) / 3 #
mis = calc_zlema_once(src,lengthMA)
his = talib.SMA(src[:lengthMA],lengthMA)
los = talib.SMA(src[:lengthMA],lengthMA)
his_rest = np.zeros(len(src) - lengthMA)
los_rest = np.zeros(len(src) - lengthMA)
his = np.concatenate((his, his_rest),axis=0)
los = np.concatenate((los, los_rest),axis=0)
mds = np.zeros(len(src))
for i in range(lengthMA, len(src)): #最高最低价平滑处理,SMMA 也可以认为是EMA,这俩公式貌似没有啥区别吧
his[i] = (his[i-1] * (lengthMA - 1 ) + highs[i] ) /lengthMA
los[i] = (los[i-1] * (lengthMA - 1 ) + lows[i] ) /lengthMA
m_h = mis - his
m_o = mis - los
mds[mis>his] = m_h[mis>his]
mds[mis<los] = m_o[mis<los]
sbs = talib.SMA(mds, lengthSignal)
shs = mds - sbs
return shs, mds
为开源贡献力量