A zero-dependency, pure-Python technical analysis library. 151 indicators, full type hints, and full functional parity with ta.js 2.0 — its sibling JavaScript library. No NumPy, no pandas, no C extensions, no compilers required.
ta_py runs anywhere CPython does. There is nothing to compile and nothing to vendor — pip install ta_py is the entire installation.
from ta_py import sma, rsi
sma([1, 2, 3, 4, 5, 6, 10], 6) # [3.5, 5]The only multi-process feature is ta_py.multi.sim (Monte Carlo via stdlib multiprocessing); it falls back to the sequential ta_py.sim automatically when run inside an environment that can't spawn workers.
pip install ta_pyRequires Python 3.10 or newer. No other runtime dependencies.
import ta_py as ta
ta.sma([1, 2, 3, 4, 5, 6, 10], 6) # [3.5, 5]
ta.aroon.up([5, 4, 5, 2], 3) # [100.0, 50.0]
ta.bands([1, 2, 3, 4, 5, 6], length=5, deviations=2)Or import individual functions:
from ta_py import rsi, macd, atr, bandsEvery function is also re-exported on the top-level ta_py module. The ta_py.aroon, ta_py.random, and ta_py.multi namespaces mirror their ta.js counterparts.
ta_py is the only TA library on PyPI that combines zero runtime dependencies, full pure-Python implementation, and full ta.js 2.0 indicator coverage. That combination matters when:
- Install pain is a deal-breaker. No C compiler, no system libraries, no platform-specific wheels. Works on Alpine containers, AWS Lambda, locked-down corporate Python builds, fresh Windows installs — anywhere
pipworks. - Footprint matters. A few hundred KB on disk vs. ~50–100 MB for
numpy+pandas. Important for serverless cold starts, container images, and edge deploys. - You're chasing the latest CPython. Pure-Python libraries ship the day a new Python release does. C/Cython libraries lag months —
pandas-tadoesn't yet support Python 3.14, and TA-Lib regularly delays wheels for new interpreters. - You can't or won't add native dependencies. Compliance reviews, supply-chain audits, vendoring requirements: every line of
ta_pyis auditable Python source. No prebuilt binaries, nosetup.pyrunning compilers. - You target alternative runtimes. PyPy, GraalPy, and Pyodide (Python in the browser via WASM) all run pure-Python code. Most native-extension TA libraries don't port.
If you need raw throughput across millions of bars in tight loops and you're comfortable installing a C extension, use TA-Lib. ta_py exists for the much larger case where indicator math is one step in a bigger pipeline and "fast enough on a 10k-bar series, with no install pain" is the right trade.
Internal sliding-window O(N) rewrites in 2.0 measurably beat naïve list-comprehension implementations of the same indicators (e.g. Bollinger Bands ~5× faster than a textbook Python implementation, standard deviation ~13× faster). The bench/ sub-project contains a regression-tracking harness used during development; it is not a marketing benchmark and does not claim parity with C-backed libraries.
- 39 new indicators for full ta.js 2.0 parity: DM family (
pdm/mdm/pdi/mdi/dx/adx/adxr/natr),cci,stoch_rsi,kdj,cmf,vortex,kvo,ult,trix,ppo,apo,mass,dema/tema/trima/t3/zlema/vidya, linear regression family (lr_slope/lr_intercept/lr_angle/tsf),std_series,adl,nvi/pvi,emv,dpo,ulcer,fibnumbers, plusta_py.random.*andta_py.aroon.*namespaces. - Multi-process Monte Carlo via
ta_py.multi.sim— typically 2–3× faster than the sequentialta_py.simon 8-core hardware. - Sliding-window O(N) rewrites of hot paths:
std,bands,sma,smma,wma,ema,vwma,variance,envelope,mfi,rsi,stoch,pr,don. - 6 algorithm/output-shape breaks vs 1.17.0 —
atr,smma,mfi,rsi,wrsi(now an alias ofrsi),stoch. See MIGRATION.md for before/after examples. - PEP 561 marker (
py.typed) ships in the wheel so type-checkers pick upta_py's annotations automatically.
See CHANGELOG.md for the full per-batch breakdown.
Per-indicator usage with input/output samples lives in EXAMPLES.md.
- SMA · SMMA · WMA · EMA · DEMA · TEMA · TRIMA · T3 · ZLEMA · VIDYA · Hull · LSMA · VWMA · VWWMA · WSMA · PWMA · HWMA · KAMA · CWMA
- MACD · MACD signal · MACD bars · RSI · Wilder's RSI · TSI · BOP · Force Index · ASI · Alligator · Williams %R · Stochastics · Stoch RSI · Fibonacci Retracement · Bollinger Bandwidth · Ichimoku · ATR · NATR · Aroon Up · Aroon Down · Aroon namespace · MFI · CMF · ROC · Coppock · KST · OBV · NVI · PVI · ADL · EMV · VWAP · Fractals · Crossover · Momentum · HalfTrend · ZigZag · PSAR · SuperTrend · Elder Ray · HV · RVI · RVI signal · RSI Divergence · Universal Divergence · TRIX · CCI · DM family · DI family · DX · ADX · ADXR · PPO · APO · DPO · Mass Index · Ulcer Index · Vortex · KDJ · KVO
- Alligator Osc · Chande Momentum · Chaikin · Aroon Osc · Awesome · Accelerator · Fisher · Ultimate
- Std · Std series · LR slope · LR intercept · LR angle · TSF · Variance · Normal CDF · Inverse Normal · Monte Carlo · Multi-process Monte Carlo · Percentile · Correlation · Covariance · Pct Difference · Expected Return · Abnormal Return · Kelly · Permutations · Winratio · Avg Win · Avg Loss · Drawdown · Median · Recent High · Recent Low · MAD · AAD · Std Error · SSD · Log · Exp · Normalize · Denormalize · Normalize Pair · Normalize From · Standardize · Z-Score · K-means · MSE · Cumulative · Sum · Return Positive · Return Negative · P-Value · Martingale · Anti-Martingale · Expected Trails
Pull requests are welcome. For major changes, please open an issue first to discuss what you'd like to change. Please update tests as appropriate — see CONTRIBUTING.md for the test/lint workflow.
ta.py is an open-source project created and actively maintained by Nino Kroesen.
This library was built with portability in mind for high-frequency data and algorithmic trading systems where install footprint, dependency surface, and supply-chain auditability matter as much as raw throughput. If you'd like to see these indicators in action within a live quantitative trading environment, check out Bitvested.