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
Not on PyPI yet — install straight from GitHub:
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.
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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zeon_ta-0.3.0.tar.gz.
File metadata
- Download URL: zeon_ta-0.3.0.tar.gz
- Upload date:
- Size: 285.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f31a411eec741a187341148103ccacb3f873252ecd9c9423859087bf22c111f8
|
|
| MD5 |
2622b57acc0c9ef4db52c459eedd293c
|
|
| BLAKE2b-256 |
516f23fd84557f58d4049abcc7ee60e9e0e733aa482b078db60197734b6c3e59
|
Provenance
The following attestation bundles were made for zeon_ta-0.3.0.tar.gz:
Publisher:
publish.yml on selimozbas/zeon-ta
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zeon_ta-0.3.0.tar.gz -
Subject digest:
f31a411eec741a187341148103ccacb3f873252ecd9c9423859087bf22c111f8 - Sigstore transparency entry: 2655755727
- Sigstore integration time:
-
Permalink:
selimozbas/zeon-ta@2008c97af3391d05faf3fbac648a5adcf0d3a304 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/selimozbas
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2008c97af3391d05faf3fbac648a5adcf0d3a304 -
Trigger Event:
push
-
Statement type:
File details
Details for the file zeon_ta-0.3.0-py3-none-any.whl.
File metadata
- Download URL: zeon_ta-0.3.0-py3-none-any.whl
- Upload date:
- Size: 124.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a18cefc103c239d8537dfcdb5b661fec8c3e4e367cb7bdf85ece2292b0797e7
|
|
| MD5 |
373fc773bcbcd2a204714381411fe8f4
|
|
| BLAKE2b-256 |
508ab2c7e6a543745a27159b326aaf9bb7b6e420e0a89e4a480e59c421726e63
|
Provenance
The following attestation bundles were made for zeon_ta-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on selimozbas/zeon-ta
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zeon_ta-0.3.0-py3-none-any.whl -
Subject digest:
9a18cefc103c239d8537dfcdb5b661fec8c3e4e367cb7bdf85ece2292b0797e7 - Sigstore transparency entry: 2655755750
- Sigstore integration time:
-
Permalink:
selimozbas/zeon-ta@2008c97af3391d05faf3fbac648a5adcf0d3a304 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/selimozbas
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2008c97af3391d05faf3fbac648a5adcf0d3a304 -
Trigger Event:
push
-
Statement type: