ta / bukosabino-ta 中文可验证实战手册
ta 是什么:Pandas 上的指标特征列生成器,不是回测系统
ta(PyPI 包名 ta,仓库 bukosabino/ta)是一个把
OHLCV 行情表变成指标特征列的纯 Python 库:43 个指标类,依赖只有 NumPy 和 Pandas,
没有 C 扩展。pip install ta 之后,你可以用一行
add_all_ta_features() 把 5 列行情扩成 86 列特征。
它的难点不在算法,而在口径:列名大小写、索引类型、预热窗口有多长、
fillna 到底填了什么、哪些指标的表头是 0 而不是 NaN。本站把这四件事用本机实测数据逐条写清,
并明确它不是回测系统、不是 TA-Lib 的平替。
项目来源
5235 Star · 1159 Fork · MIT 许可 · 采集于 2026-10-10(数字会随社区变化)
查看源码 ↗
它做什么
ta 能做什么、不能做什么:七个常见误解逐条对照
| 问题 | ta 的答案 | 证据来源 |
|---|---|---|
| 它做什么? | 把 OHLCV 时间序列算成指标特征列(DataFrame 列),用于特征工程与后续统计分析 | README 首段 + ta/wrapper.py |
| 要装什么? | pip install ta(PyPI 包名就叫 ta);运行期只需要 numpy 与 pandas | setup.py 的 install_requires |
| 有 C 依赖吗? | 没有。全部指标用 NumPy/Pandas 实现,Windows 上不需要编译 | 仓库无 .c/.pyx;本机 pip install 全程未调用编译器 |
| 是 TA-Lib 的平替吗? | 不是。TA-Lib 是 C 库 + Python 包装,覆盖 150+ 指标与 60+ K 线形态函数;ta 是 43 个指标类,没有形态识别 | 两边官方仓库的能力列表 |
| 是 pandas-ta 的平替吗? | 不是。pandas-ta 用 df.ta accessor 风格、指标数量更多;ta 是显式类 + 显式列名 | 两边 README 的 API 示例 |
| 能直接回测吗? | 不能。ta 不产生信号、不建模成交与成本、不评估绩效;它只产出特征列 | 仓库无回测模块;test/ 只有指标单测 |
| 有实时行情接口吗? | 没有。数据要你自己取自 Tushare / akshare / yfinance 等,ta 只吃 DataFrame | README「Wrapper to get financial data」仍列在 TODO |
一句话总结:ta 的定位是「特征列生成器」。把它当成策略库、行情接口或回测框架都会用错方向。本站在回测边界页把「算完指标还缺哪几步」单独拆开讲。
指标分类
ta 的 43 个指标分几类:五类实测计数与预热长度是多少
| 类别 | 模块 | 实测类数 | 代表指标 | 典型预热长度 |
|---|---|---|---|---|
| 成交量 Volume | ta.volume | 9 | MFI、OBV、CMF、Force Index、VWAP、NVI | 0–14 行(OBV/ADI/NVI 无预热) |
| 波动率 Volatility | ta.volatility | 5 | ATR、Bollinger Bands、Keltner Channel、Donchian Channel、Ulcer Index | 0–20 行(ATR 表头是 0 不是 NaN) |
| 趋势 Trend | ta.trend | 15 | SMA、EMA、WMA、MACD、ADX、CCI、Aroon、PSAR、Ichimoku、STC、TRIX、Mass Index、KST、Vortex | 13–47 行(STC/Mass Index 最长 47) |
| 动量 Momentum | ta.momentum | 11 | RSI、StochRSI、TSI、UO、Stochastic、Williams %R、Awesome Oscillator、KAMA、ROC、PPO、PVO | 13–37 行(TSI 最长 37) |
| 其他 Others | ta.others | 3 | Daily Return、Daily Log Return、Cumulative Return | 0–1 行 |
实测结论:README 声称的 43 个指标与代码完全对得上——本机逐一实例化得到 43 个类,五类计数(9 / 5 / 15 / 11 / 3)与 README 五张表的行数逐类一致;但这 43 个类对外一共吐出 84 条输出序列(一个类常有 2–7 个输出列)。完整清单见指标目录页。
快速上手
ta 怎么快速上手:五步跑出第一列 RSI
从零到算出第一列 RSI
- 装 wheel 再装 ta:
python -m pip install wheel && python -m pip install ta——直接pip install ta在全新虚拟环境里会失败,原因见下一节。 - 确认版本:
python -m pip show ta应显示Version: 0.11.0。注意ta没有__version__属性,用ta.__version__会 AttributeError。 - 准备行情表:六列
open/high/low/close/volume全小写,索引为DatetimeIndex,至少 43 行(最长预热 47 行)。 - 从子模块导入指标类:
from ta.momentum import RSIIndicator——import ta之后ta.RSIIndicator是不存在的。 - 算出来并检查表头:
RSIIndicator(close=df["close"], window=14).rsi()的前 13 行是 NaN,从第 14 行开始才有值。
# 本机实测可跑通的最小片段(Python 3.11.9 / ta 0.11.0 / pandas 3.0.6) import pandas as pd from ta.momentum import RSIIndicator from ta.volatility import BollingerBands df = pd.read_csv("ohlcv.csv", index_col="date", parse_dates=True) # 索引必须是日期 df.columns = [c.lower() for c in df.columns] # 列名必须全小写 rsi = RSIIndicator(close=df["close"], window=14, fillna=False).rsi() bb = BollingerBands(close=df["close"], window=20, window_dev=2, fillna=False) print(rsi.isna().sum()) # 实测:13 print(bb.bollinger_mavg().isna().sum()) # 实测:19 df["rsi14"] = rsi df["bb_width"] = bb.bollinger_wband()
上面两个 print 的数字不是估计值,是本站在一份 400 行合成行情上实测出来的(见预热与 NaN 页的完整表格)。
实测陷阱
ta 上手最容易踩的四个坑分别是什么
| 陷阱 | 现象 | 根因(已定位) | 修法 |
|---|---|---|---|
| 全新环境安装失败 | pip install ta 报 error: invalid command 'bdist_wheel' + metadata-generation-failed | PyPI 上 ta 的 55 个版本全部只有 sdist、没有 wheel;sdist 用 distutils.core.setup,而新 pip 创建的 venv 不再预装 wheel 包 | 先 pip install wheel,再 pip install ta(实测 23 秒装成) |
| 顶层包找不到指标类 | import ta; ta.RSIIndicator → AttributeError | ta/__init__.py 的 __all__ 只导出 6 个 wrapper 函数,43 个指标类都在子模块里 | from ta.momentum import RSIIndicator;或 import ta.momentum 后用全路径 |
| ATR / ADX 表头是 0 | AverageTrueRange(...).average_true_range().head(13) 全是 0.0,isna().sum() 却是 0 | AverageTrueRange._run() 用 np.zeros(len(close)) 初始化数组,再用循环从第 window-1 位填起,前面没被赋值的就是 0 | 不要用 isna() 判断可用性;atr.replace(0, pd.NA) 或按窗口手动切片 |
| dropna 删掉合法数据 | ta.utils.dropna(df) 把 volume=0 的行整行删掉 | dropna() 的源码里先做了 df[df != 0.0],把任何 0 值当成缺失值 | 停牌/无成交行要在调用前单独处理;需要保留 0 时不要用这个函数 |
这四条都是本站实测出来的,官方 README 与文档里没有写。完整复现命令、原始报错文本与依赖版本记在安装与版本核验页。
版本快照
ta 现在是什么状态:版本、社区与维护节奏
| 项 | 实测值 | 口径 / 采集方式 |
|---|---|---|
| Stars / Forks / Watchers | 5,235 / 1,159 / 145 | GitHub REST API,2026-10-10 采集 |
| 仓库 commit 数 / tag 数 | 663 / 65 | 仓库页与 API 一致(2026-10-10) |
| 最新代码提交 | 2023-11-02("fixing linter details" 一线) | master 上 0.11.0 tag 对应提交 |
| README 最后更新 | 2026-03-18(仅改 README) | master HEAD a8904107 |
| PyPI 最新版本 | 0.11.0(上传于 2023-11-02) | PyPI JSON API;共 55 个版本 |
| GitHub Releases | 0 个正式 Release,只有 65 个 tag | API /releases 返回空数组 |
| 贡献者 | 27 人,其中作者本人 544 commits | GitHub contributors API |
| 仓库语言构成 | Jupyter Notebook 1.29 MB / Python 249 KB | GitHub languages API——文档示例以 Notebook 为主 |
怎么读这张表:代码冻结在 2023-11,README 在 2026-03 还在动,PyPI 最新版本就是 0.11.0。这意味着「ta 还在积极维护」和「ta 已经很久没有功能更新」两种说法都能从数据里读出来——本站按后者提示风险,因为指标实现确实没有再动。
路线选择
自建管道还是用 EasyClaw:两条路线怎么分工
| 维度 | 自建:pip 装 ta 写脚本 | EasyClaw:一句话让技能去算 |
|---|---|---|
| 你要准备 | Python 3.9+、能建虚拟环境、有一份 OHLCV 数据 | 装好 EasyClaw;按技能不同可能要 Tushare Token 或问财/妙想 API Key |
| 你得到的 | DataFrame 指标列,可接自己的特征工程与回测 | 一份带解读的分析结果(表格 / 图 / 报告) |
| 灵活性 | 高:任意标的、任意窗口、任意输出列组合 | 中:走技能预设的分析口径 |
| 前置门槛 | 要会读文档、查预热窗口、处理 NaN | 不用写代码,但要理解技能给出的结论边界 |
| 适合谁 | 要把指标接进自己的模型或回测管道 | 想先快速看一眼某只标的的技术面状态 |
两条路线可以并存,也可以叠加:用 EasyClaw 技能取数与出图,把结果导回自己的 Python 管道。本站不暗示 ta 已经被 EasyClaw 集成——两边目前没有已证实集成,逐技能的对照表放在导航栏的「对比」页里(首页不做第二个对比入口,以免与导航重复)。
EasyClaw demo
不写代码的话,指标怎么算出来
如果你只是想「看一眼某只标的现在的 RSI、MACD 和布林带」,不需要为它装一套 Python 环境。下面两张截图是 EasyClaw 技能在同一类任务上的输出,作为免编码路线的参考;需要把指标接进自己的管道时,仍然应该走上一节的 pip 路线。
A · 对贵州茅台(600519)提问技术面:MACD 柱状图 0.74、DIF -12.15 / DEA -12.52、RSI 56.86/47.58/47.03、布林中轨 1269.54 元(收盘价低于中轨),结论是「下跌趋势中的短线修复」。截图由 EasyClaw 在 2 分 5 秒内完成,不是本项目 ta 的运行结果;它用的是 EasyClaw 自己的指标实现,与本项目 ta 的实现不同(同一指标不同库会有数值差异)。ta 与 EasyClaw 无已证实集成。仅供研究,不构成投资建议。
阅读路线
ta 遇到问题该看哪一页
| 你的处境 | 先看哪一页 | 这一页给你什么 |
|---|---|---|
装不上 / 报 bdist_wheel | 安装与版本核验 | 报错原文、根因、修复命令、依赖解析结果与离线安装注意点 |
| 数据喂进去就报错或全 NaN | OHLCV 数据契约 | 六列口径、索引要求、yfinance 列名对照、0 值与缺失值的真实后果 |
| 不知道有没有我要的指标 | 指标目录 | 43 个类 × 84 条输出列的实测清单与选型建议 |
| 结果前面一堆 NaN | 预热窗口与 NaN | 每个指标的预热长度实测值 + fillna=True 到底填了什么 |
| 怀疑算错了 | 指标数值验证 | RSI / MACD / 布林带 / ATR 的手算三路对照与偏差来源 |
| 想一次性加很多列 | 批量特征工程 | 86 列清单、vectorized 掉列、窗口硬编码与内存代价 |
FAQ
关于 ta 的常见问题
ta 是什么?和 TA-Lib 是同一个东西吗?
ta、仓库 bukosabino/ta,是基于 Pandas/NumPy 的纯 Python 指标库,43 个指标类、零 C 依赖。TA-Lib 是另一套 C 语言库加 Python 包装,覆盖 150+ 指标与 60+ K 线形态函数,Windows 上要单独处理 C 库。两者只在「都算技术指标」这一点上重叠。三库的详细边界见对比页。ta 现在还在维护吗?
pip install ta 报 bdist_wheel 错误怎么办?
python -m pip install wheel,再 python -m pip install ta。根因是 PyPI 上 ta 的所有版本只提供 sdist(没有 wheel),而新版 pip 创建的虚拟环境不再预装 wheel 包,构建元数据阶段就会失败。本站实测:先装 wheel 后 23 秒完成安装,得到的依赖是 numpy 2.4.6 + pandas 3.0.6。完整报错原文见安装页。ta 支持 A 股数据吗?
ta 算出来的 RSI 和别人算的不一样,是错了吗?
ewm(alpha=1/14, adjust=False)),而不是简单移动平均;本机实测,两种算法在一份 400 行样本上、第 50 行之后的平均差异是 5.74 个点。差异主要来自平滑方式与起步阶段如何播种,不是 bug。要看具体对照数据请读数值验证页。