xgboosted/pandas-ta-classic

Technical Analysis Indicators - Pandas TA Classic is an easy to use Python 3 Pandas Extension with 250+ Indicators and Candlestick Patterns

Python

456

1,482 commits

updated Oct 13, 2026

See the code

README

Pandas TA Classic

Pandas TA Classic - Technical Analysis Library

License Build Status Documentation Python Version PyPI Version Package Status Downloads Stars Forks Dependents Contributors

Example Chart

Pandas TA Classic is an easy-to-use library that leverages the Pandas package with 224 indicators and utility functions and 62 native candlestick patterns (284 total unique — no TA-Lib required). Many commonly used indicators are included, such as: Simple Moving Average (sma), Moving Average Convergence Divergence (macd), Hull Exponential Moving Average (hma), Bollinger Bands (bbands), On-Balance Volume (obv), Aroon & Aroon Oscillator (aroon), Squeeze (squeeze) and many more.

This is the classic/community maintained version of the popular pandas-ta library.

New to Pandas TA Classic?

Get started quickly with our comprehensive guides:

  • Quickstart Guide - Installation, your first indicators, and common workflows
  • Tutorials - Step-by-step tutorials for real-world use cases:
  • Moving Average Crossover Strategy
  • Building Custom Indicator Strategies
  • Backtesting with Performance Metrics
  • Integrating with backtesting.py
  • Integrating with backtrader
  • Integrating with VectorBT
  • Integrating with manifoldbt
  • Multi-Timeframe Analysis
  • Creating Custom Indicators
  • Candlestick Pattern Recognition

Complete documentation: https://xgboosted.github.io/pandas-ta-classic/

Key Features

  • 284 Unique Indicators & Patterns: 224 Category indicators + 62 CDL patterns via cdl_pattern() = 284 unique (doji and inside appear in both counts; all CDL patterns use native Python — no TA-Lib required)
  • All-Native Candlestick Patterns: All 62 CDL patterns have native Python implementations — TA-Lib is never used for CDL patterns
  • Optional TA-Lib Acceleration: Core indicators (EMA, SMA, RSI, MACD, OBV, ATR, etc.) use native implementations by default; pass talib=True to use TA-Lib
  • Compatibility Scope Is Explicit: Not every TA-Lib/tulipy function has a pandas-ta-classic counterpart. See the full per-indicator matrix for current coverage: docs/indicator_support_matrix.rst
  • Optional Performance Boost: Install numba for 6–230× speedups on hot-loop indicators (QQE, RSX, HWMA, SSF, PSAR, Supertrend, MCGD)
  • Automatic Versioning: Version management via git tags using setuptools-scm
  • Modern Package Management: Full support for both uv and pip
  • Production Ready: Stable status with comprehensive test coverage including property-based testing (Hypothesis)
  • Active Development: Regular updates with community contributions

Quick Start

Installation

The library supports both modern uv and traditional pip package managers.

Stable Release

Using uv (recommended - faster):

uv pip install pandas-ta-classic

Using pip:

pip install pandas-ta-classic

Latest Version

Using uv:

uv pip install git+https://github.com/xgboosted/pandas-ta-classic

Using pip:

pip install -U git+https://github.com/xgboosted/pandas-ta-classic

Development Installation

Using uv:

# Clone the repository
git clone https://github.com/xgboosted/pandas-ta-classic.git
cd pandas-ta-classic

# Install with all core dependencies (excludes the platform-fragile
# backtest extra — install it explicitly if needed)
uv pip install -e ".[all]"

# Or install specific dependency groups:
uv pip install -e ".[dev]" # Development tools
uv pip install -e ".[optional]" # Optional runtime features
uv pip install -e ".[oracle]" # Oracle parity lib: TA-Lib
uv pip install -e ".[backtest]" # Backtesting: backtesting, vectorbt, backtrader

Using pip:

# Clone the repository
git clone https://github.com/xgboosted/pandas-ta-classic.git
cd pandas-ta-classic

# Install with all core dependencies (excludes the platform-fragile
# backtest extra — install it explicitly if needed)
pip install -e ".[all]"

