Pandas TA Classic - Technical Analysis Library
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=Trueto 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
numbafor 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
uvandpip - 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
# data/backtest extras — install those 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 ".[data]" # Data sources: yfinance, alpha-vantage
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
# data/backtest extras — install those 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 ".[data]" # Data sources: yfinance, alpha-vantage
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 (df.ta.ticker() is deprecated —
# 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("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 with multiprocessing support for bulk indicator processing
- 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()) - TA-Lib Integration (dual-role) - (1) acceleration backend: core indicators use native implementations by default; pass
talib=Trueto use TA-Lib's C implementation. (2) oracle:test_oracle_talib.pyverifies parity against TA-Lib - tulipy Integration (frozen oracle only) -
test_oracle_tulipy.pyverifies 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
PandasDatasubclass; runnable example inexamples/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:
- Quickstart Guide - Get up and running in minutes
- Tutorials - Step-by-step guides for common workflows
- Examples - Jupyter notebooks with real examples
Reference Documentation:
- Usage Guide - Programming conventions and basic usage
- Strategy System - Multiprocessing and bulk indicator processing
- Indicators Reference - Complete list of 224 indicators plus 62 CDL patterns (284 unique total)
- DataFrame API - Properties and methods reference
- Performance Metrics - Backtesting and performance analysis
Python Version Support
Pandas TA Classic follows a rolling support policy for the latest stable Python version plus 4 preceding minor versions.
Note: Python version support is dynamically managed via CI/CD workflows. When new Python versions are released, the library automatically updates to support the latest 5 minor versions. Check the CI workflow
LATEST_PYTHON_VERSIONfor the current configuration.
TA-Lib and tulipy serve different roles — both are fully optional and skip gracefully when not installed.
| Library | Role | Effect when installed |
|---|---|---|
| TA-Lib | Acceleration backend + live oracle | Core indicators — native by default, opt-in via talib=True; also used live in test_oracle_talib.py for parity checks |
| tulipy | Frozen oracle only | Not 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) |
| Area | Behaviour without TA-Lib | Behaviour with TA-Lib |
|---|---|---|
| CDL patterns (62) | Native Python — always used | Still 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.pyskips automatically (@unittest.skipUnless) when TA-Lib is not installed.test_oracle_tulipy.pyruns on every Python version against the committedtulipy_oracle.jsonsnapshot (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 viatalib=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:
License
This project is licensed under the MIT License - see the LICENSE file for details.
Metadata
Release files for pandas-ta-classic 0.8.32
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pandas_ta_classic-0.8.32-py3-none-any.whl | Python 3 | none | any | Details |
Release files / pandas_ta_classic-0.8.32-py3-none-any.whl
| Download URL | pandas_ta_classic-0.8.32-py3-none-any.whl |
|---|---|
| Size | 418.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e8e1ede0c13d5927d28c91dce3d5ab2c71a1fb7f2e62fb61fe95178d4ab768e0
|
|
BLAKE2b-256 checksum How to use checksums |
aad051037bdd1ae5b8570c2717342fdaf79eed27ab460c48e57ec672635e453a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|