Skip to main content

Technical Analysis (ta.py)

PyPI version Downloads License: MIT

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.


NOTE

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.

Install

pip install ta_py

Requires Python 3.10 or newer. No other runtime dependencies.

Usage

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, bands

Every 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.

Why pure Python?

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 pip works.
  • 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-ta doesn'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_py is auditable Python source. No prebuilt binaries, no setup.py running 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.

Performance notes

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.

What's new in 2.0.0

  • 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, plus ta_py.random.* and ta_py.aroon.* namespaces.
  • Multi-process Monte Carlo via ta_py.multi.sim — typically 2–3× faster than the sequential ta_py.sim on 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 of rsi), stoch. See MIGRATION.md for before/after examples.
  • PEP 561 marker (py.typed) ships in the wheel so type-checkers pick up ta_py's annotations automatically.

See CHANGELOG.md for the full per-batch breakdown.

Examples

Per-indicator usage with input/output samples lives in EXAMPLES.md.

Moving Averages

Indicators

Oscillators

Bands

Statistics

Chart Types

Random

Miscellaneous

Experimental

Contributing

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.

License

MIT

Maintained By

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.


Metadata

Release files for ta_py 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ta_py 2.0.0
File Size Uploaded
ta_py-2.0.0.tar.gz 40.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ta_py 2.0.0
File Interpreter ABI Platform
ta_py-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 76.6 kB

Release files / ta_py-2.0.0.tar.gz

Download URL ta_py-2.0.0.tar.gz
Size 40.4 kB
Tags Source
SHA-256 checksum
How to use checksums
517d26298f06c41ce7b47f92a948c3de1b826c199e4a5bc5efaa1fe0093b205e
BLAKE2b-256 checksum
How to use checksums
6b06519665a2b768bc1b1dd785559c0dbe43d591f9b52146a309ebdafa189c1a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release files / ta_py-2.0.0-py3-none-any.whl

Download URL ta_py-2.0.0-py3-none-any.whl
Size 36.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b85fb97b28e6c34dec3e3ebb09158fd08446a34f01c6a5d72b0643e5e525dead
BLAKE2b-256 checksum
How to use checksums
dce9ddcdd43954d26775467dcc72c143d825aafc569e26caf2de815acf9231bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release history Release notifications | RSS feed

2.1.0

2 release files

This release

2.0.0 This release

2 release files

1.17.0

2 release files

1.6.0

1 release file

1.5.2

1 release file

1.5.1

1 release file

1.5.0

1 release file

1.4.7

1 release file

1.4.6

1 release file

1.4.5

1 release file

1.4.4

1 release file

1.4.3

1 release file

1.4.2

1 release file

1.4.1

1 release file

1.4.0

1 release file

1.3.3

1 release file

1.3.2

1 release file

1.3.1

1 release file

1.3.0

1 release file

1.2.0

1 release file

1.1.10

1 release file

1.1.9

1 release file

1.1.8

1 release file

1.1.7

1 release file

1.1.6

1 release file

1.1.5

1 release file

1.1.4

1 release file

1.1.3

1 release file

1.1.2

1 release file

1.1.1

1 release file

1.1.0

1 release file

1.0.8

1 release file

1.0.7

1 release file

1.0.6

1 release file

1.0.5

1 release file

1.0.4

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page