Technical Analysis Indicators - Pandas TA Classic is an easy to use Python 3 Pandas Extension with 250+ Indicators and Candlestick Patterns
See the code
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.
Get started quickly with our comprehensive guides:
Complete documentation: https://xgboosted.github.io/pandas-ta-classic/
cdl_pattern() = 284 unique (doji and inside appear in both counts; all CDL patterns use native Python — no TA-Lib required)talib=True to use TA-Libdocs/indicator_support_matrix.rstnumba for 6–230× speedups on hot-loop indicators (QQE, RSX, HWMA, SSF, PSAR, Supertrend, MCGD)uv and pipThe 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
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
cdl_pattern()pip install pandas-ta-classic[performance]df.ta.chain().sma(20).ta.rsi(14).ta.macd().ta.bbands(20) — chain multiple indicators in a single expressiondf.ta.<indicator>(), e.g. df.ta.rsi())talib=True to use TA-Lib's C implementation. (2) oracle: test_oracle_talib.py verifies parity against TA-Libtest_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 backendexamples/backtesting_py_strategy.pyPandasData subclass; runnable example in examples/backtrader_strategy.pyexamples/manifoldbt_strategy.pyComplete documentation is available at: https://xgboosted.github.io/pandas-ta-classic/
Start Here:
Reference Documentation:
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_VERSIONin 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 andrequires-pythonfrom it.
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:
uv: uv pip install pandas-ta-classic[performance]pip: pip install pandas-ta-classic[performance]We welcome contributions! Please see our contributing guidelines and issues page.
For detailed information about changes, improvements, and new features, please see the CHANGELOG.md file.
Original TA-LIB | TradingView | Sierra Chart | MQL5 | FM Labs | Pro Real Code | User 42
If you find this library helpful, please consider:
This project is licensed under the MIT License - see the LICENSE file for details.
11,920 followers · starred Jun 2026
237 followers · starred Mar 2026
145 followers · starred Feb 2026
103 followers · starred Sep 2025
Technical Analysis Indicators - Pandas TA Classic is an easy to use Python 3 Pandas Extension with 250+ Indicators and Candlestick Patterns
See the code
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.
Get started quickly with our comprehensive guides:
Complete documentation: https://xgboosted.github.io/pandas-ta-classic/
cdl_pattern() = 284 unique (doji and inside appear in both counts; all CDL patterns use native Python — no TA-Lib required)talib=True to use TA-Libdocs/indicator_support_matrix.rstnumba for 6–230× speedups on hot-loop indicators (QQE, RSX, HWMA, SSF, PSAR, Supertrend, MCGD)uv and pipThe 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
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
cdl_pattern()pip install pandas-ta-classic[performance]df.ta.chain().sma(20).ta.rsi(14).ta.macd().ta.bbands(20) — chain multiple indicators in a single expressiondf.ta.<indicator>(), e.g. df.ta.rsi())talib=True to use TA-Lib's C implementation. (2) oracle: test_oracle_talib.py verifies parity against TA-Libtest_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 backendexamples/backtesting_py_strategy.pyPandasData subclass; runnable example in examples/backtrader_strategy.pyexamples/manifoldbt_strategy.pyComplete documentation is available at: https://xgboosted.github.io/pandas-ta-classic/
Start Here:
Reference Documentation:
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_VERSIONin 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 andrequires-pythonfrom it.
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:
uv: uv pip install pandas-ta-classic[performance]pip: pip install pandas-ta-classic[performance]We welcome contributions! Please see our contributing guidelines and issues page.
For detailed information about changes, improvements, and new features, please see the CHANGELOG.md file.
Original TA-LIB | TradingView | Sierra Chart | MQL5 | FM Labs | Pro Real Code | User 42
If you find this library helpful, please consider:
This project is licensed under the MIT License - see the LICENSE file for details.
11,920 followers · starred Jun 2026
237 followers · starred Mar 2026
145 followers · starred Feb 2026
103 followers · starred Sep 2025