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 的平替。

43 个指标类84 条输出列0 个 C 依赖核验 ta 0.11.0

项目来源

5235 Star · 1159 Fork · MIT 许可 · 采集于 2026-10-10(数字会随社区变化)

bukosabino/ta GitHub 仓库页面截图 查看源码 ↗
仓库页截图仅证明项目当前公开状态(5,235 Star / 1,159 Fork / MIT / 663 commits / 最新代码提交 2023-11-02),不证明本机安装成功,也不证明 ta 与 EasyClaw 存在集成。

它做什么

ta 能做什么、不能做什么:七个常见误解逐条对照

问题ta 的答案证据来源
它做什么?把 OHLCV 时间序列算成指标特征列(DataFrame 列),用于特征工程与后续统计分析README 首段 + ta/wrapper.py
要装什么?pip install ta(PyPI 包名就叫 ta);运行期只需要 numpy 与 pandassetup.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 只吃 DataFrameREADME「Wrapper to get financial data」仍列在 TODO

一句话总结:ta 的定位是「特征列生成器」。把它当成策略库、行情接口或回测框架都会用错方向。本站在回测边界页把「算完指标还缺哪几步」单独拆开讲。

指标分类

ta 的 43 个指标分几类:五类实测计数与预热长度是多少

类别模块实测类数代表指标典型预热长度
成交量 Volumeta.volume9MFI、OBV、CMF、Force Index、VWAP、NVI0–14 行(OBV/ADI/NVI 无预热)
波动率 Volatilityta.volatility5ATR、Bollinger Bands、Keltner Channel、Donchian Channel、Ulcer Index0–20 行(ATR 表头是 0 不是 NaN)
趋势 Trendta.trend15SMA、EMA、WMA、MACD、ADX、CCI、Aroon、PSAR、Ichimoku、STC、TRIX、Mass Index、KST、Vortex13–47 行(STC/Mass Index 最长 47)
动量 Momentumta.momentum11RSI、StochRSI、TSI、UO、Stochastic、Williams %R、Awesome Oscillator、KAMA、ROC、PPO、PVO13–37 行(TSI 最长 37)
其他 Othersta.others3Daily Return、Daily Log Return、Cumulative Return0–1 行

实测结论:README 声称的 43 个指标与代码完全对得上——本机逐一实例化得到 43 个类,五类计数(9 / 5 / 15 / 11 / 3)与 README 五张表的行数逐类一致;但这 43 个类对外一共吐出 84 条输出序列(一个类常有 2–7 个输出列)。完整清单见指标目录页。

快速上手

ta 怎么快速上手:五步跑出第一列 RSI

从零到算出第一列 RSI

  1. 装 wheel 再装 ta:python -m pip install wheel && python -m pip install ta——直接 pip install ta 在全新虚拟环境里会失败,原因见下一节。
  2. 确认版本:python -m pip show ta 应显示 Version: 0.11.0。注意 ta 没有 __version__ 属性,用 ta.__version__ 会 AttributeError。
  3. 准备行情表:六列 open/high/low/close/volume 全小写,索引为 DatetimeIndex,至少 43 行(最长预热 47 行)。
  4. 从子模块导入指标类:from ta.momentum import RSIIndicator——import ta 之后 ta.RSIIndicator 是不存在的。
  5. 算出来并检查表头: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-failedPyPI 上 ta 的 55 个版本全部只有 sdist、没有 wheel;sdist 用 distutils.core.setup,而新 pip 创建的 venv 不再预装 wheel 包先 pip install wheel,再 pip install ta(实测 23 秒装成)
顶层包找不到指标类import ta; ta.RSIIndicator → AttributeErrorta/__init__.py 的 __all__ 只导出 6 个 wrapper 函数,43 个指标类都在子模块里from ta.momentum import RSIIndicator;或 import ta.momentum 后用全路径
ATR / ADX 表头是 0AverageTrueRange(...).average_true_range().head(13) 全是 0.0,isna().sum() 却是 0AverageTrueRange._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 / Watchers5,235 / 1,159 / 145GitHub 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 Releases0 个正式 Release,只有 65 个 tagAPI /releases 返回空数组
贡献者27 人,其中作者本人 544 commitsGitHub contributors API
仓库语言构成Jupyter Notebook 1.29 MB / Python 249 KBGitHub 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 路线。