# Or install specific dependency groups:
pip install -e ".[dev]" # Development tools
pip install -e ".[optional]" # Optional runtime features
pip install -e ".[oracle]" # Oracle parity lib: TA-Lib
pip install -e ".[backtest]" # Backtesting: backtesting, vectorbt, backtrader

Basic Usage

import pandas as pd
import pandas_ta_classic as ta

# Load your data
df = pd.read_csv("path/to/symbol.csv")
# OR fetch OHLCV with yfinance directly (pandas-ta-classic does not fetch data;
# see examples/fetch_market_data.py):
# import yfinance as yf
# df = yf.download("AAPL", period="1y")

# Calculate indicators
df.ta.sma(length=20, append=True) # Simple Moving Average
df.ta.rsi(append=True) # Relative Strength Index 
df.ta.macd(append=True) # MACD
df.ta.bbands(append=True) # Bollinger Bands

# Fluent API chaining (v0.6+)
df.ta.chain().sma(20).ta.rsi(14).ta.macd().ta.bbands(20)

# Or run a strategy with multiple indicators
df.ta.strategy(ta.CommonStrategy) # Runs commonly used indicators

Features

  • 224 Technical Indicators & Utilities across 10 categories (Candles, Cycles, Math, Momentum, Overlap, Trend, Volume, etc.)
  • 62 Native Candlestick Patterns — all patterns natively implemented, no TA-Lib required
  • 284 Unique Indicators & Patterns - 224 category indicators plus 62 CDL patterns via cdl_pattern()
  • Dynamic Category Discovery - automatically detects all available indicators from the filesystem
  • Optional Numba Acceleration - 6–230× speedups via pip install pandas-ta-classic[performance]
  • Strategy System for bulk indicator processing, with opt-in multiprocessing
  • Fluent API Chaining: df.ta.chain().sma(20).ta.rsi(14).ta.macd().ta.bbands(20) — chain multiple indicators in a single expression
  • Pandas DataFrame Extension for seamless integration (df.ta.<indicator>(), e.g. df.ta.rsi())
  • TA-Lib Integration (dual-role) - (1) acceleration backend: core indicators use native implementations by default; pass talib=True to use TA-Lib's C implementation. (2) oracle: test_oracle_talib.py verifies parity against TA-Lib
  • tulipy Integration (frozen oracle only) - test_oracle_tulipy.py verifies native output against a committed golden snapshot of tulipy's output (tests/fixtures/tulipy_oracle.json); tulipy itself is no longer installed at test time, only to regenerate the snapshot; never used as a computation backend
  • Backtesting.py Integration — bridge function and runnable SMA crossover example in examples/backtesting_py_strategy.py
  • backtrader Integration — precompute-then-feed pattern with dynamic PandasData subclass; runnable example in examples/backtrader_strategy.py
  • Vectorbt Integration - compatible with popular backtesting framework
  • manifoldbt Integration - precompute-then-register pattern using exogenous series; runnable example in examples/manifoldbt_strategy.py
  • Custom Indicators - easily create and chain your own indicators

Documentation

Complete documentation is available at: https://xgboosted.github.io/pandas-ta-classic/

Learning Resources

Start Here:

Reference Documentation:

Python Version Support

Pandas TA Classic follows a rolling support policy for the latest stable Python version plus 4 preceding minor versions: currently Python 3.11–3.15.

Note: The window is set by LATEST_PYTHON_VERSION in the CI workflow. A maintainer raises it after a new Python release; the CI test matrix follows from it, and each release derives the PyPI classifiers and requires-python from it.

TA-Lib and tulipy serve different roles — both are fully optional and skip gracefully when not installed.

LibraryRoleEffect when installed
TA-LibAcceleration backend + live oracleCore indicators — native by default, opt-in via talib=True; also used live in test_oracle_talib.py for parity checks
tulipyFrozen oracle onlyNot a computation backend and not installed at test time; test_oracle_tulipy.py compares against a committed golden snapshot of tulipy's output. tulipy is only needed to regenerate that snapshot (CPython <3.12)
AreaBehaviour without TA-LibBehaviour with TA-Lib
CDL patterns (62)Native Python — always usedStill native — TA-Lib never used for patterns
Core indicators (59)Native Python (default)TA-Lib available via talib=True
# CDL patterns — always native, no TA-Lib needed
df.ta.cdl_pattern(name="all") # run all 62 patterns
df.ta.cdl_pattern(name="engulfing") # individual pattern

