pandas-ta · 指标目录
pandas-ta 有多少指标:先把口径说清,再看分类与默认参数
「pandas-ta 有 130+ / 224 个指标」这类说法今天已经不可靠:在本站实测的同一个 0.8.32 版本里,至少能数出 60、62、193、224、255、284 六个数字。问题不在数字,而在口径——本节把每个口径的来历、分类目录与默认参数一次列全。
pandas-ta 到底有多少指标?同一个版本里能数出四个数
这个问题没有单一的答案——不同来源在数不同的东西。下表是本站对同一个版本(classic 0.8.32)逐项实测的结果,每一行都写清了「怎么数出来的」,方便你自己复核。
| 口径 | 数字 | 怎么数出来的(可复核) | 什么时候用这个数 |
|---|---|---|---|
| README / 官方文档 | 224 个指标 + 62 个形态 = 284 | 官方 README 与 quickstart 的表述 | 引用官方说法时用它,并注明出处 |
| 运行时启动横幅 | 255 | import 时打印 Total Indicators & Utilities: 255 | 想说明「跑起来时看到的是多少」 |
| 横幅内部明细 | 193 + 62 = 255 | 横幅里 Abbreviations: 列出 193 个名字、Candle Patterns: 列出 62 个 | 想解释 255 是怎么来的 |
包内 Category 字典 | 193 | 9 个分类合计(见下表) | 想在脚本里动态枚举可用指标 |
| 装载器索引 | 196 | _INDICATOR_TO_CATEGORY = 193 + 3 个 math 别名 | 理解 ta.max 这类别名的来源 |
公开导出 __all__ | 60 | 模块的 __all__ 长度 | 写 from pandas_ta_classic import * 时会拿到多少 |
dir() 可见名 | 289 | len(dir(ta)) | 交互式探索时可打印的名字数 |
| K 线形态 | 62 | len(ta.ALL_PATTERNS);cdl_pattern(name="all") 实测生成 62 列 | 形态识别相关 |
指标按什么分类?每类大概多少?
下表左侧是仓库里的真实目录(按固定 commit ba647e0d 数文件),右侧是运行时对外导出的数量。两者的差别本身就是一条知识点。
| 分类 | 仓库内 .py 文件数 | 对外导出数(Category) | 这个分类里有什么(举例) |
|---|---|---|---|
candles | 66 | 5 | cdl_doji、cdl_inside、cdl_pattern、cdl_z、ha |
momentum | 53 | 53 | rsi、cci、cmo、tsi、stoch |
overlap | 46 | 46 | sma、ema、hma、kama、vwma |
math | 31 | 3(别名) | 三角函数、加法除法等运算,另映射出 rolling_max/min/sum |
trend | 26 | 26 | adx、aroon、psar、supertrend |
volume | 20 | 20 | obv、mfi、cmf、vwap |
volatility | 18 | 18 | atr、bbands、kc、donchian |
statistics | 14 | 14 | beta、correl、zscore、entropy |
cycles | 9 | 8 | 希尔伯特变换类周期指标 |
performance | 3 | 3 | drawdown、log_return、percent_return |
| 注意点 | 目录里的文件数 ≠ 对外可用指标数 | candles 差得最多(66 → 5) | 形态要统一走 cdl_pattern(name=...) |
_meta.py 里定义了 _CANDLE_TOP_LEVEL,只把 cdl_doji、cdl_inside、cdl_pattern、cdl_z、ha 作为顶层指标;其余形态模块必须通过 cdl_pattern(name=...) 调用。这也解释了为什么 df.ta.cdl_2crows 会报 AttributeError。不传参数的时候,各个指标用的是什么值?
这是最容易出错的一类细节:不同指标的默认窗口并不统一,而且默认值会直接写进列名。下表是本站运行期实测(append=True 后看新增列名)得到的真实默认值。
| 指标 | 默认参数(实测列名反推) | 你需要注意的点 |
|---|---|---|
sma / ema | length=10(列名 SMA_10 / EMA_10) | 很多人以为是 20;不传参数就得到 10 日均线 |
rsi | length=14(RSI_14) | 与常见教科书一致 |
bbands | length=5, std=2.0(BBL_5_2.0) | 默认不是 20!这是最容易算错的一个默认值 |
macd | 12 / 26 / 9 | 三列同出 |
atr | length=14(列名 ATRr_14) | 列名带 r,表示 RMA 平滑 |
stoch | 14 / 3 / 3 | %K 与 %D 两列 |
adx | length=14 | 同时给 ADX / DMP / DMN |
kc | length=20, scalar=2(KCUe_20_2) | 列名里的 e 表示用 EMA 做中轨 |
donchian | 20 / 20 | 上下轨窗口可分别设置 |
supertrend | 7 / 3.0(SUPERT_7_3.0) | 不同平台的默认值常见为 10/3,别假定一致 |
tsi | 13 / 25 / 13 | 与常见 25/13 的参数体系不同 |
vwap | anchor="D"(VWAP_D) | 按日锚定;跨日数据要确认锚点 |
dpo | length=20,且 centered=True | centered 会导致含未来数据,见「未来函数」页 |
ichimoku | 9 / 26 / 26,且默认带 Chikou | Chikou 列含未来数据 |
cdl_pattern | name="all" | 不传名字会一次算完 62 个形态,列数很多 |
tsignals | 不新增指标列 | 它是信号生成器,append=True 也不会加列 |
62 个 K 线形态怎么用?
形态识别是这个库的另一个卖点。下表给出可运行写法与实测的列名规则。
# 一次算完 62 个形态(实测生成 62 列)
patterns = df.ta.cdl_pattern(name="all")
print(patterns.shape) # (60, 62)
print(patterns.columns[:5])
# Index(['CDL_2CROWS','CDL_3BLACKCROWS','CDL_3INSIDE','CDL_3LINESTRIKE','CDL_3OUTSIDE'])
# 只要一个形态
engulfing = df.ta.cdl_pattern(name="engulfing")
print(engulfing.columns) # Index(['CDL_ENGULFING'])
# 形态名清单
import pandas_ta_classic as ta
print(len(ta.ALL_PATTERNS)) # 62
| 项 | 实测结果 | 注意点 |
|---|---|---|
| 一次算全部 | name="all" → 60×62 的 DataFrame | 按行生成 62 列,列数较多 |
| 单形态 | name="engulfing" → 单列 CDL_ENGULFING | 形态名用小写,列名自动大写 |
| 列名规则 | 统一 CDL_<NAME> | 个别列名带参数后缀,例如 CDL_DOJI_10_0.1 |
| 形态名清单 | ta.ALL_PATTERNS 长度 62 | 用它做循环或做下拉列表 |
| 是否依赖 TA-Lib | 不依赖:官方说明 62 个形态全部为原生 Python 实现 | 实测未装 TA-Lib 时形态照常返回 |
| 缺口数据上的行为 | 官方说明:形态会跳过 NaN 行并记为 0 | 与其它指标在缺口上的表现不同 |
它能完全替代 TA-Lib 吗?官方怎么说?
这是一个容易被过度承诺的问题。官方 README 里其实已经写明了边界,本站把它摘出来并附上自己的实测读数。
| 问题 | 官方表述 | 本站实测 | 结论 |
|---|---|---|---|
| 核心指标的数值是否与 TA-Lib 一致 | README 写「correlation tested with TA-Lib」 | 9 项对照中 8 项最大绝对差为 0,MACD 差 0.18 | 常用核心指标一致性很高,但存在个别差异项 |
| 是否覆盖 TA-Lib 的全部函数 | README 明确说「不是每个 TA-Lib / tulipy 函数都有对应实现」,并要求查兼容矩阵文档 | 本站未逐条比对兼容矩阵 | 不要假定可以整体替换,迁移前先查兼容矩阵 |
| K 线形态是否走 TA-Lib | README 写「62 个形态全部原生实现,从不使用 TA-Lib」 | 实测未装 TA-Lib 时形态照常返回 | 形态部分不依赖 TA-Lib |
| tulipy 是什么角色 | README 写「仅作为冻结基线(frozen oracle),不是计算后端」 | 本机未安装 tulipy,不影响使用 | 可以把 tulipy 理解为测试用的历史对照,而不是依赖 |
| 注意点 | 官方表述以仓库 README 为准 | 本站读数采于 2026-10-10 | 版本升级后应重新对照 |
pandas-ta 指标数量:有几个口径、默认参数是多少?
下面的回答都指向可核验的官方文件或本站实测;与官方表述冲突时,以官方仓库与文档为准。
pandas-ta 到底有多少个指标?
没有单一的答案。本站实测同一个 0.8.32 版本:README 写 224(另有 62 个形态),运行时横幅打印 255,包内 Category 字典合计 193,公开导出 __all__ 是 60。引用时请带上口径与版本。
为什么 README 的 224 和运行时的 193 差 31 个?
本站只确认了「两个数字不同、差 31」这个可复核的事实,不推断这 31 个具体指什么。这也是本站在任何页面都不写「pandas-ta 有 N 个指标」的原因。
sma 不传 length 是多少?
实测默认 length=10(列名 SMA_10),ema 同样是 10。习惯写 20 日均线的人如果忘了传参,会静默得到 10 日均线。
布林带的默认参数是什么?
实测默认 length=5, std=2.0,返回 5 列 BBL/BBM/BBU/BBB/BBP_5_2.0。默认不是 20,这是最容易算错的地方。
怎么在脚本里列出所有可用指标?
用包内字典:from pandas_ta_classic._meta import Category,然后打印 {k: len(v) for k, v in Category.items()}。注意它属于内部模块,版本升级后可能变化,生产代码建议只依赖公开文档里的指标名。
ta.max() 能用吗?
不能。实测 ta.max 报 AttributeError。包内的别名表把 max 映射到 rolling_max,但那是给内部装载器用的,不是公开别名。