阅读路线

ta 遇到问题该看哪一页

你的处境先看哪一页这一页给你什么
装不上 / 报 bdist_wheel安装与版本核验报错原文、根因、修复命令、依赖解析结果与离线安装注意点
数据喂进去就报错或全 NaNOHLCV 数据契约六列口径、索引要求、yfinance 列名对照、0 值与缺失值的真实后果
不知道有没有我要的指标指标目录43 个类 × 84 条输出列的实测清单与选型建议
结果前面一堆 NaN预热窗口与 NaN每个指标的预热长度实测值 + fillna=True 到底填了什么
怀疑算错了指标数值验证RSI / MACD / 布林带 / ATR 的手算三路对照与偏差来源
想一次性加很多列批量特征工程86 列清单、vectorized 掉列、窗口硬编码与内存代价

另外两页是横向对照:三库对比解决「该装哪个」,回测边界解决「算完指标之后还差什么」。

FAQ

关于 ta 的常见问题

ta 是什么?和 TA-Lib 是同一个东西吗?
不是。ta 指 PyPI 包名 ta、仓库 bukosabino/ta,是基于 Pandas/NumPy 的纯 Python 指标库,43 个指标类、零 C 依赖。TA-Lib 是另一套 C 语言库加 Python 包装,覆盖 150+ 指标与 60+ K 线形态函数,Windows 上要单独处理 C 库。两者只在「都算技术指标」这一点上重叠。三库的详细边界见对比页。
ta 现在还在维护吗?
按本机采集的数据:PyPI 最新版本 0.11.0 上传于 2023-11-02;master 上最后一次代码提交也停在 2023-11-02,之后 2026-03-18 只有一次 README 改动。GitHub Releases 为 0 个,只有 65 个 tag。所以「社区仍在用(5,235 Star、近 30 天仍有下载)」和「代码已两年多没有功能更新」同时成立。本站按后者提示风险,具体数字以 GitHub 与 PyPI 官方页面为准。
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 不提供任何行情接口,它只接受你已经准备好的 DataFrame。A 股数据要自己用 Tushare、akshare 等取,取完注意复权口径与列名大小写。换句话说:「ta 能不能用 A 股」这个问题等价于「你能不能把 A 股数据整理成六列 OHLCV」——整理方法见数据契约页。
ta 算出来的 RSI 和别人算的不一样,是错了吗?
不一定。ta 的 RSI 用的是 Wilder 平滑(ewm(alpha=1/14, adjust=False)),而不是简单移动平均;本机实测,两种算法在一份 400 行样本上、第 50 行之后的平均差异是 5.74 个点。差异主要来自平滑方式与起步阶段如何播种,不是 bug。要看具体对照数据请读数值验证页。
ta 能直接用来做回测吗?
不能。ta 只产出指标特征列,不产生交易信号、不建模手续费与滑点、不做样本外划分、不评估绩效。把指标列当成「策略已就绪」会跳过整个验证环节。缺的步骤逐条列在回测边界页。本站只介绍代码能力与边界,不提供也不建议任何交易决策。
ta 与 EasyClaw 是什么关系?
目前没有已证实集成:EasyClaw 本机技能目录里的 29 个技能没有任何一个封装了 ta。两者的关系是「任务可替代、能力不等价」——EasyClaw 的 K 线技术分析类技能能直接给出某只标的的指标状态,而 ta 给你可以接进自己管道的 DataFrame 列。逐技能对照见导航栏的「对比」页。

接下来读哪一页?

先确认环境能装上、版本对得上——安装页给了完整报错原文与修复命令,并列出 pip 实际解析到的依赖版本。