▶ Full Post Text
Hey r/algotrading,
Over the past couple months `pandas-ta-classic` has had a huge wave of contributions land on `main`. Here's a rundown of what's new if you haven't checked in recently:
---
## 🕯️ 62 Native Candlestick Patterns (no TA-Lib required)
60 new `cdl_*.py` pattern files were added natively. Every pattern — Engulfing, Hammer, Morning Star, Three Black Crows, you name it — is now pure Python. TA-Lib is *never* used for CDL even if installed. Access all of them via `df.ta.cdl_pattern(name="engulfing")`.
---
## 📈 30+ New Indicators
**Trend / Momentum**: `adxr`, `dx`, `plus_dm`, `minus_dm`, `sarext`, `cpr` (4 methods: classic/camarilla/fibonacci/woodie), `lrsi`, `pmax`, `macdext`, `macdfix`, `stochf`, `fosc`, `rocp`, `rocr`, `rocr100`, `trixh`, `vwmacd`
**Overlap / MA**: `mama`/`fama`, `ht_trendline`, `tsf`, `mmar`, `rainbow`, `mavp`
**Hilbert Transform cycles**: `ht_dcperiod`, `ht_dcphase`, `ht_phasor`, `ht_sine`, `ht_trendmode` — full HT family now supported
**Volatility**: Chandelier Exit (`ce`), `avolume`, `cvi`, `hvol`
**Volume**: `vfi`, `emv`, `marketfi`, `vosc`, `wad`
**Stats / Math**: `beta`, `correl`, `md`, `stderr`, `linregangle`, `linregintercept`, `linregslope`, `edecay`, new `math` namespace with `add/sub/mult/div` + rolling ops
**Cycle**: `dsp` (Detrended Synthetic Price)
---
## ⚡ Performance: Numba JIT + NumPy Vectorization
- `SSF`, `MCGD`, `HWMA`, `RSX`, `PSAR`, `Supertrend`, `QQE` and others get optional `@njit(cache=True)` via `numba`
- Install with: `pip install pandas-ta-classic[performance]`
- Measured speedups: **RSX 230×**, HWMA 70×, MCGD 43×, SSF 42×, Supertrend 13×, QQE 10×, PSAR 6×
- 15 additional indicators got NumPy `sliding_window_view` vectorization (replacing slow `.iloc` loops)
---
## 🧪 Oracle / Parity Test Suites
New `test_oracle_talib.py` and `test_oracle_tulipy.py` validate results against TA-Lib and tulipy on shared SPY fixtures. Zero skipped tests — every divergence is explicitly documented.
---
## 🔧 Breaking Changes to be Aware Of
- `qqe()` now returns **6 columns** (was 3) — adds long band, short band, direction
- `linreg(angle=True)` now returns **degrees by default** (was radians) to match TA-Lib
- `stdev`/`variance` `ddof` now defaults to **0** (population, was 1 sample) to match TA-Lib
---
## 📦 Other Quality of Life
- `uv` package manager fully documented alongside `pip`
- Automatic version management via `setuptools-scm` (no more manual version bumps)
- Dynamic `Category` dict — no more manually registering new indicators in `_meta.py`
- Python version support follows a rolling 5-version policy (now includes 3.14)
- Total indicator count: **224** (up from ~213)
---
GitHub: https://github.com/xgboosted/pandas-ta-classic
Install: `pip install pandas-ta-classic` or `uv add pandas-ta-classic`
Feedback and PRs welcome — especially on the oracle parity tests if you spot any formula divergences.