pandas-ta · 指标目录

pandas-ta 有多少指标:先把口径说清,再看分类与默认参数

「pandas-ta 有 130+ / 224 个指标」这类说法今天已经不可靠:在本站实测的同一个 0.8.32 版本里,至少能数出 60、62、193、224、255、284 六个数字。问题不在数字,而在口径——本节把每个口径的来历、分类目录与默认参数一次列全。

核验日期 2026-10-10classic 0.8.32 实测仓库 commit ba647e0d
README:224 + 62
运行时横幅:255
Category 字典:193
__all__:60
依据同一版本(pandas-ta-classic 0.8.32)本机实测绘制的数量口径分层示意;非官方统计图。
pandas-ta · 数量口径

pandas-ta 到底有多少指标?同一个版本里能数出四个数

这个问题没有单一的答案——不同来源在数不同的东西。下表是本站对同一个版本(classic 0.8.32)逐项实测的结果,每一行都写清了「怎么数出来的」,方便你自己复核。

口径数字怎么数出来的(可复核)什么时候用这个数
README / 官方文档224 个指标 + 62 个形态 = 284官方 README 与 quickstart 的表述引用官方说法时用它,并注明出处
运行时启动横幅255import 时打印 Total Indicators & Utilities: 255想说明「跑起来时看到的是多少」
横幅内部明细193 + 62 = 255横幅里 Abbreviations: 列出 193 个名字、Candle Patterns: 列出 62 个想解释 255 是怎么来的
包内 Category 字典1939 个分类合计(见下表)想在脚本里动态枚举可用指标
装载器索引196_INDICATOR_TO_CATEGORY = 193 + 3 个 math 别名理解 ta.max 这类别名的来源
公开导出 __all__60模块的 __all__ 长度写 from pandas_ta_classic import * 时会拿到多少
dir() 可见名289len(dir(ta))交互式探索时可打印的名字数
K 线形态62len(ta.ALL_PATTERNS);cdl_pattern(name="all") 实测生成 62 列形态识别相关
本站在同版本内直接量出的一个差异:README 说 224 个指标,但运行时实际列出的缩写只有 193 个,两者相差 31 个。本站不推断这 31 个具体指什么,只把这个可复核的差异如实写出来——所以本站在任何地方都不会写「pandas-ta 有 N 个指标」。
pandas-ta · 分类目录

指标按什么分类?每类大概多少?

下表左侧是仓库里的真实目录(按固定 commit ba647e0d 数文件),右侧是运行时对外导出的数量。两者的差别本身就是一条知识点。

分类仓库内 .py 文件数对外导出数(Category)这个分类里有什么(举例)
candles665cdl_doji、cdl_inside、cdl_pattern、cdl_z、ha
momentum5353rsi、cci、cmo、tsi、stoch
overlap4646sma、ema、hma、kama、vwma
math313(别名)三角函数、加法除法等运算,另映射出 rolling_max/min/sum
trend2626adx、aroon、psar、supertrend
volume2020obv、mfi、cmf、vwap
volatility1818atr、bbands、kc、donchian
statistics1414beta、correl、zscore、entropy
cycles98希尔伯特变换类周期指标
performance33drawdown、log_return、percent_return
注意点目录里的文件数 ≠ 对外可用指标数candles 差得最多(66 → 5)形态要统一走 cdl_pattern(name=...)
candles 为什么只导出 5 个:包内 _meta.py 里定义了 _CANDLE_TOP_LEVEL,只把 cdl_doji、cdl_inside、cdl_pattern、cdl_z、ha 作为顶层指标;其余形态模块必须通过 cdl_pattern(name=...) 调用。这也解释了为什么 df.ta.cdl_2crows 会报 AttributeError。
pandas-ta · 默认参数

不传参数的时候,各个指标用的是什么值?

这是最容易出错的一类细节:不同指标的默认窗口并不统一,而且默认值会直接写进列名。下表是本站运行期实测(append=True 后看新增列名)得到的真实默认值。

指标默认参数(实测列名反推)你需要注意的点
sma / emalength=10(列名 SMA_10 / EMA_10)很多人以为是 20;不传参数就得到 10 日均线
rsilength=14(RSI_14)与常见教科书一致
bbandslength=5, std=2.0(BBL_5_2.0)默认不是 20!这是最容易算错的一个默认值
macd12 / 26 / 9三列同出
atrlength=14(列名 ATRr_14)列名带 r,表示 RMA 平滑
stoch14 / 3 / 3%K 与 %D 两列
adxlength=14同时给 ADX / DMP / DMN
kclength=20, scalar=2(KCUe_20_2)列名里的 e 表示用 EMA 做中轨
donchian20 / 20上下轨窗口可分别设置
supertrend7 / 3.0(SUPERT_7_3.0)不同平台的默认值常见为 10/3,别假定一致
tsi13 / 25 / 13与常见 25/13 的参数体系不同
vwapanchor="D"(VWAP_D)按日锚定;跨日数据要确认锚点
dpolength=20,且 centered=Truecentered 会导致含未来数据,见「未来函数」页
ichimoku9 / 26 / 26,且默认带 ChikouChikou 列含未来数据
cdl_patternname="all"不传名字会一次算完 62 个形态,列数很多
tsignals不新增指标列它是信号生成器,append=True 也不会加列
pandas-ta · K 线形态

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与其它指标在缺口上的表现不同
各形态的具体判定逻辑属于技术分析领域知识,本站不逐一解释其含义,也不给出「出现某形态就该怎样」的结论。需要形态定义时请查阅官方文档与你认可的技术分析资料。
pandas-ta · 兼容边界

它能完全替代 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-LibREADME 写「62 个形态全部原生实现,从不使用 TA-Lib」实测未装 TA-Lib 时形态照常返回形态部分不依赖 TA-Lib
tulipy 是什么角色README 写「仅作为冻结基线(frozen oracle),不是计算后端」本机未安装 tulipy,不影响使用可以把 tulipy 理解为测试用的历史对照,而不是依赖
注意点官方表述以仓库 README 为准本站读数采于 2026-10-10版本升级后应重新对照
FAQ

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,但那是给内部装载器用的,不是公开别名。

下一步:接回测之前要做哪些审计?

指标算出来了,但带未来数据的那几列会让回测好看得离谱。下一节给出可执行的判定方法。