第 4 章 · 02 TA-Lib 技术指标 本节摘要:本节讲怎么用 TA-Lib 库一键计算几十种经典技术指标。原项目 用 AAPL 2007-2010 年的日频数据,演示了三类最常用的指标:布林带(波动类)、RSI(动量类)、MACD(趋势类),并讲清每个指标的输入参数与输出结构。TA-Lib 是 C 库 + Python 封装,包含 150+ 个技术分析函数,覆盖趋势、动量、波动、成交量四大类,是金融特征工程的「瑞士军刀」。读完本节,你能在 pandas DataFrame 上调用 TA-Lib 一行算出主流技术指标,并理解每个指标背后的经济学含义。 内容来源:原项目 ,汉化并套用体系化模板。
本节摘要:本节讲怎么用 TA-Lib 库一键计算几十种经典技术指标。原项目
04_alpha_factor_research/02_how_to_use_talib.ipynb用 AAPL 2007-2010 年的日频数据,演示了三类最常用的指标:布林带(波动类)、RSI(动量类)、MACD(趋势类),并讲清每个指标的输入参数与输出结构。TA-Lib 是 C 库 + Python 封装,包含 150+ 个技术分析函数,覆盖趋势、动量、波动、成交量四大类,是金融特征工程的「瑞士军刀」。读完本节,你能在 pandas DataFrame 上调用 TA-Lib 一行算出主流技术指标,并理解每个指标背后的经济学含义。
内容来源:原项目
04_alpha_factor_research/02_how_to_use_talib.ipynb,汉化并套用体系化模板。
⚠️ 学习提示:TA-Lib 是 C 库,装起来在 Windows 上尤其麻烦(见第 1 章第 03 节);技术指标大多有「热身期」,前 N 根 K 线指标值为 NaN,使用时要剔除。
阅读完本节,你应当能够:
talib 一行算出布林带、RSI、MACD。TA-Lib(Technical Analysis Library)是最广使用的金融技术指标库,核心由 C 实现,通过 TA-Lib Python 包封装。它包含 150+ 个函数,覆盖:
| 类别 | 典型指标 | 经济学含义 |
|---|---|---|
| 趋势 | SMA/EMA/MACD/SAR | 价格方向 |
| 动量 | RSI/CCI/Williams%R/MOM | 涨跌的力度与拐点 |
| 波动 | BBANDS/ATR/STDDEV | 价格的波动幅度 |
| 成交量 | OBV/AD/ADOSC | 量价关系 |
原书第 24 章(Appendix - Alpha Factor Library)还提供了几十个用 TA-Lib 实现的常见 alpha 因子,可直接参考。
notebook 从 assets.h5 取 AAPL 2007-2010 的复权收盘:
with pd.HDFStore(DATA_STORE) as store: df = (store['quandl/wiki/prices'] .loc[idx['2007':'2010', 'AAPL'], 'adj_close'])
TA-Lib 接受 pandas Series 或 numpy 数组,推荐用 talib.abstract 接口,它直接吃 DataFrame:
import talib.abstract as ta
布林带由中轨(N 周期 SMA)与上下轨(±k 倍标准差)构成,衡量价格的相对高低:
upper, middle, lower = ta.BBANDS(df, timeperiod=20, nbdevup=2, nbdevdn=2)
| 参数 | 含义 | 常用值 |
|---|---|---|
timeperiod |
计算窗口 | 20 |
nbdevup/nbdevdn |
上下轨标准差倍数 | 2 |
输出三个序列(上轨/中轨/下轨)。典型用法:价格触及上轨视为超买,触及下轨视为超卖。
💡 核心心法:波动类指标(布林带、ATR)的真正用法不是「触及上轨就空」,而是把它标准化——如
(price - middle) / (upper - middle),变成 -1 到 +1 的相对位置,作为 ML 特征更稳健。
RSI 衡量一段时间内上涨幅度占涨跌总幅度的比例,范围 0~100:
df['rsi'] = ta.RSI(df, timeperiod=14)
| 阈值 | 含义 |
|---|---|
| RSI > 70 | 超买,可能回调 |
| RSI < 30 | 超卖,可能反弹 |
| RSI ≈ 50 | 中性 |
输出单个序列。RSI 是最经典的均值回归信号——超买卖空、超卖买入。
⚠️ 警告:RSI 在强趋势市场会长期停留超买/超卖区,「RSI>70 就空」会在牛市被碾压。把它当 ML 特征(与其他特征组合)远比当单一信号更稳。
MACD 是最经典的趋势类指标,notebook 详细描述了它的输入输出。TA-Lib 的 MACD 有四个输入、三个输出:
| 输入/输出 | 含义 |
|---|---|
输入:close |
收盘价 |
输入:fastperiod |
短期 EMA 周期,通常 12 |
输入:slowperiod |
长期 EMA 周期,通常 26 |
输入:signalperiod |
MACD 自身 EMA 周期,通常 9 |
输出:macd |
fast EMA − slow EMA |
输出:macdsignal |
macd 的 signalperiod EMA |
输出:macdhist |
macd − macdsignal(柱状图) |
macd, macdsignal, macdhist = ta.MACD(df, fastperiod=12, slowperiod=26, signalperiod=9)
典型用法:macdhist 由负转正视为多头启动,由正转负视为空头启动。
几乎所有 TA-Lib 指标都有热身期——前 N 根 K 线因数据不足输出 NaN:
| 指标 | 热身期(大致) |
|---|---|
| RSI(14) | 14 |
| MACD(12,26,9) | 33 左右 |
| BBANDS(20) | 20 |
| SMA(200) | 200 |
处理方式:
df = df.dropna() # 直接丢弃 # 或 df = df.fillna(method='bfill') # 不推荐,会泄露未来
💡 核心心法:处理 NaN 优先用
dropna()(丢弃热身期),不要bfill(用未来值回填),否则数据泄露。
TA-Lib 指标作为 ML 特征时,通常做两个变换:
(price - SMA) / ATR 之类,让不同价位的股票可比。这两个变换让指标从「交易信号」变成「ML 特征」,与第 1 节的特征工程流程衔接。
BBANDS 三输出,衡量价格相对高低,作为特征要标准化。RSI 单输出,0~100,经典均值回归信号,但单用易在趋势市被碾压。macdhist 由负转正是多头信号。dropna 处理,不要 bfill。下一节,我们看两种高级信号处理手段——卡尔曼滤波与小波去噪,把噪声大的价格序列提纯。