方法清单与桩函数

FinTA 支持哪些指标:README 写 80 个,代码里其实有 90 个

README 的「Supported indicators」一段写着 "over 80",下面列了 80 条指标名; 而 TA 类里实际有 90 个公开方法(master 上是 92 个)。 多出来的不只是命名差异——其中 5 个方法的函数体只有一句 raise NotImplementedError,另外 README 也漏掉了 12 个真实可用的方法。

换句话:照着 README 选指标会漏;照着方法名选指标会踩空。 本站把 90 个方法逐个调用了一遍,把「能用 / 补不回来 / 环境造成」三类分开列出来。

README 801.3 共 90master 共 925 个未实现
README 列 80 个指标名全部真实存在,但漏了 12 个方法
1.3 里有 90 个公开方法76 个默认可调用
5 个方法体是空的raise NotImplementedError,换环境也不可用
依据对 finta/finta.py 的 AST 解析与逐方法调用实测整理的方法清点示意;不是官方功能清单。

FinTA · 三个数字

三个数字为什么对不上:80、90、92 分别指什么

表 1:三个数字的来源与差额
数字来自哪里怎么数出来的差额是什么
80README「Supported indicators」代码块把代码块里的 'XXX' 逐条提取计数README 只列了「指标」,没列辅助方法与后来新增的方法
90PyPI 1.3 的 class TAAST 解析取公开方法(不含 _ 开头)比 README 多 12 个:ALMA、BOP、DYMI、EVSTC、LWMA、MAMA、PSAR、SWI、VBM、VIDYA、WILLIAMS_FRACTAL,以及 README 未列的 VC(仅 master)
92GitHub master(af01fa5)的 finta/finta.py同样的 AST 清点比 1.3 多 VC 与 WAVEPM——这两个方法从未发版

三个数字没有一个是错的:README 描述的是文档覆盖,90/92 描述的是代码暴露。真正的问题在于文档与代码不同步、且仓库已归档——不会有人来对齐它们。所以本站把代码事实(90/92)作为主口径,README 只作为「官方叙述」引用。

FinTA · 文档缺口

README 漏掉了哪 12 个方法?哪些值得关注

表 2:README 未列出的 12 个方法
方法是什么1.3 上能否调用值不值得用
PSAR抛物线 SAR(另一套实现,与 SAR 并存)pandas 1.5 上可用;pandas 3 上抛 KeyError: 0值得,但要注意同名两套实现与 1.3 的列顺序问题
WILLIAMS_FRACTALWilliams 分形(结构高低点)可用值得,属于少见的形态类方法
BOPBalance Of Power(买卖力量平衡)可用值得,与 EBBP 相关但公式不同
VBMVolatility-Based Momentum可用按需
DYMI动态动量指数(RSI 的变周期版本)可用按需
EVSTC基于 EVWMA 的 Schaff Trend Cycle 变体pandas 1.5 可用;pandas 3 抛 iteritems按需,注意依赖旧 pandas
LWMA线性加权移动平均可用,但必须显式传 period(90 个方法里只有它没有默认参数)值得,是 WMA 的另一种写法
ALMAArnaud Legoux 移动平均不可用(未实现)不考虑
MAMAMESA 自适应移动平均不可用(未实现)不考虑
SWISine Wave 指标不可用(未实现);README 却把它列为受支持指标不考虑
VIDYA可变指数动态平均不可用(未实现)不考虑
VCValue Chart(4 列输出)1.3 里不存在,仅 master 有仅在装 master 时可用

LWMA 值得单独说一句:90 个方法里只有它没有默认参数。调用 TA.LWMA(ohlc) 会抛 TypeError: missing 1 required positional argument: 'period',看起来像 bug,其实是签名设计——写惯 TA.SMA(ohlc) 的人会在这里卡一下。

FinTA · 未实现桩

5 个 raise NotImplementedError 的方法怎么识别

# 一个桩方法的完整源码(finta 1.3,删去注释与装饰器后剩这些)
@classmethod
@inputvalidator("ohlc")
def ALMA(cls, ohlc: DataFrame, period: int = 9, sigma: int = 6, offset: float = 0.85) -> Series:
    """
    Arnaud Legoux Moving Average.
    """
    raise NotImplementedError

