TA_Lib指标目录
2.(动量指标)Momentum Indicator
2.1 趋势强弱,对方向不敏感
MACD(异同移动平均线)
python函数原型:
macd, macdsignal, macdhist = MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)
公式(fmlabs.com):
移动平均收敛散度 (MACD) 是两个指数移动平均线之间的差异。信号线是 MACD 的指数移动平均线。
MACD 指示趋势变化并指示新趋势方向的开始。高值表示超买情况,低值表示超卖情况。与价格的背离表明当前趋势的结束,尤其是当 MACD 处于极高或极低值时。当 MACD 线穿过信号线上方时,就会产生买入信号。当 MACD 低于信号线时,会产生卖出信号。为了确认信号,买入时 MACD 应高于零,卖出时应低于零。
MACD 的时间段通常以 26 和 12 给出。然而,该函数实际上使用指数常数 0.075 和 0.15,它们更接近于 25.6667 和 12.3333 周期。要使用 MACD 内置的时间段以外的时间段创建类似的指标,请使用价格振荡器功能。
短均线: s h o r t m a = 0.15 × p r i c e + 0.85 × s h o r t m a − 1 shortma = 0.15 \times price + 0.85 \times shortma_{-1} shortma=0.15×price+0.85×shortma−1
长均线: l o n g m a = 0.075 × p r i c e + 0.925 × l o n g m a − 1 longma = 0.075 \times price + 0.925 \times longma_{-1} longma=0.075×price+0.925×longma−1
M A C D = s h o r t m a − l o n g m a MACD = shortma - longma MACD=shortma−longma
M A C D s i g n a l = E M A ( M A C D , s i g n a l p e r i o d ) MACDsignal = EMA(MACD, signalperiod) MACDsignal=EMA(MACD,signalperiod)
M A C D h i s t = M A C D − M A C D s i g n a l MACDhist = MACD - MACDsignal MACDhist=MACD−MACDsignal
源码(来自ta_MACD.c
, 有修改, 只保留逻辑):
def MACD(close, fastperiod=12, slowperiod=26, signalperiod=9):
lookback_slow = slowperiod - 1
lookback_sign = signalperiod - 1
lookback_total = lookback_sign + lookback_slow
startIdx = lookback_total
t = startIdx - lookback_sign
shortma = EMA_(close, fastperiod, startIdx = t)
longma = EMA_(close, slowperiod, startIdx = t)
macd = shortma - longma
macdsignal = np.zeros(len(close))
macdsignal[t:] = EMA(macd[t:], signalperiod)
macdsignal[:t] = np.nan
macd[:startIdx] = np.nan
macdhist = macd - macdsignal
return macd, macdsignal, macdhist
#用于计算MACD的EMA_函数, 与overlap中的EMA不同的是新加入了startIdx参数
def EMA_(close, timeperiod = 30, startIdx = 0):
k = 2 / (timeperiod + 1)
lookback_ema = timeperiod - 1
if startIdx < lookback_ema:
startIdx = lookback_ema
endIdx = len(close) - 1
if lookback_ema >= len(close):
exit('too short')
output_ema = np.zeros(len(close))
output_ema[startIdx] = np.mean(close[startIdx - lookback_ema:startIdx + 1])
t = startIdx + 1
while(t <= endIdx):
output_ema[t] = k * close[t] + (1 - k) * output_ema[t - 1]
t += 1
output_ema[:startIdx] = np.nan
return output_ema
MACDEXT(异同移动平均线拓展)
python函数原型:
macd, macdsignal, macdhist = MACDEXT(close, fastperiod=12, fastmatype=0, slowperiod=26, slowmatype=0, signalperiod=9, signalmatype=0)
公式(官网无公式):
M A C D = M A f a s t m a t y p e ( c l o s e , f a s t p e r i o d ) − M A s l o w m a t y p e ( c l o s e , s l o w p e r i o d ) MACD = MA_{fastmatype}(close, fastperiod) - MA_{slowmatype}(close, slowperiod) MACD=MAfastmatype(close,fastperiod)−MAslowmatype(close,slowperiod)
M A C D s i g n a l = M A s i g n a l m a t y p e ( m a c d , s i g n a l p e r i o d ) MACDsignal = MA_{signalmatype}(macd, signalperiod) MACDsignal=MAsignalmatype(macd,signalperiod)
M A C D h i s t = M A C D − M A C D s i g n a l MACDhist = MACD - MACDsignal MACDhist=MACD−MACDsignal
源码(来自ta_MACDEXT.c
, 有修改, 只保留逻辑):
源码逻辑与MACD相同, 只是设置了使用不同均线的接口
MACDFIX(异同移动平均线(固定窗口大小))
python函数原型:
macd, macdsignal, macdhist = MACDFIX(close, signalperiod=9)
与MACD逻辑相同,只是fast和slow的长度都是用来默认值
CCI(顺势指标)
python函数原型:
real = CCI(high, low, close, timeperiod=14)
公式:
CCI 旨在检测开始和结束的市场趋势。 100 到 -100 的范围是正常的交易范围。 超出此范围的 CCI 值表示超买或超卖情况。 您还可以在 CCI 中寻找价格差异。 如果价格创出新高,而 CCI 没有,则可能会出现价格调整。
T P = h i g h e s t ( t − n : t ) + l o w e s t ( t − n , t ) + c l o s e t 3 TP=\frac{highest(t-n:t) + lowest(t-n,t) + close_{t}}{3} TP=3highest(t−n:t)+lowest(t−n,t)+closet
C C 1 = 1 0.015 × T P − S M A ( T P , n , 1 ) s t d ( T P ) CC1 = \frac{1}{0.015} \times \frac{TP - SMA(TP,n,1)}{std(TP)} CC1=0.0151×std(TP)TP−SMA(TP,n,1)
源码(来自ta_CCI.c
,源码与公式不同):
源码中的逻辑跟公式不一样,high和close的选择当时的值而不是滞后窗口中的最值
#python
lookback = timeperiod - 1
TP = (high + close + low) / 3
SMA = TP.rolling(timeperiod).mean()[lookback:]
std = TP.rolling(timeperiod).std()[lookback:]
CCI[:] = 0.0
CCI[:lookback] = np.nan
CCI[lookback:] = 1/0.015 * (TP[lookback:] - SMA) / std
TRIX(三重指数平滑平均线)
python函数原型:
real = TRIX(close, timeperiod=30)
公式(官网公式):
TRIX 指标计算三重指数移动平均线的变化率。 值在零附近振荡。 当 TRIX 交叉高于/低于零时,会产生买入/卖出信号。 TRIX 的(通常)9 周期指数移动平均线可用作信号线。 当 TRIX 穿过信号线上方/下方并且也高于/低于零时,会产生买入/卖出信号。
M = E M A ( E M A ( E M A ( p r i c e ) ) ) M = EMA(EMA(EMA(price))) M=EMA(EMA(EMA(price)))
T R I X = 100 × M − M − 1 M TRIX = 100 \times \frac{M - M_{-1}}{M} TRIX=100×MM−M−1
源码(来自ta_TRIX.c
, 有修改, 只保留逻辑):
源码中只是调用了EMA和ROC方法
EMA 源码见上篇
def TRIX(close, timeperiod=30):
EMA_lookback = timeperiod - 1
ROC_lookback = 1
lookback_total = 3 * EMA_lookback + ROC_lookback
temp_1 = EMA(close[startIdx - 3 * timeperiod - 1, endIdx], timeperiod)
temp_2 = EMA(temp_1[startIdx - 2 * timeperiod - 1, endIdx], timeperiod)
temp_3 = EMA(temp_1[startIdx - timeperiod - 1, endIdx], timeperiod)
TRIX = (temp_3[startIdx : endIdx] / temp_3[startIdx - 1: endIdx - 1]) - 1
2.2 多空力量强弱对比
BOP(力量均衡指标)
python函数原型:
real = BOP(open, high, low, close)
公式(官网公式):
( c l o s e − o p e n ) / ( h i g h − l o w ) (close - open) / (high - low) (close−open)/(high−low)
源码(来自ta_BOP.c
, 有修改, 只保留逻辑):
#python
lookback = 0
BOP = (close - open) / (high - low)
RSI(相对强弱指标)
python函数原型
real = RSI(close, timeperiod=14)
官网公式
相对强弱指数 (RSI) 计算近期价格上涨走势与绝对价格走势的比率。 RSI 范围从 0 到 100。当值超过 70/低于 30 时,RSI 被解释为超买/超卖指标。您还可以寻找与价格的背离。 如果价格创出新高/新低,而 RSI 没有,则表明反转。
Formula: \text { Formula: } Formula:
If c l o s e > c l o s e − 1 then \text{ If } close > close_{-1} \text{ then } If close>close−1 then
u p = c l o s e − c l o s e − 1 \quad up=close - close_{-1} up=close−close−1
d n = 0 \quad dn=0 dn=0