mcpField
P
pandas-ta

pandas-ta

github.com/agiprolabs数据与数据库456596 次安装8 周前更新
代码仓库

关于 pandas-ta

为加密市场分析提供的 Python 技术指标库,可通过 `df.ta` 在 pandas DataFrame 上计算 130 多种指标。适合处理 OHLCV 数据、构建指标组合及为交易策略提供信号。

主要功能

  1. 01130 多种技术指标
  2. 02趋势、动量与波动率指标
  3. 03成交量与重叠指标
  4. 04批量运行指标策略
  5. 05支持 OHLCV DataFrame

适用场景

  1. 01从价格与成交量数据计算指标
  2. 02组合指标生成交易信号
  3. 03为回测提供指标输入
  4. 04分析加密市场不同时间周期

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/agiprolabs/claude-trading-skills --skill pandas-ta

安装后在 Claude Code 中输入/pandas-ta确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
common_pitfalls.md
indicator_guide.md
strategy_patterns.md
scripts/
compute_indicators.py
multi_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]

核心指标类别

趋势指标

识别市场方向和趋势强度。

指标调用方式关键信号
SMAdf.ta.sma(length=20)价格高于该值 = 看涨
EMAdf.ta.ema(length=20)比 SMA 更快,滞后更小
SuperTrenddf.ta.supertrend(length=10, multiplier=3)方向列:1=看涨,-1=看跌
Ichimokudf.ta.ichimoku()返回由 (span, lines) DataFrame 组成的元组
VWMAdf.ta.vwma(length=20)成交量加权价格趋势
HMAdf.ta.hma(length=20)滞后极小,趋势平滑
ADXdf.ta.adx(length=14)>25 = 趋势行情,<20 = 盘整行情
动量指标

衡量价格变化的速度和幅度。

指标调用方式关键信号
RSIdf.ta.rsi(length=14)>70 超买,<30 超卖
MACDdf.ta.macd(fast=12, slow=26, signal=9)柱状图交叉 = 入场信号
Stochasticdf.ta.stoch(k=14, d=3, smooth_k=3)>80 超买,<20 超卖
CCIdf.ta.cci(length=20)>100 超买,<-100 超卖
Williams %Rdf.ta.willr(length=14)>-20 超买,<-80 超卖
ROCdf.ta.roc(length=10)正值 = 上行动量
MFIdf.ta.mfi(length=14)RSI 的资金流版本
波动率指标

衡量价格离散程度和预期区间。

指标调用方式关键信号
Bollinger Bandsdf.ta.bbands(length=20, std=2)收窄 = 即将突破
ATRdf.ta.atr(length=14)仓位规模、止损设置
Keltner Channelsdf.ta.kc(length=20, scalar=1.5)BB 位于 KC 内 = 收窄
Donchian Channelsdf.ta.donchian(lower_length=20, upper_length=20)突破检测
成交量指标

通过成交量分析确认价格走势。

指标调用方式关键信号
OBVdf.ta.obv()与价格背离 = 反转
VWAPdf.ta.vwap()日内公允价值(需要 DatetimeIndex)
CMFdf.ta.cmf(length=20)>0 为吸筹,<0 为派发
ADdf.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剥头皮交易、PumpFunRSI(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