速查手册:TA-Lib 超过150种量化技术指标计算全解 - 2. Momentum Indicators(动量指标)
TA-Lib(Technical Analysis Library)是广泛使用的金融技术分析库,实现了超过150种技术指标计算函数,适用于股票、期货等金融数据的技术分析,帮助用户进行量化研究和交易策略开发。
文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。适合量化新手建立系统认知,为策略开发打下基础。
目录
- Overlap Studies(重叠指标)
- Momentum Indicators(动量指标)
- Volume Indicators(成交量指标)
- Volatility Indicators(波动率指标)
- Price Transform(价格变换)
- Cycle Indicators(周期指标)
- Pattern Recognition(模式识别)
- Statistic Functions(统计函数)
- Math Transform(数学变换)
- Math Operators(数学运算符)
Momentum Indicators(动量指标)
1. ADX (Average Directional Movement Index) 平均趋向指数
-
作用:衡量趋势强度(不分方向),值越大趋势越强。
-
计算方法:基于+DI和-DI的平滑平均,公式为 ADX = ( +DI − -DI ) ( +DI + -DI ) × 100 \text{ADX} = \frac{(\text{+DI} - \text{-DI})}{(\text{+DI} + \text{-DI})} \times 100 ADX=(+DI+-DI)(+DI−-DI)×100 的N日平均。
-
参数:
timeperiod=14
:计算ADX的周期(默认14日),影响趋势强度的平滑
-
使用场景:
- ADX > 25:趋势明显,适合趋势策略。
- ADX < 20:市场震荡,避免趋势交易。
-
示例代码:
adx = talib.ADX(high, low, close, timeperiod=14)
2. ADXR (Average Directional Movement Rating) 平均趋向评估指数
-
作用:ADX的平滑版本,减少短期波动干扰。
-
计算方法: ADXR = ADX ∗ t + ADX ∗ t − N 2 \text{ADXR} = \frac{\text{ADX}*t + \text{ADX}*{t-N}}{2} ADXR=2ADX∗t+ADX∗t−N。
-
参数:
timeperiod=14
:计算ADX的周期,ADXR在此基础上取平均。
-
使用场景:确认趋势的持续性。
-
示例代码:
adxr = talib.ADXR(high, low, close, timeperiod=14)
3. APO (Absolute Price Oscillator) 绝对价格振荡器
-
作用:通过长短周期EMA差值捕捉价格动量。
-
计算方法: APO = EMA ( 短周期 ) − EMA ( 长周期 ) \text{APO} = \text{EMA}(短周期) - \text{EMA}(长周期) APO=EMA(短周期)−EMA(长周期)。
-
参数:
fastperiod=12
:快速EMA的周期(默认12日)。slowperiod=26
:慢速EMA的周期(默认26日)。
-
使用场景:零线交叉作为买卖信号。
-
示例代码:
apo = talib.APO(close, fastperiod=12, slowperiod=26, matype=0)
4. AROON (阿隆指标)
-
作用:衡量趋势方向及强度,显示新高/新低出现的时间。
-
计算方法:
- Aroon Up = (\frac{N - \text{距离最近N日内最高价的天数}}{N} \times 100)
- Aroon Down = (\frac{N - \text{距离最近N日内最低价的天数}}{N} \times 100)
-
参数:
timeperiod=14
:计算Aroon Up/Down的周期(默认14日)。
-
使用场景:
- Aroon Up > Aroon Down:上升趋势主导。
- 两者交叉提示趋势变化。
-
示例代码:
aroon_down, aroon_up = talib.AROON(high, low, timeperiod=14)
5. AROONOSC (阿隆振荡器)
-
作用:Aroon Up与Aroon Down的差值,量化趋势动量。
-
计算方法: AROONOSC = Aroon Up − Aroon Down \text{AROONOSC} = \text{Aroon Up} - \text{Aroon Down} AROONOSC=Aroon Up−Aroon Down。
-
参数:
timeperiod=14
:同AROON周期(默认14日)。
-
使用场景:
- 值 > 0:上升动量占优。
- 值 < 0:下降动量占优。
-
示例代码:
aroon_osc = talib.AROONOSC(high, low, timeperiod=14)
6. BOP (Balance of Power) 力量平衡指标
-
作用:衡量买方与卖方的力量对比。
-
计算方法: BOP = Close − Open High − Low \text{BOP} = \frac{\text{Close} - \text{Open}}{\text{High} - \text{Low}} BOP=High−LowClose−Open。
-
参数:
- 无参数:直接使用
open, high, low, close
计算。
- 无参数:直接使用
-
使用场景:
- BOP > 0:买方主导;BOP < 0:卖方主导。
-
示例代码:
bop = talib.BOP(open, high, low, close)
7. CCI (Commodity Channel Index) 商品通道指数
-
作用:判断价格是否偏离统计常态。
-
计算方法: CCI = 价格 - 典型价均值 0.015 × 平均绝对偏差 \text{CCI} = \frac{\text{价格 - 典型价均值}}{0.015 \times \text{平均绝对偏差}} CCI=0.015×平均绝对偏差价格 - 典型价均值,其中典型价 = (\frac{\text{高 + 低 + 收}}{3})。
-
参数:
timeperiod=14
:计算典型价均值和平均偏差的周期(默认14日)。
-
使用场景:
- CCI > 100:超买;CCI < -100:超卖。
-
示例代码:
cci = talib.CCI(high, low, close, timeperiod=14)
8. CMO (Chande Momentum Oscillator) 钱德动量振荡器
-
作用:基于绝对涨跌幅的动量指标,减少方向偏差。
-
计算方法: CMO = 总涨幅 - 总跌幅 总涨幅 + 总跌幅 × 100 \text{CMO} = \frac{\text{总涨幅 - 总跌幅}}{\text{总涨幅 + 总跌幅}} \times 100 CMO=总涨幅 + 总跌幅总涨幅 - 总跌幅×100。
-
参数:
timeperiod=14
:计算涨跌幅总和的周期(默认14日)。
-
使用场景:类似RSI但更敏感,捕捉短期波动。
-
示例代码:
cmo = talib.CMO(close, timeperiod=14)
9. DX (Directional Movement Index) 方向运动指数
-
作用:衡量趋势强度,ADX的前置指标。
-
计算方法: DX = +DI - -DI +DI + -DI × 100 \text{DX} = \frac{\text{+DI - -DI}}{\text{+DI + -DI}} \times 100 DX=+DI + -DI+DI - -DI×100。
-
参数:
timeperiod=14
:计算方向指数的周期(默认14日)。
-
使用场景:与ADX结合分析趋势强度。
-
示例代码:
dx = talib.DX(high, low, close, timeperiod=14)
10. MACD (Moving Average Convergence Divergence) 指数平滑异同平均线
-
作用:捕捉趋势变化与动量方向。
-
计算方法:
- MACD线 = EMA(12) - EMA(26)
- 信号线 = MACD线的EMA(9)
- 柱状图 = MACD线 - 信号线
-
参数:
fastperiod=12
:快线(短期EMA)的周期(默认12日)。slowperiod=26
:慢线(长期EMA)的周期(默认26日)。signalperiod=9
:信号线(MACD线的EMA)的周期(默认9日)。
-
使用场景:
- 金叉(MACD线上穿信号线):买入信号。
- 死叉(MACD线下穿信号线):卖出信号。
-
示例代码:
macd, signal, hist = talib.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)
11. MACDEXT (MACD扩展版)
-
作用:允许自定义EMA类型(如SMA、WMA)。
-
计算方法:同MACD,但可指定移动平均类型。
-
参数:
fastperiod=12
:快线周期。fastmatype=0
:快线移动平均类型(0=SMA,1=EMA,2=WMA等)。slowperiod=26
:慢线周期。slowmatype=0
:慢线移动平均类型。signalperiod=9
:信号线周期。signalmatype=0
:信号线移动平均类型。
-
示例代码:
macd, signal, hist = talib.MACDEXT(close, fastperiod=12, fastmatype=0, slowperiod=26, slowmatype=0, signalperiod=9, signalmatype=0)
12. MACDFIX (固定周期MACD)
-
作用:固定信号线周期为9的MACD变体。
-
参数:
signalperiod=9
:信号线周期(固定为9日)。
-
示例代码:
macd, signal, hist = talib.MACDFIX(close, signalperiod=9)
13. MFI (Money Flow Index) 资金流量指数
-
作用:结合价格和成交量的动量指标。
-
计算方法:类似RSI,但用资金流量代替价格变化。
-
参数:
timeperiod=14
:计算资金流的周期(默认14日)。
-
使用场景:
- MFI > 80:超买;MFI < 20:超卖。
-
示例代码:
mfi = talib.MFI(high, low, close, volume, timeperiod=14)
14. MINUS_DI (负方向指标)
-
作用:量化下跌趋势的强度。
-
计算方法:基于负方向移动(-DM)的平滑。
-
参数:
timeperiod=14
:计算负方向指数的周期(默认14日)。
-
使用场景:-DI上升表示空头力量增强。
-
示例代码:
minus_di = talib.MINUS_DI(high, low, close, timeperiod=14)
15. MINUS_DM (负方向运动)
-
作用:衡量价格下跌的动量强度。
-
计算方法: -DM = 前日最低价 - 当日最低价 \text{-DM} = \text{前日最低价 - 当日最低价} -DM=前日最低价 - 当日最低价(若下跌且满足条件)。
-
参数:
timeperiod=14
:计算负方向运动的周期(默认14日)。
-
示例代码:
minus_dm = talib.MINUS_DM(high, low, timeperiod=14)
16. MOM (动量指标)
-
作用:计算当前价格与N周期前价格的差值。
-
计算方法: MOM = Close ∗ t − Close ∗ t − N \text{MOM} = \text{Close}*t - \text{Close}*{t-N} MOM=Close∗t−Close∗t−N。
-
参数:
timeperiod=10
:计算价格差值的周期(默认10日)。
-
使用场景:动量值转正/负提示趋势变化。
-
示例代码:
mom = talib.MOM(close, timeperiod=10)
17. PLUS_DI (正方向指标)
-
作用:量化上升趋势的强度。
-
计算方法:基于正方向移动(+DM)的平滑。
-
参数:
timeperiod=14
:计算正方向指数的周期(默认14日)。
-
使用场景:+DI上升表示多头力量增强。
-
示例代码:
plus_di = talib.PLUS_DI(high, low, close, timeperiod=14)
18. PLUS_DM (正方向运动)
-
作用:衡量价格上涨的动量强度。
-
计算方法: +DM = 当日最高价 - 前日最高价 \text{+DM} = \text{当日最高价 - 前日最高价} +DM=当日最高价 - 前日最高价(若上涨且满足条件)。
-
参数:
timeperiod=14
:计算正方向运动的周期(默认14日)。
-
示例代码:
plus_dm = talib.PLUS_DM(high, low, timeperiod=14)
19. PPO (Percentage Price Oscillator) 百分比价格振荡器
-
作用:MACD的百分比版本,衡量长短EMA差值比例。
-
计算方法: PPO = EMA ( 短周期 ) − EMA ( 长周期 ) EMA ( 长周期 ) × 100 \text{PPO} = \frac{\text{EMA}(短周期) - \text{EMA}(长周期)}{\text{EMA}(长周期)} \times 100 PPO=EMA(长周期)EMA(短周期)−EMA(长周期)×100。
-
参数:
fastperiod=12
:快速EMA周期(默认12日)。slowperiod=26
:慢速EMA周期(默认26日)。matype=0
:移动平均类型(0=SMA,1=EMA,2=WMA等)。
-
使用场景:零线交叉提示趋势变化。
-
示例代码:
ppo = talib.PPO(close, fastperiod=12, slowperiod=26, matype=0)
20. ROC (Rate of Change) 变动率指标
-
作用:计算价格N周期的变化率。
-
计算方法: ROC = Close ∗ t − Close ∗ t − N Close t − N × 100 \text{ROC} = \frac{\text{Close}*t - \text{Close}*{t-N}}{\text{Close}_{t-N}} \times 100 ROC=Closet−NClose∗t−Close∗t−N×100。
-
参数:
timeperiod=10
:计算价格变化率的周期(默认10日)。
-
使用场景:ROC转正/负提示趋势加速。
-
示例代码:
roc = talib.ROC(close, timeperiod=10)
21. ROCP (变动率百分比)
-
作用:ROC的百分比版本,直接输出小数形式。
-
计算方法: ROCP = Close ∗ t − Close ∗ t − N Close t − N \text{ROCP} = \frac{\text{Close}*t - \text{Close}*{t-N}}{\text{Close}_{t-N}} ROCP=Closet−NClose∗t−Close∗t−N。
-
参数:
timeperiod=10
:同ROC周期(默认10日)。
-
示例代码:
rocp = talib.ROCP(close, timeperiod=10)
22. ROCR (变动率比值)
-
作用:计算价格N周期的比值(非百分比)。
-
计算方法: ROCR = Close ∗ t Close ∗ t − N \text{ROCR} = \frac{\text{Close}*t}{\text{Close}*{t-N}} ROCR=Close∗t−NClose∗t。
-
参数:
timeperiod=10
:同ROC周期(默认10日)。
-
示例代码:
rocr = talib.ROCR(close, timeperiod=10)
23. ROCR100 (变动率比值百分比)
-
作用:ROCR的百分比版本。
-
计算方法: ROCR100 = ROCR × 100 \text{ROCR100} = \text{ROCR} \times 100 ROCR100=ROCR×100。
-
参数:
timeperiod=10
:同ROC周期(默认10日)。
-
示例代码:
rocr100 = talib.ROCR100(close, timeperiod=10)
24. RSI (Relative Strength Index) 相对强弱指数
-
作用:衡量价格变化速度,判断超买(>70)或超卖(<30)。
-
计算方法: RSI = 100 − 100 1 + 平均涨幅 平均跌幅 \text{RSI} = 100 - \frac{100}{1 + \frac{\text{平均涨幅}}{\text{平均跌幅}}} RSI=100−1+平均跌幅平均涨幅100。
-
参数:
timeperiod=14
:计算平均涨幅/跌幅的周期(默认14日)。
-
使用场景:
- 背离:价格新高但RSI未新高 → 潜在反转。
-
示例代码:
rsi = talib.RSI(close, timeperiod=14)
25. STOCH (随机指标)
-
作用:比较收盘价与近期价格范围,识别超买/超卖。
-
计算方法:
- %K = (\frac{\text{Close} - \text{N日最低价}}{\text{N日最高价 - N日最低价}} \times 100)
- %D = %K的M日移动平均。
-
参数:
fastk_period=5
:计算原始%K的周期(默认5日)。slowk_period=3
:%K的平滑周期(默认3日)。slowk_matype=0
:%K的平滑类型(0=SMA)。slowd_period=3
:%D的平滑周期(默认3日)。slowd_matype=0
:%D的平滑类型(0=SMA)。
-
使用场景:
- 超买区(>80)死叉:卖出信号。
- 超卖区(<20)金叉:买入信号。
-
示例代码:
slowk, slowd = talib.STOCH(high, low, close, fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)
26. STOCHF (快速随机指标)
-
作用:随机指标的快速版本,减少平滑步骤。
-
参数:
fastk_period=5
:原始%K的周期(默认5日)。fastd_period=3
:%D的平滑周期(默认3日)。fastd_matype=0
:%D的平滑类型(0=SMA)。
-
示例代码:
fastk, fastd = talib.STOCHF(high, low, close, fastk_period=5, fastd_period=3, fastd_matype=0)
27. STOCHRSI (随机RSI)
-
作用:在RSI基础上计算随机值,增强灵敏度。
-
计算方法:对RSI值应用随机公式。
-
参数:
timeperiod=14
:计算RSI的周期(默认14日)。fastk_period=5
:对RSI计算%K的周期(默认5日)。fastd_period=3
:对%K计算%D的周期(默认3日)。fastd_matype=0
:%D的平滑类型(0=SMA)。
-
示例代码:
stochrsi_k, stochrsi_d = talib.STOCHRSI(close, timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0)
28. TRIX (三重指数平均)
-
作用:三重平滑价格变化率,过滤短期噪音。
-
计算方法:对价格进行三次EMA平滑后计算变化率。
-
参数:
timeperiod=30
:三重EMA平滑的周期(默认30日)。
-
使用场景:捕捉中长期趋势变化。
-
示例代码:
trix = talib.TRIX(close, timeperiod=30)
29. ULTOSC (终极振荡器)
-
作用:结合三个时间周期的加权动量。
-
计算方法:加权平均短期(7日)、中期(14日)、长期(28日)动量。
-
参数:
timeperiod1=7
:短期动量周期(默认7日)。timeperiod2=14
:中期动量周期(默认14日)。timeperiod3=28
:长期动量周期(默认28日)。
-
使用场景:
- ULTOSC < 30:超卖;ULTOSC > 70:超买。
-
示例代码:
ultosc = talib.ULTOSC(high, low, close, timeperiod1=7, timeperiod2=14, timeperiod3=28)
30. WILLR (威廉指标)
-
作用:类似随机指标,但刻度反向(0至-100)。
-
计算方法: % R = N日最高价 - Close N日最高价 - N日最低价 × − 100 \%R = \frac{\text{N日最高价 - Close}}{\text{N日最高价 - N日最低价}} \times -100 %R=N日最高价 - N日最低价N日最高价 - Close×−100。
-
参数:
timeperiod=14
:计算价格范围的周期(默认14日)。
-
使用场景:
- %R < -80:超卖;%R > -20:超买。
-
示例代码:
willr = talib.WILLR(high, low, close, timeperiod=14)
使用建议
- 组合策略:
RSI + MACD
:RSI 确认超买/超卖,MACD 触发交易信号。ADX + SAR
:ADX 判断趋势强度,SAR 提供动态止损点。
- 参数调优:
- 震荡市缩短周期(如 RSI 用 7 日),趋势市延长周期(如 ADX 用 20 日)。
- 验证信号:
- 结合成交量(如 MFI)或波动率(如 ATR)过滤虚假信号。
风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。