zeon-ta
Technical analysis for Python — the widely used classics (RSI, MACD, Bollinger Bands, Ichimoku, and the rest of the standard toolkit) alongside modern, academically-sourced tools most TA libraries skip: Ehlers' cycle-analysis filters, the Hurst exponent, wavelet-based denoising and multi-scale volatility, OHLC volatility estimators standard in quantitative finance (Parkinson, Garman-Klass, Rogers-Satchell, Yang-Zhang), and a causal cross-wavelet lead-lag transform.
Formulas follow standard, widely published technical-analysis definitions where one exists. Where a formula's own academic paper is the source instead, or where a candidate indicator turned out to have no single agreed-on formula across implementations, the docstring says which and why.
Why another TA library
- Broad on purpose. 127 indicators across 8 categories (moving averages, oscillators, volatility, trend, volume, statistics) — not just the popular dozen.
- Classic and modern, both formula-verified. Every indicator — whether it is RSI or a MODWT wavelet-variance decomposition — cites what its formula was checked against, and a proposed indicator with no single agreed-on formula across sources is declined outright rather than guessed at (documented in CHANGELOG.md either way).
- No build step. Every dependency ships prebuilt wheels, so
pip installjust works — everywhere, including on ARM Macs and in slim containers. - One contract, every indicator. Pass a
Series, an array or a list; get pandas back with your index intact and the same length as your input. Warm-up bars areNaN, never trimmed, so nothing silently shifts under a backtest. - Two ways to call it. A functional API and a
.ztaDataFrame accessor that routes to the exact same code — verified equal by tests, not by convention. - Documented honestly. Every indicator's page states its pitfalls, including where an output contains look-ahead information and what to do about it.
- Measured, not assumed, performance. Every indicator is benchmarked at up to 1M bars, with real numbers and methodology in BENCHMARKS.md — most complete in low milliseconds even at that size.
Install
pip install zeon-ta
Or install the latest commit straight from GitHub, ahead of the next release:
pip install git+https://github.com/selimozbas/zeon-ta.git
Or clone and install locally:
git clone https://github.com/selimozbas/zeon-ta.git
cd zeon-ta
pip install .
Requires Python 3.12+.
Quick start
import pandas as pd
import zeonta
df = pd.read_csv('ohlcv.csv', parse_dates=['date']).set_index('date')
# Functional
rsi = zeonta.rsi(df['close'], length=14)
bands = zeonta.bbands(df['close'], length=20, std=2)
# Accessor — identical results
rsi = df.zta.rsi(length=14)
trend = df.zta.supertrend(length=10, multiplier=3)
# Discover everything that is available
print(zeonta.list_indicators())
More in examples/, runnable directly against a committed sample dataset.
Output contract
| Input | Output |
|---|---|
pd.Series |
Series / DataFrame with the same index |
np.ndarray or list |
Series / DataFrame with a RangeIndex |
Single-line indicators return a named Series; multi-line ones return a
DataFrame whose column names carry the settings used (RSI_14,
MACD_12_26_9, SUPERT_10_3.0). ichimoku additionally returns the part of
the cloud that projects past the last bar, rather than discarding it.
Documentation
The full indicator reference — 127 indicators across 8 categories, each with its formula, parameters, worked examples and (where one exists) the external source it was verified against — is published at:
https://selimozbas.github.io/zeon-ta/
It's generated straight from the code and from actually running every
example (see tools/gen_docs.py), so it never drifts out of sync with what's
installed. Browse it locally under docs/ instead if you'd
rather not leave the repo.
zeonta.cross_asset.wavelet_lead_lag(close_a, close_b, period=20) compares
two independent price series — which one is leading the other, and by how
much, at a chosen timescale — via a causal Morlet Cross-Wavelet Transform
(Torrence & Compo, 1998). It isn't in list_indicators() or the .zta
accessor: every registered indicator assumes one asset's own OHLCV columns,
and a second, independent series doesn't fit that contract. Import and call
it directly; see its own docstring for the full method and a documented
lag-estimate caveat.
Roadmap
No fixed release calendar — see ROADMAP.md for the current direction (more indicator sources, an optional acceleration path, backtest-engine integration examples) and what's deliberately out of scope.
Development
pip install -e ".[dev]"
pytest # test suite
ruff check . && mypy src/ # lint and types
python tools/gen_docs.py # regenerate the docs
Documentation is generated: prose lives in tools/docs_content.py, while
parameter tables, column names and example output are taken from the code
itself and from actually running each example. A test fails if the committed
files drift.
See CONTRIBUTING.md for the full workflow, and docs/methodology.md for how a formula gets verified before it's implemented. This project follows a Code of Conduct; see SECURITY.md to report a vulnerability privately.
License
MIT — see LICENSE.
Metadata
Release files for zeon-ta 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| zeon_ta-0.3.1.tar.gz | 292.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zeon_ta-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 418.3 kB
Release files / zeon_ta-0.3.1.tar.gz
| Download URL | zeon_ta-0.3.1.tar.gz |
|---|---|
| Size | 292.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ee8aff2c502916f8723c020b43e3c234c4c9d948482f0b14714cb2803da6de6f
|
|
BLAKE2b-256 checksum How to use checksums |
d984df902e7a207966ac0451d1da235534c4370a258058da94da32c6aa5b1bf2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.
Transparency logRelease files / zeon_ta-0.3.1-py3-none-any.whl
| Download URL | zeon_ta-0.3.1-py3-none-any.whl |
|---|---|
| Size | 126.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1e32b71b51bcb2f38a4f019a1421c49250b20d963d736ecc51d205ea2ae0cdb8
|
|
BLAKE2b-256 checksum How to use checksums |
7d0d856c6f6c7d43ee67475029f1e6862eb45738610aa20e44088563ddb07990
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.
Transparency log