关于 pandas-ta
为加密市场分析提供的 Python 技术指标库,可通过 `df.ta` 在 pandas DataFrame 上计算 130 多种指标。适合处理 OHLCV 数据、构建指标组合及为交易策略提供信号。
主要功能
- 01130 多种技术指标
- 02趋势、动量与波动率指标
- 03成交量与重叠指标
- 04批量运行指标策略
- 05支持 OHLCV DataFrame
适用场景
- 01从价格与成交量数据计算指标
- 02组合指标生成交易信号
- 03为回测提供指标输入
- 04分析加密市场不同时间周期
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill pandas-ta安装后在 Claude Code 中输入/pandas-ta确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/common_pitfalls.mdindicator_guide.mdstrategy_patterns.mdscripts/compute_indicators.pymulti_indicator_scan.py详细介绍
pandas-ta — 加密市场技术分析
pandas-ta 是一个 Python 库,可通过 df.ta 为 pandas DataFrame 扩展 130 多种技术分析指标。它涵盖趋势、动量、波动率、成交量和重叠指标类别,所有指标都可以通过一个方法在任何 OHLCV DataFrame 上调用。
安装
uv pip install pandas-ta pandas httpx
快速入门
import pandas as pd
import pandas_ta as ta
# Assume df is a DataFrame with columns: open, high, low, close, volume
# All lowercase column names required
# Single indicator
df["rsi"] = df.ta.rsi(length=14)
df["atr"] = df.ta.atr(length=14)
# Multiple indicators via strategy
df.ta.strategy(ta.Strategy(
name="Quick Check",
ta=[
{"kind": "rsi", "length": 14},
{"kind": "macd", "fast": 12, "slow": 26, "signal": 9},
{"kind": "bbands", "length": 20, "std": 2.0},
]
))
OHLCV DataFrame 格式
pandas-ta 要求 DataFrame 使用小写列名:
import pandas as pd
df = pd.DataFrame({
"open": [...],
"high": [...],
"low": [...],
"close": [...],
"volume": [...]
}, index=pd.DatetimeIndex([...]))
重要提示:将索引设为 DatetimeIndex,以用于 VWAP 等依赖时间的指标。列名必须为小写(close,而不是 Close)。
处理缺失数据
# Drop rows with NaN in OHLCV columns
df = df.dropna(subset=["open", "high", "low", "close", "volume"])
# Forward-fill small gaps (1-2 bars max)
df = df.ffill(limit=2)
# Verify no zero-volume bars for volume indicators
df = df[df["volume"] > 0]
核心指标类别
趋势指标
识别市场方向和趋势强度。
| 指标 | 调用方式 | 关键信号 |
|---|---|---|
| SMA | df.ta.sma(length=20) | 价格高于该值 = 看涨 |
| EMA | df.ta.ema(length=20) | 比 SMA 更快,滞后更小 |
| SuperTrend | df.ta.supertrend(length=10, multiplier=3) | 方向列:1=看涨,-1=看跌 |
| Ichimoku | df.ta.ichimoku() | 返回由 (span, lines) DataFrame 组成的元组 |
| VWMA | df.ta.vwma(length=20) | 成交量加权价格趋势 |
| HMA | df.ta.hma(length=20) | 滞后极小,趋势平滑 |
| ADX | df.ta.adx(length=14) | >25 = 趋势行情,<20 = 盘整行情 |
动量指标
衡量价格变化的速度和幅度。
| 指标 | 调用方式 | 关键信号 |
|---|---|---|
| RSI | df.ta.rsi(length=14) | >70 超买,<30 超卖 |
| MACD | df.ta.macd(fast=12, slow=26, signal=9) | 柱状图交叉 = 入场信号 |
| Stochastic | df.ta.stoch(k=14, d=3, smooth_k=3) | >80 超买,<20 超卖 |
| CCI | df.ta.cci(length=20) | >100 超买,<-100 超卖 |
| Williams %R | df.ta.willr(length=14) | >-20 超买,<-80 超卖 |
| ROC | df.ta.roc(length=10) | 正值 = 上行动量 |
| MFI | df.ta.mfi(length=14) | RSI 的资金流版本 |
波动率指标
衡量价格离散程度和预期区间。
| 指标 | 调用方式 | 关键信号 |
|---|---|---|
| Bollinger Bands | df.ta.bbands(length=20, std=2) | 收窄 = 即将突破 |
| ATR | df.ta.atr(length=14) | 仓位规模、止损设置 |
| Keltner Channels | df.ta.kc(length=20, scalar=1.5) | BB 位于 KC 内 = 收窄 |
| Donchian Channels | df.ta.donchian(lower_length=20, upper_length=20) | 突破检测 |
成交量指标
通过成交量分析确认价格走势。
| 指标 | 调用方式 | 关键信号 |
|---|---|---|
| OBV | df.ta.obv() | 与价格背离 = 反转 |
| VWAP | df.ta.vwap() | 日内公允价值(需要 DatetimeIndex) |
| CMF | df.ta.cmf(length=20) | >0 为吸筹,<0 为派发 |
| AD | df.ta.ad() | 吸筹/派发线 |
Strategy 类
使用 ta.Strategy 一次调用运行多个指标:
import pandas_ta as ta
# Built-in "All" strategy runs every indicator
df.ta.strategy(ta.AllStrategy)
# Custom strategy
my_strategy = ta.Strategy(
name="Crypto Scalp",
description="Fast indicators for crypto scalping",
ta=[
{"kind": "ema", "length": 9},
{"kind": "ema", "length": 21},
{"kind": "rsi", "length": 7},
{"kind": "stoch", "k": 5, "d": 3, "smooth_k": 3},
{"kind": "atr", "length": 7},
{"kind": "bbands", "length": 10, "std": 2.0},
{"kind": "obv"},
]
)
df.ta.strategy(my_strategy)
命名策略模式
# Trend following
trend_strategy = ta.Strategy(
name="Trend",
ta=[
{"kind": "ema", "length": 20},
{"kind": "ema", "length": 50},
{"kind": "adx", "length": 14},
{"kind": "supertrend", "length": 10, "multiplier": 3},
{"kind": "atr", "length": 14},
]
)
# Mean reversion
reversion_strategy = ta.Strategy(
name="Mean Reversion",
ta=[
{"kind": "rsi", "length": 14},
{"kind": "bbands", "length": 20, "std": 2.0},
{"kind": "stoch", "k": 14, "d": 3, "smooth_k": 3},
{"kind": "cci", "length": 20},
]
)
# Momentum
momentum_strategy = ta.Strategy(
name="Momentum",
ta=[
{"kind": "macd", "fast": 12, "slow": 26, "signal": 9},
{"kind": "rsi", "length": 14},
{"kind": "obv"},
{"kind": "roc", "length": 10},
{"kind": "mfi", "length": 14},
]
)
加密货币的特定注意事项
24/7 市场
- 没有交易时段缺口——依赖交易时段开盘/收盘的指标表现会有所不同
- VWAP 默认在 UTC 午夜重置;自定义周期时可考虑锚定 VWAP
- 周末数据连续——不会产生周一跳空效应
高波动率调整
- Bollinger Bands:使用 2.5-3 倍标准差,而不是默认的 2 倍
- RSI 周期:较短周期(7-10)能捕捉更快的加密货币周期
- ATR:用于动态止损;加密货币的 ATR 通常是股票 ATR 的 2-5 倍
- SuperTrend 乘数:加密货币使用 3-4 倍,股票使用 2-3 倍
低市值代币注意事项
- 订单簿较薄时,成交量指标(OBV、CMF、MFI)并不可靠
- 对于流动性较低的代币,优先使用基于价格的指标(RSI、BBands、SuperTrend)
- 基于 ATR 的仓位规模控制至关重要——较大的价差会放大亏损
- 虚假交易会推高成交量;请与链上数据交叉核对
时间周期选择
| 时间周期 | 适用场景 | 推荐指标 |
|---|---|---|
| 1m-5m | 剥头皮交易、PumpFun | RSI(5-7)、EMA(5,13)、ATR(5) |
| 15m-1h | 日内交易 | MACD、RSI(14)、BBands、EMA(20,50) |
| 4h-1d | 波段交易 | SuperTrend、ADX、EMA(50,200) |
| 1w | 仓位交易 | SMA(20,50)、RSI(14)、月度 VWAP |
常见指标组合
趋势跟踪
# EMA crossover + ADX confirmation + SuperTrend direction
ema_fast = df.ta.ema(length=20)
ema_slow = df.ta.ema(length=50)
adx_df = df.ta.adx(length=14)
st_df = df.ta.supertrend(length=10, multiplier=3)
bullish = (
(ema_fast > ema_slow) &
(adx_df["ADX_14"] > 25) &
(st_df["SUPERTd_10_3.0"] == 1)
)
均值回归
# RSI oversold + price at lower BB + Stochastic oversold
rsi = df.ta.rsi(length=14)
bb = df.ta.bbands(length=20, std=2.5)
stoch = df.ta.stoch(k=14, d=3, smooth_k=3)
buy_signal = (
(rsi < 30) &
(df["close"] <= bb["BBL_20_2.5"]) &
(stoch["STOCHk_14_3_3"] < 20)
)
动量确认
# MACD histogram positive + RSI above 50 + OBV rising
macd = df.ta.macd(fast=12, slow=26, signal=9)
rsi = df.ta.rsi(length=14)
obv = df.ta.obv()
momentum_bull = (
(macd["MACDh_12_26_9"] > 0) &
(rsi > 50) &
(obv > obv.shift(1))
)
波动率突破(BB 挤压)
# Bollinger Band width contracting + volume spike
bb = df.ta.bbands(length=20, std=2.0)
atr = df.ta.atr(length=14)
vol_sma = df["volume"].rolling(20).mean()
bb_width = (bb["BBU_20_2.0"] - bb["BBL_20_2.0"]) / bb["BBM_20_2.0"]
squeeze = bb_width < bb_width.rolling(120).quantile(0.1)
vol_spike = df["volume"] > (vol_sma * 2.0)
breakout_setup = squeeze & vol_spike
与其他技能集成
- birdeye-api:获取 OHLCV 数据 → 输入 pandas-ta 计算指标
- vectorbt:将 pandas-ta 指标用作回测的信号输入
- trading-visualization:在价格图表上绘制指标叠加层
- slippage-modeling:将 ATR 与滑点估算结合,用于构建逼真的执行模型
- position-sizing:使用 pandas-ta 输出的基于 ATR 的仓位规模
文件
参考资料
references/indicator_guide.md— 加密货币领域排名前 20 的指标,包含语法、参数和解读references/strategy_patterns.md— 适用于剥头皮交易、日内交易和波段交易的预构建策略组合references/common_pitfalls.md— 在加密货币市场使用技术指标时的常见错误
脚本
scripts/compute_indicators.py— 获取 OHLCV 数据并计算标准指标集,同时汇总信号scripts/multi_indicator_scan.py— 运行多个策略配置文件,并评估当前信号的一致性
评论
支持 Markdown