# Core indicators — native by default
df.ta.ema(length=20) # native implementation
df.ta.ema(length=20, talib=True) # use TA-Lib

Installing oracle libraries:

# uv
uv pip install pandas-ta-classic[oracle] # installs TA-Lib (the live oracle)
uv pip install TA-Lib # TA-Lib only (also enables acceleration backend)
# pip
pip install pandas-ta-classic[oracle] # installs TA-Lib (the live oracle)
pip install TA-Lib # TA-Lib only (also enables acceleration backend)
# tulipy is only needed to regenerate the frozen oracle snapshot (CPython <3.12):
pip install tulipy && python tests/fixtures/generate_tulipy_oracle.py

Note: test_oracle_talib.py skips automatically (@unittest.skipUnless) when TA-Lib is not installed. test_oracle_tulipy.py runs on every Python version against the committed tulipy_oracle.json snapshot (skips only if that fixture is missing) — it does not require tulipy installed. Neither is required for normal use. Installing TA-Lib additionally enables C-library acceleration for core indicators via talib=True.

Performance boost: Install numba for 6–230× speedups on computation-heavy indicators:

  • Using uv: uv pip install pandas-ta-classic[performance]
  • Using pip: pip install pandas-ta-classic[performance]

Contributing

We welcome contributions! Please see our contributing guidelines and issues page.

Reporting Issues

  • Check existing issues first
  • Provide reproducible code examples
  • Include relevant error messages and data samples

Changelog

For detailed information about changes, improvements, and new features, please see the CHANGELOG.md file.

Sources

Original TA-LIB | TradingView | Sierra Chart | MQL5 | FM Labs | Pro Real Code | User 42

Support

If you find this library helpful, please consider:

Sponsor

License

This project is licensed under the MIT License - see the LICENSE file for details.

xgboosted/pandas-ta-classic

Technical Analysis Indicators - Pandas TA Classic is an easy to use Python 3 Pandas Extension with 250+ Indicators and Candlestick Patterns

Python

456

1,482 commits

updated Oct 13, 2026

See the code

README

Pandas TA Classic

Pandas TA Classic - Technical Analysis Library

License Build Status Documentation Python Version PyPI Version Package Status Downloads Stars Forks Dependents Contributors

Example Chart

Pandas TA Classic is an easy-to-use library that leverages the Pandas package with 224 indicators and utility functions and 62 native candlestick patterns (284 total unique — no TA-Lib required). Many commonly used indicators are included, such as: Simple Moving Average (sma), Moving Average Convergence Divergence (macd), Hull Exponential Moving Average (hma), Bollinger Bands (bbands), On-Balance Volume (obv), Aroon & Aroon Oscillator (aroon), Squeeze (squeeze) and many more.

This is the classic/community maintained version of the popular pandas-ta library.

New to Pandas TA Classic?

Get started quickly with our comprehensive guides:

  • Quickstart Guide - Installation, your first indicators, and common workflows
  • Tutorials - Step-by-step tutorials for real-world use cases:
  • Moving Average Crossover Strategy
  • Building Custom Indicator Strategies
  • Backtesting with Performance Metrics
  • Integrating with backtesting.py
  • Integrating with backtrader
  • Integrating with VectorBT
  • Integrating with manifoldbt
  • Multi-Timeframe Analysis
  • Creating Custom Indicators
  • Candlestick Pattern Recognition

Complete documentation: https://xgboosted.github.io/pandas-ta-classic/

