Metadata-Version: 2.5
Name: zeon-ta
Version: 0.3.0
Summary: Modern, dependency-light technical analysis indicators for Python.
Project-URL: Homepage, https://github.com/selimozbas/zeon-ta
Project-URL: Documentation, https://selimozbas.github.io/zeon-ta/
Project-URL: Repository, https://github.com/selimozbas/zeon-ta
Project-URL: Changelog, https://github.com/selimozbas/zeon-ta/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/selimozbas/zeon-ta/issues
Author-email: Selim Ozbas <selimozbas@gmail.com>
License: MIT License
        
        Copyright (c) 2026 Selim Ozbas
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
License-File: LICENSE
Keywords: finance,indicators,pandas,quant,ta,technical-analysis,trading
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Office/Business :: Financial :: Investment
Classifier: Typing :: Typed
Requires-Python: >=3.12
Requires-Dist: numpy>=2.5
Requires-Dist: pandas>=3.0
Requires-Dist: pywavelets>=1.9
Provides-Extra: dev
Requires-Dist: build; extra == 'dev'
Requires-Dist: mypy>=1.8; extra == 'dev'
Requires-Dist: pandas-stubs; extra == 'dev'
Requires-Dist: pytest-cov>=4.1; extra == 'dev'
Requires-Dist: pytest>=7.4; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Requires-Dist: twine; extra == 'dev'
Description-Content-Type: text/markdown

# zeon-ta

[![CI](https://github.com/selimozbas/zeon-ta/actions/workflows/ci.yml/badge.svg)](https://github.com/selimozbas/zeon-ta/actions/workflows/ci.yml)
[![Python](https://img.shields.io/badge/python-3.12%2B-blue)](pyproject.toml)
[![License](https://img.shields.io/github/license/selimozbas/zeon-ta)](LICENSE)

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](CHANGELOG.md) either way).
- **No build step.** Every dependency ships prebuilt wheels, so `pip install`
  just 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 are `NaN`, never trimmed, so nothing silently shifts under a backtest.
- **Two ways to call it.** A functional API and a `.zta` DataFrame 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](BENCHMARKS.md)
  — most complete in low milliseconds even at that size.

## Install

Not on PyPI yet — install straight from GitHub:

```bash
pip install git+https://github.com/selimozbas/zeon-ta.git
```

Or clone and install locally:

```bash
git clone https://github.com/selimozbas/zeon-ta.git
cd zeon-ta
pip install .
```

Requires Python 3.12+.

## Quick start

```python
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/](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/](docs/index.md) 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

```bash
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](CONTRIBUTING.md) for the full workflow, and
[docs/methodology.md](docs/methodology.md) for how a formula gets
verified before it's implemented. This project follows a
[Code of Conduct](CODE_OF_CONDUCT.md); see [SECURITY.md](SECURITY.md) to
report a vulnerability privately.

## License

MIT — see [LICENSE](LICENSE).
