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。

90 个公开方法76 个默认可调用5 个未实现桩核验 PyPI 1.3 / master af01fa5

项目来源

2.3k Star · 715 Fork · LGPL-3.0 许可 · 仓库已于 2022-09-02 归档(只读)· 采集于 2026-10-12(数字会随社区变化)

peerchemist/finta GitHub 仓库页面截图 查看源码 ↗
仓库页截图仅证明该仓库当前的公开状态与归档状态(2.3k Star / 715 Fork / LGPL-3.0 / 页面顶部横幅写明 2022-09-02 归档为只读 / 最后一次代码推送 2022-07-24 / Releases 18 个、最新为 1.3),不证明本机安装成功,也不证明 FinTA 与 EasyClaw 存在集成。

它是什么

FinTA 是什么?它和 finta.ai、TA-Lib、pandas-ta 分别是什么关系

表 1:FinTA 的定位与四类常见误解
你可能想问的FinTA 的答案证据来源
它是做什么的?把一份 OHLCV 行情表算成指标列:SMA、EMA、RSI、MACD、BBANDS 等 90 个公开方法,输入 DataFrame、输出 Series 或 DataFrameREADME「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.aiREADME / 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 现在还在维护吗?发版与归档时间线怎么读

表 2:从首发到归档的可核对时间线
时间发生了什么对使用者的影响证据
2018-06-13PyPI 首次发布 0.2.8早期 API 与现在差异较大,老教程里的 TS 类在这份代码里不存在PyPI releases
2020-07-26发布 1.0(首个主版本号)0.4.x → 1.0 之间删掉了 VR 指标,旧代码会 AttributeError0.4.4 与 1.3 源码 AST 对比
2021-04-03发布 1.3,是到今天为止的最后一个版本pip 装到的就是这一版(wheel 与 sdist 同日上传)PyPI releases
2021-10-19master 修了 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 个方法按六类怎么分

表 3:90 个公开方法的分类与数据要求(按用途归类,便于选型)
类别代表方法个数需要的列注意点
均线 / 平滑SMA、SMM、SSMA、EMA、DEMA、TEMA、TRIMA、WMA、HMA、ZLEMA、KAMA、VIDYA、ALMA、MAMA、FRAMA、LWMA、SMMA、EVWMA18open/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、BOP17OHLC(部分要 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、SWI19OHLCRSI 与 ta 完全一致、与 TA-Lib 只在预热段有差异;SWI 是未实现桩
波动率 / 通道ATR、TR、BBANDS、BBWIDTH、MOBO、PERCENT_B、KC、APZ、MSD、PIVOT、PIVOT_FIB、VC12OHLCBBANDS 用样本标准差(ddof=1),与 TA-Lib/ta 有固定倍数差;ATR 是简单均值而非 Wilder
成交量 / 资金流OBV、WOBV、ADL、CHAIKIN、MFI、VZO、PZO、EFI、CFI、EBBP、EMV、TMF、VPT、FVE、VFI、VWAP、VAMA17必须含 volume缺 volume 会抛 LookupError;OBV 在平盘日的处理 1.3 与 master 不同
复合 / 形态AO、MI、SQZMI、WTO、FISH、ICHIMOKU、WAVEPM、BASPN、BASP、TP、ER7OHLC(少数要 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'")]
    表 4:同一份 finta 1.3,在两套依赖下的实测差异
    依赖组合默认可调用抛异常异常方法结论
    numpy 2.4.6 + pandas 3.0.6(pip install finta 今天的默认结果)76 / 9014ALMA、MAMA、SWI、TMF、VIDYA、LWMA、EVWMA、EV_MACD、EVSTC、KAMA、FRAMA、PSAR、SAR、ZLEMA8 个故障来自新版 pandas/numpy:4 个 iteritems 已移除、FRAMA 遇到只读数组、PSAR/SAR 抛 KeyError: 0、ZLEMA 拒绝新的 rolling 参数
    numpy 1.26.4 + pandas 1.5.3(控制组)84 / 906ALMA、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 路线。

    这两张截图说明的是任务可替代,不是能力等价: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 或向量化回测框架。五库对照见选型页。

    阅读路线

    遇到具体问题该看哪一页

    表 5:按你现在的处境选页面
    你的处境先看哪一页这一页给你什么
    装好了但一堆方法报错安装与运行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 是 Python 包 finta(仓库 peerchemist/finta),把技术指标实现成 Pandas 函数;finta.ai 是一个 AI Relationship Intelligence / CRM 产品。本项目官方元数据里的链接只有 GitHub 一条,从未提到 finta.ai。
    FinTA 现在还在维护吗?
    按 2026-10-12 的采集:GitHub 仓库已 archived(只读),最后一次推送是 2022-07-24;PyPI 最新版本是 1.3,上传于 2021-04-03,之后没有 1.4。所以它仍然可装可用,但不会再获得修复与新指标。具体数字以 GitHub 与 PyPI 官方页面为准。
    pip install finta 装完之后为什么有些方法报错?
    因为 PyPI 元数据里没有 requires_python、也没有 classifiers,而 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 算出来不一样,是错了吗?
    不一定是错。本机实测:RSI(14) 三个库最后一根都是 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 吗?
    不能直接传。FinTA 按行序计算,完全不看 DatetimeIndex 的先后。实测把同一份数据按时间倒序后,2017-06-10 的 SMA(14) 从 2471.232500 变成 2612.512786,而后者正好等于「当天到未来第 13 根」的均值——也就是把未来数据算进了当天。传进去之前必须 df.sort_index(),细节见数据契约页。
    FinTA 与 EasyClaw 是什么关系?
    目前没有已证实集成:本机 EasyClaw 技能目录里 29 个技能、603 个文件,对 finta 的引用次数是 0。两者的关系是「任务可替代、能力不等价」——EasyClaw 可以直接把某只标的的指标状态问出来,而 FinTA 给你能接进自己管道的指标列。逐技能分工见对比页。

    相关阅读:数据契约与索引顺序、与 TA-Lib 交叉验证。本页结论绑定 2026-10-12 的实测环境(Python 3.11.9),数值口径以官方源码为准。

    接下来读哪一页?

    先确认它在你的环境里到底能不能跑——安装页给了 14 个失败方法的报错原文、控制组对照与三种处置方案,并附一段可以直接复制运行的验收脚本。