关于 ta-lib
ta-lib 是使用 TA-Lib 的技能;TA-Lib 是带 Python 封装的 C 技术分析库。它面向金融数据分析和交易系统开发,可处理 NumPy 数组并计算指标、识别蜡烛图形态。
主要功能
- 01150 多种技术指标函数
- 0261 种蜡烛图形态识别
- 03面向 NumPy 数组的 C 计算
- 04函数式与抽象式 API
- 05带回退逻辑的指标脚本
适用场景
- 01为大型回测计算指标
- 02扫描 OHLCV 数据中的蜡烛图形态
- 03按名称动态选择指标
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill ta-lib安装后在 Claude Code 中输入/ta-lib确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/candlestick_patterns.mdfunction_reference.mdscripts/compute_indicators.pypattern_scanner.py详细介绍
ta-lib — 经 C 优化的技术分析
TA-Lib(Technical Analysis Library)是一个 C 语言库,配有 Python 封装,提供 150 多种技术分析函数和 61 种蜡烛图形态识别函数。它是性能关键型指标计算的行业标准,应用于生产交易系统;在这些场景中,pandas-ta 或纯 Python 替代方案的速度太慢。
TA-Lib 是什么
TA-Lib 最初以 C 语言编写,用于分析金融市场数据。其 Python 封装(PyPI 上的 TA-Lib,导入时使用 talib)提供:
- 150 多种指标函数,涵盖重叠、动量、成交量、波动率、周期和数学类别
- 61 种蜡烛图形态识别函数——目前最全面的形态库
- C 语言级别的计算速度——在大型数据集上,比纯 Python 同类实现快 10–100 倍
- 两种 API:函数 API(直接传入数组)和抽象 API(传入数组字典)
- 原生支持 NumPy——所有输入和输出都是 NumPy 数组
安装
TA-Lib 需要先安装底层 C 库:
# macOS
brew install ta-lib
uv pip install TA-Lib numpy pandas
# Ubuntu/Debian
sudo apt-get install -y ta-lib
uv pip install TA-Lib numpy pandas
# From source (any platform)
wget https://github.com/ta-lib/ta-lib/releases/download/v0.6.4/ta-lib-0.6.4-src.tar.gz
tar -xzf ta-lib-0.6.4-src.tar.gz
cd ta-lib-0.6.4
./configure --prefix=/usr/local
make && sudo make install
uv pip install TA-Lib numpy pandas
如果未安装 C 库,import talib 会因 ImportError 而失败。本技能中的脚本包含回退逻辑,可在未安装 TA-Lib 的环境中使用。
何时使用 TA-Lib,何时使用 pandas-ta
| 标准 | TA-Lib | pandas-ta |
|---|---|---|
| 速度 | 经 C 优化,快 10–100 倍 | 纯 Python,在大型数据上较慢 |
| 蜡烛图形态 | 内置 61 种形态 | 形态支持有限 |
| 安装 | 需要 C 库 | 仅需 pip install |
| API 风格 | NumPy 数组 | DataFrame .ta 访问器 |
| 指标数量 | 150 多种 | 130 多种 |
| 流式处理 | 可更新单个值 | 需要重新计算整个序列 |
| 依赖项 | C 库 + numpy | 仅需 pandas |
在以下情况使用 TA-Lib:
- 处理数百万根 K 线,或大规模运行回测
- 需要蜡烛图形态识别(TA-Lib 在这方面无可匹敌)
- 构建对延迟有要求的生产流水线
- 需要周期指标(希尔伯特变换系列)
在以下情况使用 pandas-ta:
- 希望方便地原生使用 DataFrame
- 安装简便性很重要(无需依赖 C 库)
- 需要 TA-Lib 中没有的指标(pandas-ta 还提供了一些额外指标)
快速入门
import numpy as np
import talib
# Create sample data
close = np.random.randn(100).cumsum() + 50
high = close + np.abs(np.random.randn(100))
low = close - np.abs(np.random.randn(100))
open_ = close + np.random.randn(100) * 0.5
volume = np.random.randint(1000, 10000, 100).astype(float)
# Function API — pass arrays directly
rsi = talib.RSI(close, timeperiod=14)
macd, signal, hist = talib.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)
upper, middle, lower = talib.BBANDS(close, timeperiod=20, nbdevup=2, nbdevdn=2)
atr = talib.ATR(high, low, close, timeperiod=14)
# Candlestick patterns — return +100 (bullish), -100 (bearish), or 0
doji = talib.CDLDOJI(open_, high, low, close)
hammer = talib.CDLHAMMER(open_, high, low, close)
engulfing = talib.CDLENGULFING(open_, high, low, close)
函数 API 与抽象 API
函数 API(推荐)
直接使用 NumPy 数组调用函数:
import talib
rsi = talib.RSI(close, timeperiod=14)
sma = talib.SMA(close, timeperiod=20)
upper, mid, lower = talib.BBANDS(close)
抽象 API
传入数组字典,并按名称获取结果:
from talib import abstract
inputs = {"open": open_, "high": high, "low": low, "close": close, "volume": volume}
# Call by function name
rsi = abstract.RSI(inputs, timeperiod=14)
macd = abstract.MACD(inputs) # returns (macd, signal, hist)
抽象 API 适用于动态选择指标(例如,遍历指标名称列表)。
函数组
TA-Lib 将函数划分为以下类别:
重叠研究
叠加在价格图表上的移动平均线和包络指标。
sma = talib.SMA(close, timeperiod=20)
ema = talib.EMA(close, timeperiod=12)
upper, mid, lower = talib.BBANDS(close, timeperiod=20, nbdevup=2, nbdevdn=2)
sar = talib.SAR(high, low, acceleration=0.02, maximum=0.2)
mama, fama = talib.MAMA(close, fastlimit=0.5, slowlimit=0.05)
动量指标
振荡指标和趋势强度指标。
rsi = talib.RSI(close, timeperiod=14)
macd, signal, hist = talib.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)
slowk, slowd = talib.STOCH(high, low, close)
cci = talib.CCI(high, low, close, timeperiod=14)
willr = talib.WILLR(high, low, close, timeperiod=14)
adx = talib.ADX(high, low, close, timeperiod=14)
mfi = talib.MFI(high, low, close, volume, timeperiod=14)
成交量指标
基于成交量的分析函数。
obv = talib.OBV(close, volume)
ad = talib.AD(high, low, close, volume)
adosc = talib.ADOSC(high, low, close, volume, fastperiod=3, slowperiod=10)
波动率指标
衡量价格变动幅度的指标。
atr = talib.ATR(high, low, close, timeperiod=14)
natr = talib.NATR(high, low, close, timeperiod=14)
trange = talib.TRANGE(high, low, close)
形态识别(蜡烛图)
用于检测蜡烛图形态的 61 个函数。所有函数都返回整数数组:
+100= 检测到看涨形态-100= 检测到看跌形态0= 未检测到形态
# Single patterns
doji = talib.CDLDOJI(open_, high, low, close)
hammer = talib.CDLHAMMER(open_, high, low, close)
engulfing = talib.CDLENGULFING(open_, high, low, close)
# Scan all 61 patterns at once
candle_names = talib.get_function_groups()["Pattern Recognition"]
for name in candle_names:
func = getattr(talib, name)
result = func(open_, high, low, close)
hits = np.nonzero(result)[0]
if len(hits) > 0:
print(f"{name}: {len(hits)} detections")
完整的 61 种形态列表及其可靠性评级和对加密货币的适用性,请参阅 references/candlestick_patterns.md。
数学变换与数学运算符
对数组进行数学函数运算(sin、cos、ln 等)和运算符运算(add、sub、mult、div)。直接使用的情况较少,但这些函数和运算符均可用。
加密货币注意事项
24/7 市场
- 为传统市场设计、依赖开盘价与收盘价跳空的蜡烛图形态,在加密货币的连续交易市场中可能表现不同
- 基于跳空的形态(早晨之星、黄昏之星)在没有交易时段跳空的情况下可靠性较低
- 实体比例形态(十字星、锤头线、吞没形态)在任何时间周期中仍然适用
时间范围选择
- 1m-5m:形态信号噪声较多;请结合成交量确认
- 15m-1h:适合高市值代币的日内信号
- 4h-1d:形态识别最可靠
- 提示:较高的时间范围产生的形态信号更少,但更可靠
NaN 处理
TA-Lib 会在每个指标的初始回溯周期返回 NaN。请始终对此进行处理:
rsi = talib.RSI(close, timeperiod=14)
# First 14 values will be NaN
valid_rsi = rsi[~np.isnan(rsi)]
Solana 代币数据
将 TA-Lib 用于 Solana 代币 OHLCV 数据时:
- 确保数组的数据类型为
float64——TA-Lib 要求使用此类型 - 传入 TA-Lib 前,按时间戳升序排序
- 计算指标前,处理低流动性代币数据中的间隔
# Convert to float64 for TA-Lib compatibility
close = df["close"].values.astype(np.float64)
high = df["high"].values.astype(np.float64)
low = df["low"].values.astype(np.float64)
与其他技能集成
与 pandas-ta 集成
安装后,pandas-ta 可将 TA-Lib 用作后端,通过 pandas-ta API 实现 C 语言级别的运行速度:
import pandas_ta as ta
# pandas-ta auto-detects TA-Lib and uses it for supported indicators
# Set explicitly:
ta.Imports["talib"] = True # Force TA-Lib backend
df.ta.rsi(length=14) # Uses TA-Lib under the hood if available
与 vectorbt 集成
vectorbt 集成了 TA-Lib,可实现快速回测:
import vectorbt as vbt
# Use TA-Lib indicators in vectorbt
rsi = vbt.talib("RSI").run(close, timeperiod=14)
entries = rsi.real_crossed_below(30)
exits = rsi.real_crossed_above(70)
与 Birdeye/DexScreener 数据集成
从 API 技能获取 OHLCV 数据,然后使用 TA-Lib 处理:
# After fetching OHLCV from birdeye-api or dexscreener-api
close = np.array(ohlcv_data["close"], dtype=np.float64)
rsi = talib.RSI(close, timeperiod=14)
列出可用函数
import talib
# All function groups
groups = talib.get_function_groups()
for group, funcs in groups.items():
print(f"{group}: {len(funcs)} functions")
# All function names
all_funcs = talib.get_functions()
print(f"Total: {len(all_funcs)} functions")
# Info about a specific function
info = talib.abstract.Function("RSI").info
print(info["display_name"], info["group"])
文件
| 文件 | 描述 |
|---|---|
references/function_reference.md | 按类别列出最实用的函数,并提供语法和参数 |
references/candlestick_patterns.md | 按类型分组的全部 61 种蜡烛图形态及其可靠性评级 |
scripts/compute_indicators.py | 使用 TA-Lib/回退方案对比计算常见指标 |
scripts/pattern_scanner.py | 扫描 OHLCV 数据中的全部 61 种蜡烛图形态 |