FinTA / peerchemist-finta 中文可验证实战手册
FinTA 是什么:一个已归档的 Pandas 技术指标库,90 个方法里哪些还能用
FinTA(PyPI 包名 finta,仓库 peerchemist/finta)把常见技术指标
实现成直接吃 Pandas DataFrame 的类方法:from finta import TA 之后,
TA.SMA(ohlc, 42)、TA.BBANDS(ohlc) 一行一个指标,
依赖只有 numpy 与 pandas,没有 C 扩展。
但它有两个大多数中文教程没有交代的前提:GitHub 仓库已于 2022-09-02 归档(只读), PyPI 也停在 2021-04 发布的 1.3;而且「pip 装得上」不等于「跑得通」—— 本站实测在今天默认解析出的 pandas 3 / numpy 2 环境下,90 个方法里有 14 个直接抛异常。 本站把这些数字逐条量出来,并说明它不是回测系统、不是行情接口、 也不是 finta.ai。
项目来源
2.3k Star · 715 Fork · LGPL-3.0 许可 · 仓库已于 2022-09-02 归档(只读)· 采集于 2026-10-12(数字会随社区变化)
查看源码 ↗
它是什么
FinTA 是什么?它和 finta.ai、TA-Lib、pandas-ta 分别是什么关系
| 你可能想问的 | FinTA 的答案 | 证据来源 |
|---|---|---|
| 它是做什么的? | 把一份 OHLCV 行情表算成指标列:SMA、EMA、RSI、MACD、BBANDS 等 90 个公开方法,输入 DataFrame、输出 Series 或 DataFrame | README「Common financial technical indicators implemented in Pandas」+ finta/finta.py 的 AST 清点 |
| 它是 finta.ai 那个产品吗? | 不是,两者没有任何关系。FinTA 是 Python 技术指标库;finta.ai 是另一个 AI Relationship Intelligence / CRM 产品。本项目 README、setup.py 与 PyPI 元数据里的官方链接只有 GitHub 一条,从未提及 finta.ai | README / setup.py 的 url 字段 / PyPI project_urls 只有 Homepage |
| 它是 TA-Lib 的平替吗? | 方向相反:TA-Lib 是 C 库加 Python 包装、覆盖 150+ 指标与形态识别;FinTA 只有 Python,源码里 talib 出现 0 次,不调用 TA-Lib 也不做形态识别 | 仓库全部源码 grep talib = 0;finta/finta.py 只 import pandas / numpy |
| 它和 pandas-ta、ta 是同一个东西吗? | 三个独立项目。都做「在 Pandas 上算指标」,但维护状态、依赖、返回结构与页面风格都不同,本站有专门一页做五库对照 | 各项目官方仓库与 PyPI 页面(2026-10-12 采集) |
| 现在是活跃项目吗? | 不是。GitHub 仓库已于 2022-09-02 归档为只读,默认分支最后一次代码推送是 2022-07-24;PyPI 最新版本 1.3 上传于 2021-04-03,此后没有 1.4 | 仓库页归档横幅 + GitHub API archived 字段 + PyPI releases 全量列表 |
| 它要装什么? | 只需要 pip install finta;install_requires 只有 pandas 与 numpy 两项,且都不带上界 | PyPI info.requires_dist + setup.py |
| 它能自己取行情吗? | 不能。FinTA 不提供任何行情接口,数据要你自己从 akshare、Tushare、yfinance 等取好再传进去 | 仓库只有 finta/、tests/、examples/ 三个目录,无网络数据模块 |
一句话定位:FinTA 是「把行情表变成指标列」的纯 Pandas 工具。把它当成策略库、行情接口或回测框架都会用错方向;而它的真实约束不在算法,在版本已冻结与新旧 pandas 的兼容性这两件事上——下面两块分别给出实测结论。
项目状态
FinTA 现在还在维护吗?发版与归档时间线怎么读
| 时间 | 发生了什么 | 对使用者的影响 | 证据 |
|---|---|---|---|
| 2018-06-13 | PyPI 首次发布 0.2.8 | 早期 API 与现在差异较大,老教程里的 TS 类在这份代码里不存在 | PyPI releases |
| 2020-07-26 | 发布 1.0(首个主版本号) | 0.4.x → 1.0 之间删掉了 VR 指标,旧代码会 AttributeError | 0.4.4 与 1.3 源码 AST 对比 |
| 2021-04-03 | 发布 1.3,是到今天为止的最后一个版本 | pip 装到的就是这一版(wheel 与 sdist 同日上传) | PyPI releases |
| 2021-10-19 | master 修了 OBV 的平盘处理、新增 VC 与 WAVEPM,并把 WTO 的拼写错误改掉 | 这些修正没有发到 PyPI:1.3 与 master 同一指标会算出不同的数 | commit d2ec08d / 2c4431b + 双源码并跑实测 |
| 2022-07-24 | 默认分支最后一次推送(PR #134),此后不再有提交 | 这是最后一次代码变更;6 周后仓库被标记归档 | GitHub API pushed_at / archived=true |
| 2022-09-02 | 仓库被作者归档,页面顶部出现「It is now read-only」横幅 | 此后 issue 不再修、PR 不再合;但 clone 与下载仍然可用 | 仓库页归档横幅(截图已存证)+ GitHub API archived=true |
| 2026-10-12 | 本站核验日:PyPI 仍只有 1.3,GitHub 仍是只读归档(Issues 22 / PR 2 / 394 commits / 23 tags / Releases 18) | 所有内容以 pinned commit af01fa5 为准,不会随时间变化 | 本次采集记录 + 仓库页截图 |
归档不等于不能用:1.3 的 90 个方法里仍有 76 个在当前环境下默认可用,而且它没有 C 依赖,装起来比 TA-Lib 省事。真正要留意的是「你已经不能再指望上游修任何东西」——所以下面的每一页都会给出自己验证的方法,而不是让你相信文档。想看 1.3 与 master 到底差多少,见项目状态页。
能力范围
FinTA 支持哪些指标?90 个方法按六类怎么分
| 类别 | 代表方法 | 个数 | 需要的列 | 注意点 |
|---|---|---|---|---|
| 均线 / 平滑 | SMA、SMM、SSMA、EMA、DEMA、TEMA、TRIMA、WMA、HMA、ZLEMA、KAMA、VIDYA、ALMA、MAMA、FRAMA、LWMA、SMMA、EVWMA | 18 | open/high/low/close(EVWMA 还要 volume) | KAMA/VIDYA/ALMA/MAMA 中三个是未实现桩或依赖已移除的 API,选型前先看方法清单页 |
| 趋势 / 方向 | MACD、PPO、VW_MACD、EV_MACD、DMI、ADX、VORTEX、KST、TSI、TRIX、PSAR、SAR、DO、ICHIMOKU、CHANDELIER、WILLIAMS_FRACTAL、BOP | 17 | OHLC(部分要 volume) | PSAR 与 SAR 在 pandas 3 上会抛 KeyError: 0;ADX 与其他库差异最大 |
| 动量 / 摆动 | RSI、IFT_RSI、STOCH、STOCHD、STOCHRSI、WILLIAMS、UO、AO、MOM、ROC、CCI、CMO、COPP、QSTICK、STC、EVSTC、DYMI、VBM、SWI | 19 | OHLC | RSI 与 ta 完全一致、与 TA-Lib 只在预热段有差异;SWI 是未实现桩 |
| 波动率 / 通道 | ATR、TR、BBANDS、BBWIDTH、MOBO、PERCENT_B、KC、APZ、MSD、PIVOT、PIVOT_FIB、VC | 12 | OHLC | BBANDS 用样本标准差(ddof=1),与 TA-Lib/ta 有固定倍数差;ATR 是简单均值而非 Wilder |
| 成交量 / 资金流 | OBV、WOBV、ADL、CHAIKIN、MFI、VZO、PZO、EFI、CFI、EBBP、EMV、TMF、VPT、FVE、VFI、VWAP、VAMA | 17 | 必须含 volume | 缺 volume 会抛 LookupError;OBV 在平盘日的处理 1.3 与 master 不同 |
| 复合 / 形态 | AO、MI、SQZMI、WTO、FISH、ICHIMOKU、WAVEPM、BASPN、BASP、TP、ER | 7 | OHLC(少数要 volume) | WAVEPM 与 VC 只在 GitHub master 上存在,1.3 里没有 |
上表按「用途」分组是为了选型;官方 README 的清单是 80 条,而代码里实际有 90 个公开方法,差额是 ALMA、BOP、DYMI、EVSTC、LWMA、MAMA、PSAR、SWI、VBM、VIDYA、WILLIAMS_FRACTAL 等 12 个 README 没有列出的方法。逐个方法能不能跑,见方法清单与桩函数页。
安装与运行
FinTA 怎么安装?装完之后为什么有些方法会用不了
五步把「能不能用」量出来
python -m venv .venv 之后激活。本站实测用 Python 3.11.9;FinTA 的 PyPI 元数据里没有 requires_python,pip 不会替你拦版本。python -m pip install finta。实测这一步会成功,并解析出 finta 1.3 + numpy 2.4.6 + pandas 3.0.6——因为依赖没有上界。python -m pip show finta。注意包没有导出 __version__,写 finta.__version__ 会 AttributeError。inspect 取出 TA 的全部公开属性,再对每个方法用默认参数调用一次,把异常类型与原文记下来。tests/test_unit.py,用 tests/data/bittrex_btc-usdt.csv 断言精确浮点值,例如 TA.SMA(ohlc,14).values[-1] == 6922.33922063。本站实测这组值在 1.3 上逐条吻合。# 本机实测片段(Python 3.11.9 / finta 1.3 / pandas 3.0.6 / numpy 2.4.6)
import inspect
from finta import TA
names = sorted(k for k in TA.__dict__ if not k.startswith('_'))
print(len(names)) # 实测:90
ok, bad = [], []
for n in names:
try:
getattr(TA, n)(ohlc) # ohlc 至少要有 open/high/low/close 四列
ok.append(n)
except Exception as e:
bad.append((n, type(e).__name__, str(e)))
print(len(ok), len(bad)) # 实测:76 / 14
print(bad[:3])
# [('ALMA', NotImplementedError, ''),
# ('EVSTC', AttributeError, "'Series' object has no attribute 'iteritems'"),
# ('EVWMA', AttributeError, "'Series' object has no attribute 'iteritems'")]
| 依赖组合 | 默认可调用 | 抛异常 | 异常方法 | 结论 |
|---|---|---|---|---|
numpy 2.4.6 + pandas 3.0.6(pip install finta 今天的默认结果) | 76 / 90 | 14 | ALMA、MAMA、SWI、TMF、VIDYA、LWMA、EVWMA、EV_MACD、EVSTC、KAMA、FRAMA、PSAR、SAR、ZLEMA | 8 个故障来自新版 pandas/numpy:4 个 iteritems 已移除、FRAMA 遇到只读数组、PSAR/SAR 抛 KeyError: 0、ZLEMA 拒绝新的 rolling 参数 |
| numpy 1.26.4 + pandas 1.5.3(控制组) | 84 / 90 | 6 | ALMA、MAMA、SWI、TMF、VIDYA、LWMA | 只剩 5 个未实现桩(函数体就是 raise NotImplementedError)与 1 个必须显式传参的 LWMA——即 8 个故障是环境造成的,不是 FinTA 改过代码 |
所以「FinTA 还能不能用」的答案取决于你钉住哪个 pandas。如果你需要 KAMA 这类方法,就得把 pandas 钉在 2.0 之前;完整的失败清单、报错原文与三种处置方案见安装与运行页。
EasyClaw demo
不想配环境的话,同样的指标怎么算出来
如果你只是想「看一眼某只标的现在的 RSI、MACD 和布林带」,不需要为它装一套 Python 环境。 下面两张截图是 EasyClaw 技能在同一类任务上的输出,作为免编码路线的参考;需要把指标接进自己的数据管道、 或者要批量生成特征列时,仍然应该走上一节的 pip 路线。
A · 读取贵州茅台(600519)的 MACD、RSI 与布林带状态。截图由 EasyClaw 技能完成,用的是技能自己的指标实现,不是 FinTA 的运行结果——同一指标在不同库里数值会有差异,本站交叉验证页给出了逐个指标的差异量。FinTA 与 EasyClaw 无已证实集成。仅供研究。
这两张截图说明的是任务可替代,不是能力等价:EasyClaw 直接给结论,FinTA 给你可以接进自己管道的 DataFrame 列。两条路线的分工与前置条件对照,见导航栏的「对比」页。
适合谁
什么情况下该用 FinTA,什么情况下应该换别的库
适合:已经在用 pandas 做研究
你的数据本来就在 DataFrame 里,只差几列指标,而且能接受「锁定 pandas 版本 + 自己写测试」这两件事。FinTA 的 API 是显式类方法,没有 C 依赖,pip install 一次就完,适合脚本与 notebook。
适合:需要读源码学公式
finta/finta.py 是单文件 2308 行、92 个方法,每个方法对应一个指标公式,注释里带出处。想知道 RSI、ATR 到底怎么算,读它比读文档快。
不适合:需要长期维护的生产管道
上游已归档(2022-07 只读),不会再修 bug,也不会适配新的 pandas。把已归档库当作生产依赖,等于把未来的兼容性风险留给自己。
不适合:需要形态识别或高速计算
FinTA 不做 K 线形态识别,也没有 C 加速;需要 61 种蜡烛形态或百万级参数扫描时,应该看 TA-Lib 或向量化回测框架。五库对照见选型页。
阅读路线
遇到具体问题该看哪一页
| 你的处境 | 先看哪一页 | 这一页给你什么 |
|---|---|---|
| 装好了但一堆方法报错 | 安装与运行 | 14 个失败方法的报错原文、控制组对照、三种处置方案 |
| 不确定 pip 装的和我看的 README 是不是同一份代码 | 项目状态 | 1.3 与 master 的数值差异(OBV 834/874 行不同、WTO 最大差 30.14) |
| 想知道某个指标有没有、是不是空壳 | 方法清单与桩函数 | 90 个方法的逐个可用状态、README 漏掉的 12 个、5 个未实现桩 |
| 数据喂进去报 LookupError 或结果全不对 | 数据契约与索引顺序 | 列名规则、错误原文,以及行序反了会算出未来数据的实测证据 |
| 结果前面一片 NaN,不知道预热多长 | 源码公式与预热 | 逐指标首个有效行、NaN 数量、返回列名与平滑口径 |
| 算出来和 TA-Lib 不一样,不知道信哪个 | 交叉验证 | 同数据同周期三库对照:哪些完全一致、差多少、差在哪一步 |
| 想拿指标当买卖信号 | 指标不是策略 | 从指标到策略评估还缺的 5 步,以及未来函数、成本、T+1 的具体检查清单 |
| 在犹豫换哪个库 | 选型与迁移 | 五个库的维护状态、依赖代价、返回结构对照与迁移改动点 |
FAQ
关于 FinTA 的常见问题
FinTA 是什么?是 finta.ai 那个产品吗?
finta(仓库 peerchemist/finta),把技术指标实现成 Pandas 函数;finta.ai 是一个 AI Relationship Intelligence / CRM 产品。本项目官方元数据里的链接只有 GitHub 一条,从未提到 finta.ai。FinTA 现在还在维护吗?
pip install finta 装完之后为什么有些方法报错?
install_requires 只有不带版本上界的 numpy 与 pandas,pip 会解析到很新的版本。本站实测在 numpy 2.4.6 + pandas 3.0.6 上 90 个方法有 14 个抛异常;换成 numpy 1.26.4 + pandas 1.5.3 后只剩 6 个(其中 5 个是源码里就是空的桩函数)。详见安装页。FinTA 的 RSI 和 TA-Lib 算出来不一样,是错了吗?
33.386806,差异只出现在预热段(前 1/3 最大差 4.74,之后为 0)。真正差得明显的是布林带(FinTA 用样本标准差 ddof=1,TA-Lib 用总体标准差 ddof=0,宽度的比值恒为 √(20/19))与 ATR(简单均值 vs Wilder 平滑)。逐指标读数见交叉验证页;以各库官方源码为准。FinTA 能直接用来做回测吗?
TA.RSI(ohlc) < 30 当成买入信号,等于跳过整个验证环节。缺失的步骤逐条列在指标不是策略页。本站只介绍代码能力与边界,不提供也不建议任何交易决策。我手上的数据是最新日期在前,能直接传给 FinTA 吗?
2471.232500 变成 2612.512786,而后者正好等于「当天到未来第 13 根」的均值——也就是把未来数据算进了当天。传进去之前必须 df.sort_index(),细节见数据契约页。FinTA 与 EasyClaw 是什么关系?
finta 的引用次数是 0。两者的关系是「任务可替代、能力不等价」——EasyClaw 可以直接把某只标的的指标状态问出来,而 FinTA 给你能接进自己管道的指标列。逐技能分工见对比页。相关阅读:数据契约与索引顺序、与 TA-Lib 交叉验证。本页结论绑定 2026-10-12 的实测环境(Python 3.11.9),数值口径以官方源码为准。