方法清单与桩函数
FinTA 支持哪些指标:README 写 80 个,代码里其实有 90 个
README 的「Supported indicators」一段写着 "over 80",下面列了 80 条指标名;
而 TA 类里实际有 90 个公开方法(master 上是 92 个)。
多出来的不只是命名差异——其中 5 个方法的函数体只有一句
raise NotImplementedError,另外 README 也漏掉了 12 个真实可用的方法。
换句话:照着 README 选指标会漏;照着方法名选指标会踩空。 本站把 90 个方法逐个调用了一遍,把「能用 / 补不回来 / 环境造成」三类分开列出来。
finta/finta.py 的 AST 解析与逐方法调用实测整理的方法清点示意;不是官方功能清单。FinTA · 三个数字
三个数字为什么对不上:80、90、92 分别指什么
| 数字 | 来自哪里 | 怎么数出来的 | 差额是什么 |
|---|---|---|---|
| 80 | README「Supported indicators」代码块 | 把代码块里的 'XXX' 逐条提取计数 | README 只列了「指标」,没列辅助方法与后来新增的方法 |
| 90 | PyPI 1.3 的 class TA | AST 解析取公开方法(不含 _ 开头) | 比 README 多 12 个:ALMA、BOP、DYMI、EVSTC、LWMA、MAMA、PSAR、SWI、VBM、VIDYA、WILLIAMS_FRACTAL,以及 README 未列的 VC(仅 master) |
| 92 | GitHub master(af01fa5)的 finta/finta.py | 同样的 AST 清点 | 比 1.3 多 VC 与 WAVEPM——这两个方法从未发版 |
三个数字没有一个是错的:README 描述的是文档覆盖,90/92 描述的是代码暴露。真正的问题在于文档与代码不同步、且仓库已归档——不会有人来对齐它们。所以本站把代码事实(90/92)作为主口径,README 只作为「官方叙述」引用。
FinTA · 文档缺口
README 漏掉了哪 12 个方法?哪些值得关注
| 方法 | 是什么 | 1.3 上能否调用 | 值不值得用 |
|---|---|---|---|
PSAR | 抛物线 SAR(另一套实现,与 SAR 并存) | pandas 1.5 上可用;pandas 3 上抛 KeyError: 0 | 值得,但要注意同名两套实现与 1.3 的列顺序问题 |
WILLIAMS_FRACTAL | Williams 分形(结构高低点) | 可用 | 值得,属于少见的形态类方法 |
BOP | Balance Of Power(买卖力量平衡) | 可用 | 值得,与 EBBP 相关但公式不同 |
VBM | Volatility-Based Momentum | 可用 | 按需 |
DYMI | 动态动量指数(RSI 的变周期版本) | 可用 | 按需 |
EVSTC | 基于 EVWMA 的 Schaff Trend Cycle 变体 | pandas 1.5 可用;pandas 3 抛 iteritems | 按需,注意依赖旧 pandas |
LWMA | 线性加权移动平均 | 可用,但必须显式传 period(90 个方法里只有它没有默认参数) | 值得,是 WMA 的另一种写法 |
ALMA | Arnaud Legoux 移动平均 | 不可用(未实现) | 不考虑 |
MAMA | MESA 自适应移动平均 | 不可用(未实现) | 不考虑 |
SWI | Sine Wave 指标 | 不可用(未实现);README 却把它列为受支持指标 | 不考虑 |
VIDYA | 可变指数动态平均 | 不可用(未实现) | 不考虑 |
VC | Value 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']
| 方法 | 文档字符串写的功能 | README 是否列为受支持 | 替代做法 |
|---|---|---|---|
ALMA | Arnaud Legoux Moving Average | 否(README 未列) | 用 TA.WMA 或 TA.EMA 近似;要精确 ALMA 需自己实现 |
MAMA | MESA Adaptive Moving Average | 否 | 用 TA.KAMA(需旧 pandas)或外部库 |
SWI | Sine Wave 指标 | 是(README 把它列进了清单) | 没有等价物;需要正弦波类指标请换库 |
TMF | Twiggs Money Index(README 写作 Twiggs Money Index) | 是 | 可用 TA.CHAIKIN 或 TA.ADL 做近似,但公式不同 |
VIDYA | 可变指数动态平均 | 是 | 用 TA.ER + 自适应逻辑自己实现 |
注意后三行:README 明确把 SWI、VIDYA 写进了受支持指标清单,但代码里它们是桩。这是本站建议「用方法名而不是 README 选指标」的直接原因。
FinTA · 全量清单
90 个方法怎么按用途归类
| 类别 | 方法数 | pandas 3 上可用 | pandas 1.5 上可用 | 不受环境影响的缺口 |
|---|---|---|---|---|
| 均线 / 平滑 | 18 | 13 | 15 | ALMA、MAMA 是桩;KAMA、FRAMA、ZLEMA、EVWMA、VIDYA 受环境或实现影响 |
| 趋势 / 方向 | 17 | 14 | 16 | PSAR、SAR 在 pandas 3 上抛 KeyError;EV_MACD 受 iteritems 影响 |
| 动量 / 摆动 | 19 | 17 | 18 | SWI 是桩;EVSTC 受 iteritems 影响 |
| 波动率 / 通道 | 12 | 12 | 12 | 无(该类最完整) |
| 成交量 / 资金流 | 17 | 16 | 17 | TMF 是桩 |
| 复合 / 形态 | 7 | 4 | 6 | WAVEPM、VC 在 1.3 里不存在 |
这张表的读法是:波动率类 12 个方法在任何环境下都完整可用,而均线类与趋势类各有 3–5 个坑。如果你的需求集中在 ATR、BBANDS、KC 这类通道与波动率指标,遭遇的问题会最少;集中在自适应均线上则正好落在最脆弱的一类。
FinTA · 选型建议
常见需求该用哪个方法,替代是什么
| 你想要什么 | 建议方法 | 注意点 | 不理想时的替代 |
|---|---|---|---|
| 最普通的均线 | 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 方法清单落地的五步
raise NotImplementedError,或者直接调用一次看异常类型:桩方法抛 NotImplementedError,环境类问题抛别的异常。| 你的指标 | 在 FinTA 上的状态 | 建议处置 |
|---|---|---|
| SMA / EMA / WMA / SMMA | 可用,任何环境 | 直接用,注意显式传 period(默认值不是常见值) |
| RSI / STOCH / WILLIAMS / CCI / MFI | 可用,且与其他库数值可对齐 | 直接用(CCI 记得期数显式传 20 或 14) |
| MACD / PPO | 可用 | 直接用;注意它只返回两列、没有柱状线 |
最后提醒一句:这张检查单的目的不是让你背下 90 个方法,而是让「能不能用」变成一次可重复的实测。上游已经归档,本站在这里给出一套判定流程,比给出一个快照式的结论更有用——因为你的环境会变,而 FinTA 不会。
FAQ
关于 FinTA 方法清单的常见问题
FinTA 到底有多少个指标?
TA 类有 90 个公开方法;GitHub master 有 92 个。本站以代码为准,并以 master 的 pinned commit 作为核验基准。具体数字以官方源码为准,本站给出了清点方法。README 里的指标都可用吗?
SWI、TMF、VIDYA 三个方法被 README 列为受支持指标,但函数体只有 raise NotImplementedError。另外 README 还有 12 个方法完全没列到。建议以「方法是否存在 + 实测能否调用」为判据,而不是看清单。TS 类为什么用不了?
class TA。中文教程里的 from finta import TA, TS 属于错误信息,任何版本上都会 AttributeError。PSAR 和 SAR 有什么区别?
PSAR(iaf, maxaf) vs SAR(af, amax)),返回类型也不同(DataFrame vs Series)。PSAR 未出现在 README 清单里;1.3 上它返回的 psarbull / psarbear 两列顺序与 master 相反。怎么自己确认某个方法是不是空壳?
inspect.getsource() 取源码,判断是否含 raise NotImplementedError 且函数体很短。本站给出了完整的十行脚本。更省事的办法是直接调用一次——桩方法会立刻抛 NotImplementedError,而环境问题会抛别的异常类型,两者可区分。如果我要的指标正好是失效的那几个怎么办?
ta、pandas-ta、TA-Lib 在同样需求上的覆盖与代价见选型与迁移页。本站只做能力对照,不替你决定。相关阅读:安装与运行时实测、源码公式与预热。本页结论绑定 2026-10-12 的实测环境(Python 3.11.9),数值口径以官方源码为准。