# 也就是说:签名、文档字符串、参数默认值都写好了,函数体是空的。
# 这类方法不是「版本没装对」,换任何 pandas/numpy 都不会好。

# 批量识别(实测:5 个)
import inspect
from finta import TA

stubs = []
for n in sorted(k for k in TA.__dict__ if not k.startswith('_')):
    src = inspect.getsource(getattr(TA, n))
    if 'raise NotImplementedError' in src and len(src.splitlines()) < 14:
        stubs.append(n)
print(stubs)   # ['ALMA', 'MAMA', 'SWI', 'TMF', 'VIDYA']
表 3:5 个未实现桩的逐个说明
方法文档字符串写的功能README 是否列为受支持替代做法
ALMAArnaud Legoux Moving Average否(README 未列)用 TA.WMA 或 TA.EMA 近似;要精确 ALMA 需自己实现
MAMAMESA Adaptive Moving Average否用 TA.KAMA(需旧 pandas)或外部库
SWISine Wave 指标是(README 把它列进了清单)没有等价物;需要正弦波类指标请换库
TMFTwiggs Money Index(README 写作 Twiggs Money Index)是可用 TA.CHAIKIN 或 TA.ADL 做近似,但公式不同
VIDYA可变指数动态平均是用 TA.ER + 自适应逻辑自己实现

注意后三行:README 明确把 SWI、VIDYA 写进了受支持指标清单,但代码里它们是桩。这是本站建议「用方法名而不是 README 选指标」的直接原因。

FinTA · 全量清单

90 个方法怎么按用途归类

表 4:六类方法的数量与可用状态(1.3 / pandas 3 与 pandas 1.5 两种环境)
类别方法数pandas 3 上可用pandas 1.5 上可用不受环境影响的缺口
均线 / 平滑181315ALMA、MAMA 是桩;KAMA、FRAMA、ZLEMA、EVWMA、VIDYA 受环境或实现影响
趋势 / 方向171416PSAR、SAR 在 pandas 3 上抛 KeyError;EV_MACD 受 iteritems 影响
动量 / 摆动191718SWI 是桩;EVSTC 受 iteritems 影响
波动率 / 通道121212无(该类最完整)
成交量 / 资金流171617TMF 是桩
复合 / 形态746WAVEPM、VC 在 1.3 里不存在

这张表的读法是:波动率类 12 个方法在任何环境下都完整可用,而均线类与趋势类各有 3–5 个坑。如果你的需求集中在 ATR、BBANDS、KC 这类通道与波动率指标,遭遇的问题会最少;集中在自适应均线上则正好落在最脆弱的一类。

FinTA · 选型建议

常见需求该用哪个方法,替代是什么

表 5:场景 → 建议方法 → 注意事项
你想要什么建议方法注意点不理想时的替代
最普通的均线TA.SMA(ohlc, n)默认 period=41,不是常见的 14 或 20,请显式传参TA.WMA / TA.EMA
对近期更敏感的均线TA.EMA(ohlc, n)默认 period=9;adjust=True 时前几行就有值(与 TA-Lib 不同)TA.DEMA / TA.TEMA
价格通道TA.BBANDS(ohlc, period=20, std_multiplier=2)返回 3 列;标准差是样本口径(ddof=1),宽度比 TA-Lib 大 √(20/19) 倍TA.KC(基于 ATR 的通道)
波动幅度TA.ATR(ohlc, 14)用的是 True Range 的简单均值,不是 Wilder 平滑,与 TA-Lib 有系统差自己按 Wilder 递归实现
超买超卖TA.RSI(ohlc, 14)与 ta 完全一致;与 TA-Lib 只在预热段不同TA.STOCHRSI / TA.WILLIAMS
量价关系TA.OBV(ohlc)1.3 在平盘日输出 NaN,master 沿用上一值——两版结果不同TA.MFI(与 TA-Lib 完全一致)
自适应均线TA.KAMA(需 pandas <2)ALMA/MAMA/VIDYA 都不可用改用仍在维护的库

选型时还有一个容易忽略的判断依据:这个方法有没有出现在官方测试里。tests/test_unit.py 有 86 个测试函数、用精确浮点断言,被测试覆盖的方法至少能证明「上游认为它会稳定输出这些数」——这比 README 的清单更可信。

FinTA · 核对清单