Key Features

  • 284 Unique Indicators & Patterns: 224 Category indicators + 62 CDL patterns via cdl_pattern() = 284 unique (doji and inside appear in both counts; all CDL patterns use native Python — no TA-Lib required)
  • All-Native Candlestick Patterns: All 62 CDL patterns have native Python implementations — TA-Lib is never used for CDL patterns
  • Optional TA-Lib Acceleration: Core indicators (EMA, SMA, RSI, MACD, OBV, ATR, etc.) use native implementations by default; pass talib=True to use TA-Lib
  • Compatibility Scope Is Explicit: Not every TA-Lib/tulipy function has a pandas-ta-classic counterpart. See the full per-indicator matrix for current coverage: docs/indicator_support_matrix.rst
  • Optional Performance Boost: Install numba for 6–230× speedups on hot-loop indicators (QQE, RSX, HWMA, SSF, PSAR, Supertrend, MCGD)
  • Automatic Versioning: Version management via git tags using setuptools-scm
  • Modern Package Management: Full support for both uv and pip
  • Production Ready: Stable status with comprehensive test coverage including property-based testing (Hypothesis)
  • Active Development: Regular updates with community contributions

Quick Start

Installation

The library supports both modern uv and traditional pip package managers.

Stable Release

Using uv (recommended - faster):

uv pip install pandas-ta-classic

Using pip:

pip install pandas-ta-classic

Latest Version

Using uv:

uv pip install git+https://github.com/xgboosted/pandas-ta-classic

Using pip:

pip install -U git+https://github.com/xgboosted/pandas-ta-classic

Development Installation

Using uv:

# Clone the repository
git clone https://github.com/xgboosted/pandas-ta-classic.git
cd pandas-ta-classic

# Install with all core dependencies (excludes the platform-fragile
# backtest extra — install it explicitly if needed)
uv pip install -e ".[all]"

# Or install specific dependency groups:
uv pip install -e ".[dev]" # Development tools
uv pip install -e ".[optional]" # Optional runtime features
uv pip install -e ".[oracle]" # Oracle parity lib: TA-Lib
uv pip install -e ".[backtest]" # Backtesting: backtesting, vectorbt, backtrader

Using pip:

# Clone the repository
git clone https://github.com/xgboosted/pandas-ta-classic.git
cd pandas-ta-classic

# Install with all core dependencies (excludes the platform-fragile
# backtest extra — install it explicitly if needed)
pip install -e ".[all]"

# Or install specific dependency groups:
pip install -e ".[dev]" # Development tools
pip install -e ".[optional]" # Optional runtime features
pip install -e ".[oracle]" # Oracle parity lib: TA-Lib
pip install -e ".[backtest]" # Backtesting: backtesting, vectorbt, backtrader

Basic Usage

import pandas as pd
import pandas_ta_classic as ta

# Load your data
df = pd.read_csv("path/to/symbol.csv")
# OR fetch OHLCV with yfinance directly (pandas-ta-classic does not fetch data;
# see examples/fetch_market_data.py):
# import yfinance as yf
# df = yf.download("AAPL", period="1y")

# Calculate indicators
df.ta.sma(length=20, append=True) # Simple Moving Average
df.ta.rsi(append=True) # Relative Strength Index 
df.ta.macd(append=True) # MACD
df.ta.bbands(append=True) # Bollinger Bands

# Fluent API chaining (v0.6+)
df.ta.chain().sma(20).ta.rsi(14).ta.macd().ta.bbands(20)

# Or run a strategy with multiple indicators
df.ta.strategy(ta.CommonStrategy) # Runs commonly used indicators

Features

  • 224 Technical Indicators & Utilities across 10 categories (Candles, Cycles, Math, Momentum, Overlap, Trend, Volume, etc.)
  • 62 Native Candlestick Patterns — all patterns natively implemented, no TA-Lib required
  • 284 Unique Indicators & Patterns - 224 category indicators plus 62 CDL patterns via cdl_pattern()
  • Dynamic Category Discovery - automatically detects all available indicators from the filesystem
  • Optional Numba Acceleration - 6–230× speedups via pip install pandas-ta-classic[performance]
  • Strategy System for bulk indicator processing, with opt-in multiprocessing
  • Fluent API Chaining: df.ta.chain().sma(20).ta.rsi(14).ta.macd().ta.bbands(20) — chain multiple indicators in a single expression
  • Pandas DataFrame Extension for seamless integration (df.ta.<indicator>(), e.g. df.ta.rsi())
  • TA-Lib Integration (dual-role) - (1) acceleration backend: core indicators use native implementations by default; pass talib=True to use TA-Lib's C implementation. (2) oracle: test_oracle_talib.py verifies parity against TA-Lib
  • tulipy Integration (frozen oracle only) - test_oracle_tulipy.py verifies native output against a committed golden snapshot of tulipy's output (tests/fixtures/tulipy_oracle.json); tulipy itself is no longer installed at test time, only to regenerate the snapshot; never used as a computation backend
  • Backtesting.py Integration — bridge function and runnable SMA crossover example in examples/backtesting_py_strategy.py
  • backtrader Integration — precompute-then-feed pattern with dynamic PandasData subclass; runnable example in examples/backtrader_strategy.py
  • Vectorbt Integration - compatible with popular backtesting framework
  • manifoldbt Integration - precompute-then-register pattern using exogenous series; runnable example in examples/manifoldbt_strategy.py
  • Custom Indicators - easily create and chain your own indicators

