ta-lib-python 函数分组查询:3 行代码定位 200+ 个技术指标
ta-lib-python 函数分组查询:3 行代码定位 200+ 个技术指标
【免费下载链接】ta-lib-pythonPython wrapper for TA-Lib (http://ta-lib.org/).项目地址: https://gitcode.com/gh_mirrors/ta/ta-lib-python
ta-lib-python 封装了 200 多个技术指标函数,逐个翻源码找分类太低效。调用talib.get_function_groups()一次就能拿到全部函数的分类清单,策略筛选、批量计算、生成速查表都靠它。读完这篇文章,你会掌握它的返回值结构、三个高频用法,以及 10 个指标分组和常见报错的对应关系。
先跑通:3 行代码拿到完整分组
下面是最小可运行示例,装好TA-Lib和 talib-python 后直接复制执行:
import talib groups = talib.get_function_groups() print(len(groups), '个分组') print('Momentum Indicators 共', len(groups['Momentum Indicators']), '个函数') print(groups['Momentum Indicators'][:5])预期输出(前 5 个函数名与 talib/init.py 中__function_groups__的定义一致):
10 个分组 Momentum Indicators 共 48 个函数 ['AC', 'ADX', 'ADXR', 'AO', 'APO']返回值是什么:一张 10 行的字典
get_function_groups不带任何参数,返回一个普通 dict(是内部数据的拷贝,改了它不影响 talib 本身),键和值各占一列:
| 部分 | 类型 | 内容 |
|---|---|---|
| 键(共 10 个) | 字符串 | 分组名,如'Momentum Indicators'、'Overlap Studies' |
| 值 | 字符串列表 | 该分组下的函数名,如['AC', 'ADX', 'ADXR', ...] |
10 个分组的键名是固定写法(含空格和大小写),后续取值时别手滑打成'momentum'这种小写形式。每个键对应的值就是该组全部函数名列表,10 组合计 200 多个函数。想要不分组的扁平清单,另有talib.get_functions()可用,两者在 talib/init.py 里相邻定义。
批量计算一组指标
写回测时经常要把某个分组整组算一遍再对比,手动列函数名很容易漏。下面按组遍历、自动跳过数据不足的函数:
import numpy as np import talib high = np.random.uniform(9, 11, 100) low = high - 0.3 close = (high + low) / 2 for name in talib.get_function_groups()['Volatility Indicators']: try: getattr(talib, name)(high, low, close) print('OK ', name) except talib.InsufficientHistory: print('SKIP', name, ' 数据长度不足')运行后每个波动率函数都会得到一行结果:能算的打印OK,历史数据不够的抛InsufficientHistory被记为SKIP,循环不会中断。
策略开发前,先筛一遍函数
动量类策略开工前,先确认候选函数都在分组里、且当前环境确实能调用,比写完整代码再报错省时间:
import talib momentum = talib.get_function_groups()['Momentum Indicators'] wanted = ['ADX', 'RSI', 'MACD', 'ROC', 'STOCH'] for name in wanted: if name in momentum and hasattr(talib, name): print('可用:', name) else: print('不可用:', name)5 个候选名全部打印可用;若某个函数被环境裁剪掉,会打印不可用,策略代码就能提前改选替代指标。
自定义分组 + 导出速查表
官方 10 组是按算法类型划分的,但你的策略有自己的口味。可以手动组合成自定义组,再用官方分组文档核对中文名,导出成速查表:
import talib from pathlib import Path # 按策略口味自定义一组 my_group = { 'mean_reversion': ( ['RSI', 'CCI'] + ['SMA', 'EMA', 'BBANDS'] + ['STDDEV'] ) } # 校验函数名,并对照官方分组文档导出速查表 missing = [n for ns in my_group.values() for n in ns if n not in talib.get_functions()] print('缺函数:', missing) for g in talib.get_function_groups(): print(g) for p in sorted(Path('docs/func_groups').glob('*.md')): print(p.name)missing为空说明组合里没有笔误;docs/func_groups会列出 10 个.md文件名,与分组一一对应。把这段放进你的策略仓库,新成员第一天就能查到指标归属。
10 大分组总表
| 分组名 | 代表函数 | 一句话用途 |
|---|---|---|
| Overlap Studies | SMA、EMA、BBANDS、SAR、MAMA | 各类均线与布林带,刻画趋势方向 |
| Momentum Indicators | RSI、MACD、ADX、STOCH、ROC | 衡量趋势动能与超买超卖 |
| Volume Indicators | OBV、CMF、AD、VWAP | 用成交量验证价格走势 |
| Volatility Indicators | ATR、NATR、TRANGE、ADR | 度量价格波动幅度 |
| Price Transform | AVGPRICE、MEDPRICE、HA、TYPPRICE | 把 OHLC 合成单一价格序列 |
| Cycle Indicators | HT_PHASOR、HT_DCPERIOD、HT_SINE | 希尔伯特变换,提取价格周期 |
| Pattern Recognition | CDLENGULFING、CDLHAMMER、CDLDOJI | 61 个 K 线形态识别 |
| Statistic Functions | LINEARREG、STDDEV、CORREL、TSF | 回归、相关与统计量 |
| Math Transform | SIN、COS、EXP、LN、SQRT | 对序列做三角/指数/对数变换 |
| Math Operators | ADD、MULT、MAX、SUM、MINMAX | 序列间的加减乘除与极值运算 |
不确定一个函数该传几个参数时,直接查 talib/_ta_lib.pyi,每个函数的参数名、类型和默认值都写在那里(如RSI的timeperiod默认 14,MACD默认 12/26/9)。
高频报错速查
| 现象 | 原因 | 解法 |
|---|---|---|
talib.rsi(close)抛AttributeError | 函数名是大写常量,不是小写方法 | 用talib.RSI(close);分组值本身就是大写名字,直接取用 |
批量计算整列 NaN 或SKIP | 数组长度不足指标所需周期,InsufficientHistory触发 | 补数据,或用try/except隔离该函数继续跑其余指标 |
MACD结果只塞进了一列 | MACD返回 3 个数组组成的元组(macd、signal、hist),不是单个序列 | 先macd, signal, hist = talib.MACD(close)再分别赋值 |
键名写成'momentum'取不到值 | 分组键是带空格的英文全称 | 取值前打印list(groups)核对准确键名 |
收尾
get_function_groups()就是这 200 多个函数的目录页:10 个分组键,值里全是可直接调用的函数名。现在跑一下talib.get_function_groups()看看你的环境实际输出了什么,再对照 docs/index.md 的 Function Groups 章节和 docs/func_groups/ 下的 10 个分组文档逐个核对;想确认参数签名,打开 talib/_ta_lib.pyi 按函数名搜索即可。
【免费下载链接】ta-lib-pythonPython wrapper for TA-Lib (http://ta-lib.org/).项目地址: https://gitcode.com/gh_mirrors/ta/ta-lib-python
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考