怎么把 FinTA 的方法清单变成自己的检查单

FinTA 方法清单落地的五步

  • 第一步:把你实际要用的指标写出来——不是「FinTA 支持什么」,而是「我的策略需要哪几个数」。常用需求基本落在 SMA / EMA / RSI / MACD / BBANDS / ATR / ADX / OBV / STOCH / WILLIAMS 这十个里,而它们在 FinTA 上都是可用状态。
  • 第二步:对每个指标跑一次桩检测——取源码看是否只含 raise NotImplementedError,或者直接调用一次看异常类型:桩方法抛 NotImplementedError,环境类问题抛别的异常。
  • 第三步:记录每个指标在你的环境里是否可用——同一个 FinTA 1.3,在 pandas 3 上有 14 个不可用、在 pandas 1.5 上只有 6 个。把实测结果写进项目笔记,而不是抄本站的数字。
  • 第四步:为可用的指标写一条断言——固定输入、固定输出。这一步的成本很低,但它是以后判断「是不是环境变了」的可靠依据;FinTA 已归档,不会有人替你发现回归。
  • 第五步:给不可用的指标定去向——环境类失效可以降版本修,桩方法只能换库或自实现;两条去向都要写进文档,而不是留在某个人的记忆里。
  • 表 6:你的指标落在哪一类、该怎么处理
    你的指标在 FinTA 上的状态建议处置
    SMA / EMA / WMA / SMMA可用,任何环境直接用,注意显式传 period(默认值不是常见值)
    RSI / STOCH / WILLIAMS / CCI / MFI可用,且与其他库数值可对齐直接用(CCI 记得期数显式传 20 或 14)
    MACD / PPO可用直接用;注意它只返回两列、没有柱状线

    最后提醒一句:这张检查单的目的不是让你背下 90 个方法,而是让「能不能用」变成一次可重复的实测。上游已经归档,本站在这里给出一套判定流程,比给出一个快照式的结论更有用——因为你的环境会变,而 FinTA 不会。

    FAQ

    关于 FinTA 方法清单的常见问题

    FinTA 到底有多少个指标?
    按不同口径:README 列 80 条指标名;PyPI 1.3 的 TA 类有 90 个公开方法;GitHub master 有 92 个。本站以代码为准,并以 master 的 pinned commit 作为核验基准。具体数字以官方源码为准,本站给出了清点方法。
    README 里的指标都可用吗?
    不是。SWI、TMF、VIDYA 三个方法被 README 列为受支持指标,但函数体只有 raise NotImplementedError。另外 README 还有 12 个方法完全没列到。建议以「方法是否存在 + 实测能否调用」为判据,而不是看清单。
    TS 类为什么用不了?
    因为它从来不存在。本站把 8 个历史版本的源码逐个解析,只有 class TA。中文教程里的 from finta import TA, TS 属于错误信息,任何版本上都会 AttributeError。
    PSAR 和 SAR 有什么区别?
    两者都是抛物线 SAR 的实现,参数名不同(PSAR(iaf, maxaf) vs SAR(af, amax)),返回类型也不同(DataFrame vs Series)。PSAR 未出现在 README 清单里;1.3 上它返回的 psarbull / psarbear 两列顺序与 master 相反。
    怎么自己确认某个方法是不是空壳?
    用 inspect.getsource() 取源码,判断是否含 raise NotImplementedError 且函数体很短。本站给出了完整的十行脚本。更省事的办法是直接调用一次——桩方法会立刻抛 NotImplementedError,而环境问题会抛别的异常类型,两者可区分。
    如果我要的指标正好是失效的那几个怎么办?
    两条路:① 把 pandas 钉到 2.0 之前,可以救回 8 个环境类失效的方法(但救不回 5 个桩);② 换库——ta、pandas-ta、TA-Lib 在同样需求上的覆盖与代价见选型与迁移页。本站只做能力对照,不替你决定。

    相关阅读:安装与运行时实测、源码公式与预热。本页结论绑定 2026-10-12 的实测环境(Python 3.11.9),数值口径以官方源码为准。

    接下来读哪一页?

    选好方法之后,把它接到自己的数据上是下一步——而这里有个只有实测才看得见的坑:数据行序反了,指标会把未来 K 线算进当天。数据契约页给了可复现的数值证据。