Documentation

Complete documentation is available at: https://xgboosted.github.io/pandas-ta-classic/

Learning Resources

Start Here:

Reference Documentation:

Python Version Support

Pandas TA Classic follows a rolling support policy for the latest stable Python version plus 4 preceding minor versions: currently Python 3.11–3.15.

Note: The window is set by LATEST_PYTHON_VERSION in the CI workflow. A maintainer raises it after a new Python release; the CI test matrix follows from it, and each release derives the PyPI classifiers and requires-python from it.

TA-Lib and tulipy serve different roles — both are fully optional and skip gracefully when not installed.

LibraryRoleEffect when installed
TA-LibAcceleration backend + live oracleCore indicators — native by default, opt-in via talib=True; also used live in test_oracle_talib.py for parity checks
tulipyFrozen oracle onlyNot a computation backend and not installed at test time; test_oracle_tulipy.py compares against a committed golden snapshot of tulipy's output. tulipy is only needed to regenerate that snapshot (CPython <3.12)
AreaBehaviour without TA-LibBehaviour with TA-Lib
CDL patterns (62)Native Python — always usedStill native — TA-Lib never used for patterns
Core indicators (59)Native Python (default)TA-Lib available via talib=True
# CDL patterns — always native, no TA-Lib needed
df.ta.cdl_pattern(name="all") # run all 62 patterns
df.ta.cdl_pattern(name="engulfing") # individual pattern

# Core indicators — native by default
df.ta.ema(length=20) # native implementation
df.ta.ema(length=20, talib=True) # use TA-Lib

Installing oracle libraries:

# uv
uv pip install pandas-ta-classic[oracle] # installs TA-Lib (the live oracle)
uv pip install TA-Lib # TA-Lib only (also enables acceleration backend)
# pip
pip install pandas-ta-classic[oracle] # installs TA-Lib (the live oracle)
pip install TA-Lib # TA-Lib only (also enables acceleration backend)
# tulipy is only needed to regenerate the frozen oracle snapshot (CPython <3.12):
pip install tulipy && python tests/fixtures/generate_tulipy_oracle.py

Note: test_oracle_talib.py skips automatically (@unittest.skipUnless) when TA-Lib is not installed. test_oracle_tulipy.py runs on every Python version against the committed tulipy_oracle.json snapshot (skips only if that fixture is missing) — it does not require tulipy installed. Neither is required for normal use. Installing TA-Lib additionally enables C-library acceleration for core indicators via talib=True.

Performance boost: Install numba for 6–230× speedups on computation-heavy indicators:

  • Using uv: uv pip install pandas-ta-classic[performance]
  • Using pip: pip install pandas-ta-classic[performance]

Contributing

We welcome contributions! Please see our contributing guidelines and issues page.

Reporting Issues

  • Check existing issues first
  • Provide reproducible code examples
  • Include relevant error messages and data samples

Changelog

For detailed information about changes, improvements, and new features, please see the CHANGELOG.md file.

Sources

Original TA-LIB | TradingView | Sierra Chart | MQL5 | FM Labs | Pro Real Code | User 42

Support

If you find this library helpful, please consider:

Sponsor

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project health

Latest release

0.8.32 · Sep 14, 2026

Releases this year

9

Significant stargazers

samy kamkar

11,920 followers · starred Jun 2026

dharmatech

237 followers · starred Mar 2026

Ben Lee

145 followers · starred Feb 2026

Basil Sh.

103 followers · starred Sep 2025