
pandas-ta
Technical analysis with 130+ indicators using pandas-ta for crypto market data
- Installs
- 593
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/agiprolabs/claude-trading-skills --skill pandas-ta- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads pandas-ta automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
pandas-ta — Technical Analysis for Crypto Markets
pandas-ta is a Python library that extends pandas DataFrames with 130+ technical analysis indicators accessible via df.ta. It covers trend, momentum, volatility, volume, and overlap indicator categories — all callable with a single method on any OHLCV DataFrame.
Installation
uv pip install pandas-ta pandas httpx
Quick Start
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 Format
pandas-ta expects a DataFrame with lowercase column names:
import pandas as pd
df = pd.DataFrame({
"open": [...],
"high": [...],
"low": [...],
"close": [...],
"volume": [...]
}, index=pd.DatetimeIndex([...]))
Important: Set the index to a DatetimeIndex for time-aware indicators like VWAP. Column names must be lowercase (close, not Close).
Handling Missing Data
# 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]
Core Indicator Categories
Trend Indicators
Identify market direction and trend strength.
| Indicator | Call | Key Signal |
|---|---|---|
| SMA | df.ta.sma(length=20) | Price above = bullish |
| EMA | df.ta.ema(length=20) | Faster than SMA, less lag |
| SuperTrend | df.ta.supertrend(length=10, multiplier=3) | Direction column: 1=bull, -1=bear |
| Ichimoku | df.ta.ichimoku() | Returns tuple of (span, lines) DataFrames |
| VWMA | df.ta.vwma(length=20) | Volume-weighted price trend |
| HMA | df.ta.hma(length=20) | Minimal lag, smooth trend |
| ADX | df.ta.adx(length=14) | >25 = trending, <20 = ranging |
Momentum Indicators
Measure speed and magnitude of price changes.
| Indicator | Call | Key Signal |
|---|---|---|
| RSI | df.ta.rsi(length=14) | >70 overbought, <30 oversold |
| MACD | df.ta.macd(fast=12, slow=26, signal=9) | Histogram crossover = entry |
| Stochastic | df.ta.stoch(k=14, d=3, smooth_k=3) | >80 overbought, <20 oversold |
| CCI | df.ta.cci(length=20) | >100 overbought, <-100 oversold |
| Williams %R | df.ta.willr(length=14) | >-20 overbought, <-80 oversold |
| ROC | df.ta.roc(length=10) | Positive = upward momentum |
| MFI | df.ta.mfi(length=14) | Money flow version of RSI |
Volatility Indicators
Measure price dispersion and expected range.
| Indicator | Call | Key Signal |
|---|---|---|
| Bollinger Bands | df.ta.bbands(length=20, std=2) | Squeeze = breakout pending |
| ATR | df.ta.atr(length=14) | Position sizing, stop placement |
| Keltner Channels | df.ta.kc(length=20, scalar=1.5) | BB inside KC = squeeze |
| Donchian Channels | df.ta.donchian(lower_length=20, upper_length=20) | Breakout detection |
Volume Indicators
Confirm price moves with volume analysis.
| Indicator | Call | Key Signal |
|---|---|---|
| OBV | df.ta.obv() | Divergence from price = reversal |
| VWAP | df.ta.vwap() | Intraday fair value (needs DatetimeIndex) |
| CMF | df.ta.cmf(length=20) | >0 accumulation, <0 distribution |
| AD | df.ta.ad() | Accumulation/Distribution line |
Strategy Class
Run multiple indicators in a single call using 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)
Named Strategy Patterns
# 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},
]
)
Crypto-Specific Considerations
24/7 Markets
- No session gaps — indicators that rely on open/close of sessions behave differently
- VWAP resets at midnight UTC by default; consider anchored VWAP for custom periods
- Weekend data is continuous — no Monday gap effects
High Volatility Adjustments
- Bollinger Bands: Use 2.5-3x standard deviation instead of the default 2x
- RSI periods: Shorter periods (7-10) capture faster crypto cycles
- ATR: Use for dynamic stop-losses; crypto ATR is typically 2-5x equity ATR
- SuperTrend multiplier: 3-4x for crypto vs 2-3x for equities
Low-Cap Token Considerations
- Volume indicators (OBV, CMF, MFI) are unreliable with thin order books
- Prefer price-based indicators (RSI, BBands, SuperTrend) for low-liquidity tokens
- ATR-based position sizing is critical — wide spreads amplify losses
- Wash trading inflates volume; cross-reference with on-chain data
Timeframe Selection
| Timeframe | Use Case | Recommended Indicators |
|---|---|---|
| 1m-5m | Scalping, PumpFun | RSI(5-7), EMA(5,13), ATR(5) |
| 15m-1h | Day trading | MACD, RSI(14), BBands, EMA(20,50) |
| 4h-1d | Swing trading | SuperTrend, ADX, EMA(50,200) |
| 1w | Position trading | SMA(20,50), RSI(14), monthly VWAP |
Common Indicator Combinations
Trend Following
# 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)
)
Mean Reversion
# 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)
)
Momentum Confirmation
# 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))
)
Volatility Breakout (BB Squeeze)
# 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
Integration with Other Skills
- birdeye-api: Fetch OHLCV data → feed into pandas-ta for indicator computation
- vectorbt: Use pandas-ta indicators as signal inputs for backtesting
- trading-visualization: Plot indicator overlays on price charts
- slippage-modeling: Combine ATR with slippage estimates for realistic execution modeling
- position-sizing: Use ATR-based sizing from pandas-ta output
Files
References
references/indicator_guide.md— Top 20 crypto indicators with syntax, parameters, and interpretationreferences/strategy_patterns.md— Pre-built strategy combinations for scalping, day trading, and swing tradingreferences/common_pitfalls.md— Common mistakes with technical indicators in crypto markets
Scripts
scripts/compute_indicators.py— Fetch OHLCV data and compute standard indicator set with signal summaryscripts/multi_indicator_scan.py— Run multiple strategy profiles and score current signal alignment
FAQ
What does the pandas-ta skill do?
Technical analysis with 130+ indicators using pandas-ta for crypto market data
How do I install pandas-ta?
Run npx skills add https://github.com/agiprolabs/claude-trading-skills --skill pandas-ta in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/pandas-ta/ (personal) or .claude/skills/pandas-ta/ (project).
Which AI agents can use pandas-ta?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is pandas-ta safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains pandas-ta?
It is published by agiprolabs in agiprolabs/claude-trading-skills. It has 593 recorded installs.
More from agiprolabs/claude-trading-skills
walk-forward-validation
agiprolabs/claude-trading-skills
Walk-forward validation framework for trading strategies and ML models with time-series-aware splits, overfit detection, and regime-aware validation
risk-management
agiprolabs/claude-trading-skills
Portfolio-level risk controls, drawdown management, exposure limits, and circuit breakers for crypto trading
position-sizing
agiprolabs/claude-trading-skills
Trade sizing methods including fixed fractional, volatility-adjusted, Kelly criterion, and liquidity-constrained sizing
regime-detection
agiprolabs/claude-trading-skills
Market regime identification using volatility clustering, trend detection, and statistical methods for adaptive trading
kelly-criterion
agiprolabs/claude-trading-skills
Kelly criterion optimal sizing with fractional variants, edge estimation, and practical application for crypto trading
trade-journal
agiprolabs/claude-trading-skills
Structured trade logging, performance review, behavioral pattern detection, and strategy attribution for systematic improvement
Popular data & databases skills
supabase-postgres-best-practices
supabase/agent-skills
Postgres best practices maintained by Supabase, for Postgres running anywhere. Load this skill BEFORE writing or changing anything that lives in a Postgres database: creating or altering tables and columns (including choosing column types), schema design, migrations and declarative schema files, RLS policies and the tests that verify them, indexes, triggers, database functions, queues and scheduled jobs (pgcron, pgmq), vector/semantic search (pgvector), and restoring dumps (pgrestore) or importing data. Also load it when diagnosing slow queries, high CPU, timeouts, EXPLAIN plans, connection exhaustion, locking, bloat, or rows visible to the wrong user or tenant. This is not just a performance guide — schema, migration, security, and SQL authoring tasks need these rules too, even for a one-column change or a single query.
prisma-client-api
prisma/skills
Prisma Client API reference covering model queries, filters, operators, and client methods. Use when writing database queries, using CRUD operations, filtering data, or configuring Prisma Client. Triggers on "prisma query", "findMany", "create", "update", "delete", "$transaction".
prisma-database-setup
prisma/skills
Deprecated compatibility name for prisma-orm-setup. Use only when a user or existing integration explicitly invokes prisma-database-setup; otherwise select prisma-orm-setup.
prisma-cli
prisma/skills
Prisma ORM 7 CLI reference for existing Prisma 7 applications or explicitly selected Prisma 7 workflows. Covers prisma init, generate, migrate, db, dev, studio, and mcp. For setup, connection repair, or Prisma 8, use prisma-orm-setup; not the Prisma Platform CLI.
prisma-postgres
prisma/skills
Deprecated compatibility name for prisma-postgres-setup. Use only when a user or existing integration explicitly invokes prisma-postgres; otherwise select prisma-postgres-setup.
prisma-driver-adapter-implementation
prisma/skills
Required reference for Prisma ORM 7 SQL driver adapter work. Use when implementing or modifying adapters, adding database drivers, or touching SqlDriverAdapter, Transaction, savepoint, result mapping, or DriverAdapterError behavior. Covers current transaction lifecycle, optional savepoint hooks, original database-error preservation, and verification.