agentleFS
agiprolabsagiprolabs/claude-trading-skills/skills/pandas-ta/SKILL.md

pandas-ta

Skill366 starsChanged 8 months agoMITView on GitHub

Technical analysis with 130+ indicators using pandas-ta for crypto market data

  • Installs packages

We split this skill into the rules it gives an agent

7 rules. About 0 are common, 6 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈6

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Run multiple indicators in a single call using ta.Strategy:

    line 125
  2. Distinctive:

    No session gaps — indicators that rely on open/close of sessions behave differently

    line 192
  3. Distinctive:

    Bollinger Bands: Use 2.5-3x standard deviation instead of the default 2x

    line 197
  4. Distinctive:

    ATR: Use for dynamic stop-losses.

    line 199
  5. Distinctive:

    Prefer price-based indicators (RSI, BBands, SuperTrend) for low-liquidity tokens

    line 204
  6. Distinctive:

    vectorbt: Use pandas-ta indicators as signal inputs for backtesting

    line 278
  7. Distinctive:

    position-sizing: Use ATR-based sizing from pandas-ta output

    line 281

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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.

IndicatorCallKey Signal
SMAdf.ta.sma(length=20)Price above = bullish
EMAdf.ta.ema(length=20)Faster than SMA, less lag
SuperTrenddf.ta.supertrend(length=10, multiplier=3)Direction column: 1=bull, -1=bear
Ichimokudf.ta.ichimoku()Returns tuple of (span, lines) DataFrames
VWMAdf.ta.vwma(length=20)Volume-weighted price trend
HMAdf.ta.hma(length=20)Minimal lag, smooth trend
ADXdf.ta.adx(length=14)>25 = trending, <20 = ranging

Momentum Indicators

Measure speed and magnitude of price changes.

IndicatorCallKey Signal
RSIdf.ta.rsi(length=14)>70 overbought, <30 oversold
MACDdf.ta.macd(fast=12, slow=26, signal=9)Histogram crossover = entry
Stochasticdf.ta.stoch(k=14, d=3, smooth_k=3)>80 overbought, <20 oversold
CCIdf.ta.cci(length=20)>100 overbought, <-100 oversold
Williams %Rdf.ta.willr(length=14)>-20 overbought, <-80 oversold
ROCdf.ta.roc(length=10)Positive = upward momentum
MFIdf.ta.mfi(length=14)Money flow version of RSI

Volatility Indicators

Measure price dispersion and expected range.

IndicatorCallKey Signal
Bollinger Bandsdf.ta.bbands(length=20, std=2)Squeeze = breakout pending
ATRdf.ta.atr(length=14)Position sizing, stop placement
Keltner Channelsdf.ta.kc(length=20, scalar=1.5)BB inside KC = squeeze
Donchian Channelsdf.ta.donchian(lower_length=20, upper_length=20)Breakout detection

Volume Indicators

Confirm price moves with volume analysis.

IndicatorCallKey Signal
OBVdf.ta.obv()Divergence from price = reversal
VWAPdf.ta.vwap()Intraday fair value (needs DatetimeIndex)
CMFdf.ta.cmf(length=20)>0 accumulation, <0 distribution
ADdf.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

TimeframeUse CaseRecommended Indicators
1m-5mScalping, PumpFunRSI(5-7), EMA(5,13), ATR(5)
15m-1hDay tradingMACD, RSI(14), BBands, EMA(20,50)
4h-1dSwing tradingSuperTrend, ADX, EMA(50,200)
1wPosition tradingSMA(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 interpretation
  • references/strategy_patterns.md — Pre-built strategy combinations for scalping, day trading, and swing trading
  • references/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 summary
  • scripts/multi_indicator_scan.py — Run multiple strategy profiles and score current signal alignment

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.