centaur_technical_indicators 1.2.2__tar.gz → 1.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- centaur_technical_indicators-1.3.1/.github/pull_request_template.md +26 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/.github/workflows/CI.yml +2 -0
- centaur_technical_indicators-1.3.1/AGENTS.md +152 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/CHANGELOG.md +53 -1
- centaur_technical_indicators-1.3.1/CLAUDE.md +21 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/Cargo.lock +17 -49
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/Cargo.toml +4 -3
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/PKG-INFO +32 -15
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/README.md +24 -12
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/ai-policy.yaml +1 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/pyproject.toml +9 -2
- centaur_technical_indicators-1.3.1/python/centaur_technical_indicators/__init__.py +35 -0
- centaur_technical_indicators-1.3.1/python/centaur_technical_indicators/__init__.pyi +16 -0
- centaur_technical_indicators-1.3.1/python/centaur_technical_indicators/candle_indicators.pyi +39 -0
- centaur_technical_indicators-1.3.1/python/centaur_technical_indicators/chart_trends.pyi +11 -0
- centaur_technical_indicators-1.3.1/python/centaur_technical_indicators/correlation_indicators.pyi +11 -0
- centaur_technical_indicators-1.3.1/python/centaur_technical_indicators/momentum_indicators.pyi +71 -0
- centaur_technical_indicators-1.3.1/python/centaur_technical_indicators/moving_average.pyi +15 -0
- centaur_technical_indicators-1.3.1/python/centaur_technical_indicators/other_indicators.pyi +25 -0
- centaur_technical_indicators-1.3.1/python/centaur_technical_indicators/py.typed +0 -0
- centaur_technical_indicators-1.3.1/python/centaur_technical_indicators/strength_indicators.pyi +21 -0
- centaur_technical_indicators-1.3.1/python/centaur_technical_indicators/trend_indicators.pyi +39 -0
- centaur_technical_indicators-1.3.1/python/centaur_technical_indicators/volatility_indicators.pyi +13 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/src/candle_indicators.rs +34 -28
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/src/chart_trends.rs +48 -5
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/src/correlation_indicators.rs +6 -4
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/src/lib.rs +77 -13
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/src/momentum_indicators.rs +66 -37
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/src/moving_average.rs +10 -14
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/src/other_indicators.rs +15 -9
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/src/strength_indicators.rs +12 -15
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/src/trend_indicators.rs +16 -13
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/src/volatility_indicators.rs +4 -3
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/test_requirements.txt +2 -2
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/tests/test_candle_indicators.py +6 -0
- centaur_technical_indicators-1.3.1/tests/test_chart_trends.py +94 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/tests/test_momentum_indicators.py +6 -0
- centaur_technical_indicators-1.3.1/tests/test_package_layout.py +47 -0
- centaur_technical_indicators-1.3.1/tests/test_string_aliases.py +60 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/tests/test_trend_indicators.py +11 -0
- centaur_technical_indicators-1.2.2/.github/pull_request_template.md +0 -18
- centaur_technical_indicators-1.2.2/AGENTS.md +0 -114
- centaur_technical_indicators-1.2.2/docs/REPO_MAP.md +0 -72
- centaur_technical_indicators-1.2.2/tests/test_chart_trends.py +0 -58
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/.github/CODEOWNERS +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/.github/workflows/python-package.yml +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/.gitignore +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/CODE_OF_CONDUCT.md +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/CONTRIBUTING.md +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/LICENSE-MIT +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/SECURITY.md +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/assets/pytechnicalindicators_banner.png +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/requirements.txt +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/tests/test_correlation_indicators.py +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/tests/test_moving_average.py +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/tests/test_other_indicators.py +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/tests/test_strength_indicators.py +0 -0
- {centaur_technical_indicators-1.2.2 → centaur_technical_indicators-1.3.1}/tests/test_volatility_indicators.py +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
- What changed?
|
|
3
|
+
- Why was this change needed?
|
|
4
|
+
|
|
5
|
+
## Scope
|
|
6
|
+
- Files/modules touched:
|
|
7
|
+
- Intentionally left untouched:
|
|
8
|
+
|
|
9
|
+
## Compatibility
|
|
10
|
+
- User-facing Python API impact:
|
|
11
|
+
- Migration notes (if any):
|
|
12
|
+
|
|
13
|
+
## Validation
|
|
14
|
+
- [ ] `maturin develop` (bindings compile cleanly)
|
|
15
|
+
- [ ] `python -m pytest` (all tests pass)
|
|
16
|
+
- [ ] `cargo fmt --all -- --check` (no formatting diffs)
|
|
17
|
+
|
|
18
|
+
Command output summary (paste the pytest `N passed` line and any gate output):
|
|
19
|
+
|
|
20
|
+
## Changelog
|
|
21
|
+
- [ ] `CHANGELOG.md` updated under `## [Unreleased]` for user-facing changes (or exempt — non-user-facing)
|
|
22
|
+
- Entry summary:
|
|
23
|
+
|
|
24
|
+
## Flagged / notes
|
|
25
|
+
- Out-of-scope issues, surprises, or blockers:
|
|
26
|
+
- AI assistance disclosed (per `CONTRIBUTING.md`):
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
Guidance for coding agents working in this repository. This file is the
|
|
4
|
+
authoritative source for the repo's standing conventions — pre-PR gates,
|
|
5
|
+
branch/commit format, PR shape, scope discipline, stop-and-report, changelog
|
|
6
|
+
coupling, and worktree isolation. Task briefs defer to it and record only what is
|
|
7
|
+
specific to the task.
|
|
8
|
+
|
|
9
|
+
## Project at a glance
|
|
10
|
+
- **Repo type:** Python package with a Rust core exposed via PyO3/maturin.
|
|
11
|
+
- **Primary goal:** Keep Python bindings stable while preserving Rust-side correctness and performance.
|
|
12
|
+
- **Main source directories:**
|
|
13
|
+
- `src/` → Rust implementation + Python bindings
|
|
14
|
+
- `tests/` → Python-facing smoke/behavior tests for bindings
|
|
15
|
+
|
|
16
|
+
## Docs to review before coding
|
|
17
|
+
- `docs/REPO_MAP.md`
|
|
18
|
+
- `CONTRIBUTING.md`
|
|
19
|
+
|
|
20
|
+
## Recommended workflow
|
|
21
|
+
1. **Set up an isolated environment**
|
|
22
|
+
```bash
|
|
23
|
+
python -m venv .venv
|
|
24
|
+
source .venv/bin/activate
|
|
25
|
+
python -m pip install --upgrade pip
|
|
26
|
+
pip install -r test_requirements.txt
|
|
27
|
+
```
|
|
28
|
+
2. **Build extension module**
|
|
29
|
+
```bash
|
|
30
|
+
maturin develop
|
|
31
|
+
```
|
|
32
|
+
3. **Run tests**
|
|
33
|
+
```bash
|
|
34
|
+
python -m pytest
|
|
35
|
+
```
|
|
36
|
+
4. **Check formatting**
|
|
37
|
+
```bash
|
|
38
|
+
cargo fmt --all -- --check
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
These feed the canonical **Pre-PR quality gates** below.
|
|
42
|
+
|
|
43
|
+
## What to change (and where)
|
|
44
|
+
- Add/update indicator logic in the relevant Rust module under `src/`.
|
|
45
|
+
- Keep API exposure and types consistent through `src/lib.rs`.
|
|
46
|
+
- Add/adjust Python tests in matching files under `tests/`.
|
|
47
|
+
- Update docs (`README.md`) and the changelog when behavior or API changes (see **Changelog coupling**).
|
|
48
|
+
- Touching an indicator module (`src/*_indicators.rs`, `src/chart_trends.rs`, `src/moving_average.rs`, …) also requires running the companion benchmark — see `ai-policy.yaml` and `CONTRIBUTING.md`.
|
|
49
|
+
|
|
50
|
+
## Coding expectations
|
|
51
|
+
- Preserve the existing **bulk/single** API pattern for indicators.
|
|
52
|
+
- Prefer small, focused diffs over large refactors.
|
|
53
|
+
- Keep naming and argument conventions consistent with neighboring functions.
|
|
54
|
+
- Surface all errors to Python as `PyValueError`, with clear, user-facing messages for invalid inputs.
|
|
55
|
+
|
|
56
|
+
## Change scope discipline
|
|
57
|
+
- Keep changes minimal and focused on the requested task.
|
|
58
|
+
- Do not include opportunistic refactors unless explicitly requested.
|
|
59
|
+
- If you identify unrelated issues, note them separately instead of bundling them into the same change.
|
|
60
|
+
- Preserve existing file organization and naming conventions unless the task requires a structural change.
|
|
61
|
+
- **Stage only the files the task names; never `git add .`.** Never commit untracked planning/scratch docs (`PLAN.md`, `*_BRIEF.md`, `RESUME.md`).
|
|
62
|
+
- Never hand-edit generated artifacts or test expectations to make a gate pass — `Cargo.lock` is regenerated by the build, and a test value that needs changing is a signal to **stop and report**, not to edit the expectation.
|
|
63
|
+
|
|
64
|
+
## Backward compatibility rules
|
|
65
|
+
When changing public Python APIs, preserve compatibility unless the task explicitly allows a breaking change:
|
|
66
|
+
|
|
67
|
+
1. Do not silently change indicator semantics, output ordering, or warmup behavior.
|
|
68
|
+
2. Do not remove or rename public functions, types, enums, or parameters without explicit approval.
|
|
69
|
+
3. If behavior changes are required, document them in docstrings and `CHANGELOG.md` with clear migration notes.
|
|
70
|
+
|
|
71
|
+
## Branch & commit conventions
|
|
72
|
+
- **Branches:** cut every branch off the latest `origin/main`; never commit on `main`. Name them `<type>/<kebab-slug>`, where `<type>` is a conventional-commit type (`feat`, `fix`, `chore`, `docs`, `ci`, `test`, `style`, `refactor`, `perf`) — e.g. `chore/bump-cti-1.3.0`, `docs/string-aliases`, `ci/add-fmt-check`. First push is `git push -u origin <branch>`.
|
|
73
|
+
- **Commit subjects:** use a conventional-commit prefix (`feat:`, `fix:`, `chore:`, `docs:`, `ci:`, `test:`, `style:`, …), under 72 characters.
|
|
74
|
+
- **Trailer:** end every commit authored with Claude Code with:
|
|
75
|
+
```text
|
|
76
|
+
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
|
77
|
+
```
|
|
78
|
+
This is the canonical trailer for Claude-authored commits; existing lowercase `Co-authored-by:` lines for human or bot co-authors are unaffected.
|
|
79
|
+
|
|
80
|
+
## Pre-PR quality gates (must pass)
|
|
81
|
+
Run all three inside the repo's `.venv` (the `maturin`/`pytest` binaries are not on `PATH`), in order — `pytest` only passes after a successful `maturin develop`:
|
|
82
|
+
|
|
83
|
+
1. `maturin develop` — bindings compile and install into the active venv
|
|
84
|
+
2. `python -m pytest` — all tests pass (the pass signal is the `N passed` line; paste it into the PR)
|
|
85
|
+
3. `cargo fmt --all -- --check` — no formatting diffs
|
|
86
|
+
|
|
87
|
+
Notes:
|
|
88
|
+
- **clippy is intentionally parked** — do not add a clippy gate without maintainer approval.
|
|
89
|
+
- CI enforces all three gates: `.github/workflows/CI.yml`'s `verify` job runs `cargo fmt --all -- --check` (first), then `maturin develop --release` and `python -m pytest`; `python-package.yml` runs the pytest matrix across Python versions. `cargo fmt` is a CI gate, not local-only. If tests are skipped for environmental reasons, say why.
|
|
90
|
+
|
|
91
|
+
## Stop-and-report
|
|
92
|
+
Stop and report — do not work around, guess, or paper over — when:
|
|
93
|
+
- a pre-PR gate fails unexpectedly, or a test expectation shifts in a way you can't explain;
|
|
94
|
+
- `cargo fmt` produces a change you can't explain as pure formatting (e.g. an rustfmt version skew);
|
|
95
|
+
- the brief or instructions conflict with the repo's actual state.
|
|
96
|
+
|
|
97
|
+
Surface drift between docs and code rather than silently fixing it. Treat governing docs — CI workflows, licensing, security, and contributor-governance files (`CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `SECURITY.md`) — as read-only unless the task explicitly authorizes editing them.
|
|
98
|
+
|
|
99
|
+
## Worktree & isolation
|
|
100
|
+
For parallel or batched work (e.g. running multiple slice briefs):
|
|
101
|
+
- one task per git worktree, cut off fresh `origin/main`;
|
|
102
|
+
- **each worktree gets its own `.venv`** — a shared venv's installed extension gets clobbered by concurrent `maturin develop` runs;
|
|
103
|
+
- when two batches touch the same files, rebase the later one on its predecessor before merge;
|
|
104
|
+
- PRs target `main`; there is no separate long-lived integration branch (the release cut promotes `## [Unreleased]` to the next version).
|
|
105
|
+
|
|
106
|
+
## Changelog coupling
|
|
107
|
+
- Every **user-facing** change adds an entry under the existing `## [Unreleased]` heading in `CHANGELOG.md`, using Keep a Changelog categories (Added / Changed / Deprecated / Removed / Fixed / Security). Do not add a second `[Unreleased]` heading or hand-cut a version header in a feature branch — the release cut promotes `[Unreleased]` to the next version.
|
|
108
|
+
- **Exception:** formatting-only or otherwise non-user-facing changes (e.g. a `cargo fmt` baseline, or docs such as this file) get **no** changelog entry.
|
|
109
|
+
|
|
110
|
+
## CI implementation policy
|
|
111
|
+
- Prefer native Python/maturin/cargo commands in workflows.
|
|
112
|
+
- Do not introduce third-party GitHub Actions unless explicitly approved by maintainers.
|
|
113
|
+
|
|
114
|
+
## Core-crate version & source of truth
|
|
115
|
+
- The binding wraps the published crates.io crate `centaur_technical_indicators`; that core-crate version is the source of truth, and `[package] version` in `Cargo.toml` is normally bumped to match it (see `docs/REPO_MAP.md` for the full rule).
|
|
116
|
+
- `[package] version` need **not** always equal the core-crate version. A **binding-only patch release** — one that changes only the bindings/tooling (e.g. the 1.3.1 security patch: PyO3 and test-tooling bumps, no core-crate code) — may move `[package] version` ahead while the `centaur_technical_indicators` dependency stays put. The version-match rule above is the default; binding-only patches are the documented exception. *(Example: 1.3.1 ships `[package] version = 1.3.1` against core crate `1.3.0`.)*
|
|
117
|
+
|
|
118
|
+
## Pull request checklist for agents
|
|
119
|
+
- [ ] Scope is minimal and matches the task; only the named files changed.
|
|
120
|
+
- [ ] Rust bindings compile (`maturin develop`).
|
|
121
|
+
- [ ] Tests pass (or skips are documented).
|
|
122
|
+
- [ ] `cargo fmt --all -- --check` clean.
|
|
123
|
+
- [ ] Changelog updated under `## [Unreleased]` (or exempt — see Changelog coupling).
|
|
124
|
+
- [ ] Commit message uses a conventional prefix and the Co-Authored-By trailer.
|
|
125
|
+
- [ ] AI assistance disclosed in the PR description (per `CONTRIBUTING.md`).
|
|
126
|
+
|
|
127
|
+
## Required PR summary format
|
|
128
|
+
Use this structure in the PR description (mirrors `.github/pull_request_template.md`):
|
|
129
|
+
|
|
130
|
+
1. **Summary** — what changed and why.
|
|
131
|
+
2. **Scope** — files/modules touched, and what was intentionally left untouched.
|
|
132
|
+
3. **Compatibility** — user-facing behavior/API impact, or explicit "N/A".
|
|
133
|
+
4. **Validation** — paste the actual gate output (`maturin develop`, the pytest `N passed` line, `cargo fmt --all -- --check`).
|
|
134
|
+
5. **Changelog** — the exact `CHANGELOG.md` entry added/updated (or "exempt — non-user-facing").
|
|
135
|
+
|
|
136
|
+
Also note anything **flagged** — out-of-scope issues noticed, surprises, or blockers — and disclose AI assistance (per `CONTRIBUTING.md`).
|
|
137
|
+
|
|
138
|
+
## Repository expectations
|
|
139
|
+
- This is a public Python/Rust library. Prioritize correctness, determinism, and backward compatibility.
|
|
140
|
+
- Prefer minimal, focused diffs over broad refactors.
|
|
141
|
+
- Do not add new dependencies unless explicitly requested.
|
|
142
|
+
- Treat public APIs, documented behavior, and examples as stability-sensitive.
|
|
143
|
+
|
|
144
|
+
## Review guidelines
|
|
145
|
+
- Flag breaking API changes.
|
|
146
|
+
- Flag silent behavior changes in indicator calculations or defaults.
|
|
147
|
+
- Flag documentation drift when public behavior changes.
|
|
148
|
+
- Flag unnecessary allocations or obvious performance regressions in hot paths.
|
|
149
|
+
|
|
150
|
+
## Change boundaries
|
|
151
|
+
- Do not modify CI, licensing, security, or contributor-governance files unless explicitly requested.
|
|
152
|
+
- Keep unrelated formatting churn to a minimum.
|
|
@@ -6,7 +6,59 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
## [
|
|
9
|
+
## [1.3.1] - 2026-06-21
|
|
10
|
+
|
|
11
|
+
### Security
|
|
12
|
+
- Bumped test-only tooling: pytest 8.4.1 → 9.0.3 (resolves GHSA-6w46-j5rx-g56g, vulnerable tmpdir
|
|
13
|
+
handling) and Pygments 2.19.2 → 2.20.0 (resolves GHSA-5239-wwwm-4pmq, ReDoS in the GUID-matching
|
|
14
|
+
regex). Development/CI dependencies only — no runtime or API impact on the installed package.
|
|
15
|
+
- Bumped PyO3 from 0.25 to 0.29, resolving GHSA-36hh-v3qg-5jq4 (out-of-bounds read in the
|
|
16
|
+
`nth`/`nth_back` iterators of `PyList`/`PyTuple`) and GHSA-chgr-c6px-7xpp (missing `Sync` bound
|
|
17
|
+
on `PyCFunction::new_closure`). Neither vulnerable path is exercised by these bindings; the bump
|
|
18
|
+
clears both advisories at the dependency level.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- Declared `rust-version = "1.83"` in `Cargo.toml` — the minimum supported Rust the PyO3 0.29
|
|
22
|
+
bump requires (no impact on prebuilt wheels; relevant only when building from source).
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## [1.3.0] - 2026-06-20
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
- Incorrect `Documentation` URL in package metadata (pointed at the GitHub wiki).
|
|
30
|
+
- README quick-start example called `cti.moving_average(...)` (a submodule, not callable)
|
|
31
|
+
instead of `cti.moving_average.single.moving_average(...)`.
|
|
32
|
+
- Docstring keyword-name mismatches that could raise `TypeError` (`supertrend`
|
|
33
|
+
`constant_type_model` → `constant_model_type`; `true_range` `previous_close` → `close`).
|
|
34
|
+
- README "Available Indicators" / "Library Structure" drift and benchmark-vs-list inconsistency.
|
|
35
|
+
- Inherited Rust 1.3.0 behavior changes, now user-visible through the bindings:
|
|
36
|
+
`chart_trends.peaks` / `chart_trends.valleys` corrected for index-0 and
|
|
37
|
+
retained-after-monotonic-run extrema; and `aroon_up` / `aroon_down` /
|
|
38
|
+
`stochastic_oscillator` return `NaN` instead of panicking on all-NaN input.
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
- Python regression tests for inherited Rust 1.3.0 chart-trend / degenerate-input fixes.
|
|
42
|
+
- `chart_trends.peak_favorable_move` and `chart_trends.valley_favorable_move` bindings (maximum
|
|
43
|
+
favorable excursion over a forward window), mirroring Rust 1.3.0.
|
|
44
|
+
- `cargo fmt --check` step to CI (the `verify` job in `CI.yml`).
|
|
45
|
+
- `docs/2.0.0.md` breaking-change backlog.
|
|
46
|
+
- Tests pinning accepted model-type / deviation-model / moving-average-type string aliases.
|
|
47
|
+
- Documentation of the full accepted string-alias set for each regime (incl. the `sma`→Smoothed
|
|
48
|
+
/ `ma`→Simple aliases), with `from_string` error messages reconciled to match.
|
|
49
|
+
- README scope note: statistical primitives (the Rust `basic_indicators` surface) are
|
|
50
|
+
intentionally not re-bound.
|
|
51
|
+
- Type stubs (`.pyi`) and a `py.typed` marker (PEP 561 inline typing) for the full API surface.
|
|
52
|
+
- `__version__` on the top-level package, resolved via `importlib.metadata`.
|
|
53
|
+
- Mixed package layout with a hand-authored `__init__.py` (adopts maturin `python-source`).
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
- Updated `centaur_technical_indicators` Rust crate dependency from `1.2.2` to `1.3.0`.
|
|
57
|
+
- Expanded PyPI classifiers to declare Python 3.10–3.14.
|
|
58
|
+
- Updated ecosystem naming from "Centaur Capital" to "CRT (Centaur Research & Technologies)"
|
|
59
|
+
and the legacy `centaurlabs.pages.dev` documentation link.
|
|
60
|
+
- Adjusted the indicator-count claim from "60+" to "50+".
|
|
61
|
+
- Exclude internal `docs/` from the source distribution (sdist).
|
|
10
62
|
|
|
11
63
|
## [1.2.2] - 2026-04-04
|
|
12
64
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
Claude Code operating notes for this repo. **[`AGENTS.md`](AGENTS.md) is
|
|
4
|
+
canonical** for every standing convention — pre-PR gates, branch/commit format,
|
|
5
|
+
PR shape, scope discipline, stop-and-report, changelog coupling, and worktree
|
|
6
|
+
isolation. This file adds only the Claude-Code-facing bits for running a slice; it
|
|
7
|
+
does not repeat `AGENTS.md`.
|
|
8
|
+
|
|
9
|
+
## Running a slice
|
|
10
|
+
- Work is organized as slice briefs (`S*_BRIEF.md`) tracked by `PLAN.md`. `PLAN.md` is the planning channel — implement against the briefs; do not edit `PLAN.md`.
|
|
11
|
+
- Read order at session start: the slice brief (it is self-contained) → `AGENTS.md` (standing conventions). You don't need to read `PLAN.md` to execute a self-contained brief.
|
|
12
|
+
- **One slice per session**, in its **own git worktree with its own `.venv`** (per `AGENTS.md` → Worktree & isolation).
|
|
13
|
+
|
|
14
|
+
## Effort
|
|
15
|
+
Set the session effort from the brief's `Effort:` line (`low` / `medium` / `high`) with `/effort <level>`.
|
|
16
|
+
|
|
17
|
+
## Plan before auto-editing
|
|
18
|
+
For a non-trivial slice, plan before editing — use plan mode before auto-applying changes. Honor the stop-and-report rule in `AGENTS.md`: when a gate fails unexpectedly or a test value shifts, stop and report rather than working around it.
|
|
19
|
+
|
|
20
|
+
## Running the gates
|
|
21
|
+
Inside the worktree's `.venv`: `maturin develop` → `python -m pytest` (pass signal `N passed`) → `cargo fmt --all -- --check`. Full gate definitions and the CI-divergence note live in `AGENTS.md`.
|
|
@@ -3,52 +3,31 @@
|
|
|
3
3
|
version = 4
|
|
4
4
|
|
|
5
5
|
[[package]]
|
|
6
|
-
name = "
|
|
7
|
-
version = "1.
|
|
6
|
+
name = "centaur_technical_indicators"
|
|
7
|
+
version = "1.3.0"
|
|
8
8
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
9
|
-
checksum = "
|
|
9
|
+
checksum = "41f1d42ebb4f20df394539be4afd1a21f69a6f18c7ab9ae3a8eaeac7929e1bfb"
|
|
10
10
|
|
|
11
11
|
[[package]]
|
|
12
12
|
name = "centaur_technical_indicators"
|
|
13
|
-
version = "1.
|
|
13
|
+
version = "1.3.1"
|
|
14
14
|
dependencies = [
|
|
15
|
-
"centaur_technical_indicators 1.
|
|
15
|
+
"centaur_technical_indicators 1.3.0",
|
|
16
16
|
"pyo3",
|
|
17
17
|
]
|
|
18
18
|
|
|
19
|
-
[[package]]
|
|
20
|
-
name = "centaur_technical_indicators"
|
|
21
|
-
version = "1.2.2"
|
|
22
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
23
|
-
checksum = "24ae4cb5750fab3c9d2ae9be158158df08bb4b052c6e5c398885be57e0590be9"
|
|
24
|
-
|
|
25
19
|
[[package]]
|
|
26
20
|
name = "heck"
|
|
27
21
|
version = "0.5.0"
|
|
28
22
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
29
23
|
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
|
30
24
|
|
|
31
|
-
[[package]]
|
|
32
|
-
name = "indoc"
|
|
33
|
-
version = "2.0.6"
|
|
34
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
35
|
-
checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd"
|
|
36
|
-
|
|
37
25
|
[[package]]
|
|
38
26
|
name = "libc"
|
|
39
27
|
version = "0.2.174"
|
|
40
28
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
41
29
|
checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
|
|
42
30
|
|
|
43
|
-
[[package]]
|
|
44
|
-
name = "memoffset"
|
|
45
|
-
version = "0.9.1"
|
|
46
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
47
|
-
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
|
|
48
|
-
dependencies = [
|
|
49
|
-
"autocfg",
|
|
50
|
-
]
|
|
51
|
-
|
|
52
31
|
[[package]]
|
|
53
32
|
name = "once_cell"
|
|
54
33
|
version = "1.21.3"
|
|
@@ -72,36 +51,32 @@ dependencies = [
|
|
|
72
51
|
|
|
73
52
|
[[package]]
|
|
74
53
|
name = "pyo3"
|
|
75
|
-
version = "0.
|
|
54
|
+
version = "0.29.0"
|
|
76
55
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
77
|
-
checksum = "
|
|
56
|
+
checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c"
|
|
78
57
|
dependencies = [
|
|
79
|
-
"indoc",
|
|
80
58
|
"libc",
|
|
81
|
-
"memoffset",
|
|
82
59
|
"once_cell",
|
|
83
60
|
"portable-atomic",
|
|
84
61
|
"pyo3-build-config",
|
|
85
62
|
"pyo3-ffi",
|
|
86
63
|
"pyo3-macros",
|
|
87
|
-
"unindent",
|
|
88
64
|
]
|
|
89
65
|
|
|
90
66
|
[[package]]
|
|
91
67
|
name = "pyo3-build-config"
|
|
92
|
-
version = "0.
|
|
68
|
+
version = "0.29.0"
|
|
93
69
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
94
|
-
checksum = "
|
|
70
|
+
checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078"
|
|
95
71
|
dependencies = [
|
|
96
|
-
"once_cell",
|
|
97
72
|
"target-lexicon",
|
|
98
73
|
]
|
|
99
74
|
|
|
100
75
|
[[package]]
|
|
101
76
|
name = "pyo3-ffi"
|
|
102
|
-
version = "0.
|
|
77
|
+
version = "0.29.0"
|
|
103
78
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
104
|
-
checksum = "
|
|
79
|
+
checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b"
|
|
105
80
|
dependencies = [
|
|
106
81
|
"libc",
|
|
107
82
|
"pyo3-build-config",
|
|
@@ -109,9 +84,9 @@ dependencies = [
|
|
|
109
84
|
|
|
110
85
|
[[package]]
|
|
111
86
|
name = "pyo3-macros"
|
|
112
|
-
version = "0.
|
|
87
|
+
version = "0.29.0"
|
|
113
88
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
114
|
-
checksum = "
|
|
89
|
+
checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771"
|
|
115
90
|
dependencies = [
|
|
116
91
|
"proc-macro2",
|
|
117
92
|
"pyo3-macros-backend",
|
|
@@ -121,13 +96,12 @@ dependencies = [
|
|
|
121
96
|
|
|
122
97
|
[[package]]
|
|
123
98
|
name = "pyo3-macros-backend"
|
|
124
|
-
version = "0.
|
|
99
|
+
version = "0.29.0"
|
|
125
100
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
126
|
-
checksum = "
|
|
101
|
+
checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362"
|
|
127
102
|
dependencies = [
|
|
128
103
|
"heck",
|
|
129
104
|
"proc-macro2",
|
|
130
|
-
"pyo3-build-config",
|
|
131
105
|
"quote",
|
|
132
106
|
"syn",
|
|
133
107
|
]
|
|
@@ -154,18 +128,12 @@ dependencies = [
|
|
|
154
128
|
|
|
155
129
|
[[package]]
|
|
156
130
|
name = "target-lexicon"
|
|
157
|
-
version = "0.13.
|
|
131
|
+
version = "0.13.5"
|
|
158
132
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
159
|
-
checksum = "
|
|
133
|
+
checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
|
|
160
134
|
|
|
161
135
|
[[package]]
|
|
162
136
|
name = "unicode-ident"
|
|
163
137
|
version = "1.0.18"
|
|
164
138
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
165
139
|
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
|
166
|
-
|
|
167
|
-
[[package]]
|
|
168
|
-
name = "unindent"
|
|
169
|
-
version = "0.2.4"
|
|
170
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
171
|
-
checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "centaur_technical_indicators"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.3.1"
|
|
4
4
|
edition = "2021"
|
|
5
|
+
rust-version = "1.83"
|
|
5
6
|
readme = "README.md"
|
|
6
7
|
|
|
7
8
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
@@ -10,5 +11,5 @@ name = "centaur_technical_indicators"
|
|
|
10
11
|
crate-type = ["cdylib"]
|
|
11
12
|
|
|
12
13
|
[dependencies]
|
|
13
|
-
pyo3 = "0.
|
|
14
|
-
centaur_technical_indicators = "1.
|
|
14
|
+
pyo3 = "0.29"
|
|
15
|
+
centaur_technical_indicators = "1.3.0"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: centaur_technical_indicators
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.1
|
|
4
4
|
Classifier: Development Status :: 5 - Production/Stable
|
|
5
5
|
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
6
6
|
Classifier: Topic :: Software Development :: Libraries
|
|
@@ -8,14 +8,19 @@ Classifier: Topic :: Office/Business :: Financial :: Investment
|
|
|
8
8
|
Classifier: License :: OSI Approved :: MIT License
|
|
9
9
|
Classifier: Programming Language :: Rust
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
11
16
|
License-File: LICENSE-MIT
|
|
12
|
-
Summary: A collection of
|
|
17
|
+
Summary: A collection of 50+ fully configurable technical indicators for financial analysis, powered by Rust and Python. Part of the CRT (Centaur Research & Technologies) ecosystem.
|
|
13
18
|
Keywords: finance,technical indicators,analysis,trading,python,rust,quantitative
|
|
14
19
|
Author-email: ChironMind <your@email.com>
|
|
15
20
|
Maintainer-email: ChironMind <your@email.com>
|
|
16
21
|
Requires-Python: >=3.10
|
|
17
22
|
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
18
|
-
Project-URL: Documentation, https://
|
|
23
|
+
Project-URL: Documentation, https://centaurtechnicalindicators-python.readthedocs.io/en/latest/
|
|
19
24
|
Project-URL: Homepage, https://github.com/chironmind/CentaurTechnicalIndicators-Python
|
|
20
25
|
Project-URL: Issues, https://github.com/chironmind/CentaurTechnicalIndicators-Python/issues
|
|
21
26
|
Project-URL: Source, https://github.com/chironmind/CentaurTechnicalIndicators-Python
|
|
@@ -33,9 +38,9 @@ Project-URL: Source, https://github.com/chironmind/CentaurTechnicalIndicators-Py
|
|
|
33
38
|
|
|
34
39
|
# Centaur Technical Indicators
|
|
35
40
|
|
|
36
|
-
A production-ready Python library providing
|
|
41
|
+
A production-ready Python library providing 50+ technical indicators for financial analysis, built on a high-performance Rust backend.
|
|
37
42
|
|
|
38
|
-
Part of the Centaur
|
|
43
|
+
Part of the CRT (Centaur Research & Technologies) ecosystem.
|
|
39
44
|
|
|
40
45
|
Looking for the Rust crate? See: [ChironMind/CentaurTechnicalIndicators-Rust](https://github.com/ChironMind/CentaurTechnicalIndicators-Rust)
|
|
41
46
|
|
|
@@ -58,7 +63,7 @@ import centaur_technical_indicators as cti
|
|
|
58
63
|
|
|
59
64
|
prices = [100.2, 100.46, 100.53, 100.38, 100.19]
|
|
60
65
|
|
|
61
|
-
ma = cti.moving_average(
|
|
66
|
+
ma = cti.moving_average.single.moving_average(
|
|
62
67
|
prices,
|
|
63
68
|
"simple"
|
|
64
69
|
)
|
|
@@ -116,9 +121,14 @@ $ pytest .
|
|
|
116
121
|
### Library Structure
|
|
117
122
|
|
|
118
123
|
- Modules based on their analysis areas (**`moving_average`**, **`momentum_indicators`**, **`strength_indicators`**...)
|
|
119
|
-
- `bulk`
|
|
124
|
+
- Most modules have both `bulk` and `single` sub-modules:
|
|
120
125
|
- `bulk`: Compute indicator over rolling periods, returns a list.
|
|
121
126
|
- `single`: Compute indicator for the entire list, returns a single value.
|
|
127
|
+
- **Exceptions (asymmetric shape):**
|
|
128
|
+
- `chart_trends` — flat module (no `single`/`bulk` sub-modules; functions are top-level).
|
|
129
|
+
- `volatility_indicators` — `volatility_system` is `bulk` only; `ulcer_index` has both.
|
|
130
|
+
- `other_indicators`, `strength_indicators`, and `trend_indicators` are asymmetric (not every
|
|
131
|
+
indicator has both variants).
|
|
122
132
|
- `types` used to personalise the technical indicators (**`moving_average_type`**, **`deviation_model`**, **`constant_model_type`**...)
|
|
123
133
|
|
|
124
134
|
---
|
|
@@ -138,29 +148,32 @@ $ pytest .
|
|
|
138
148
|
|
|
139
149
|
## 📈 Available Indicators
|
|
140
150
|
|
|
141
|
-
All indicators are grouped and split into modules based on their analysis area.
|
|
142
|
-
Each module has `bulk` (list output) and `single` (scalar output) functions.
|
|
151
|
+
All indicators are grouped and split into modules based on their analysis area.
|
|
143
152
|
|
|
144
153
|
### Candle Indicators
|
|
145
|
-
- Ichimoku Cloud, Moving Constant Bands/Envelopes, Donchian Channels, Keltner, Supertrend
|
|
154
|
+
- Ichimoku Cloud, Moving Constant Bands/Envelopes, Donchian Channels, Keltner, Supertrend,
|
|
155
|
+
McGinley Dynamic Envelopes, McGinley Dynamic Bands
|
|
146
156
|
|
|
147
157
|
### Chart Trends
|
|
148
|
-
- Trend break down, overall trends, peak/valley trends
|
|
158
|
+
- Trend break down, overall trends, peak/valley trends, peak favorable move, valley favorable move
|
|
149
159
|
|
|
150
160
|
### Correlation Indicators
|
|
151
161
|
- Correlate asset prices
|
|
152
162
|
|
|
153
163
|
### Momentum Indicators
|
|
154
|
-
- Chaikin Oscillator, CCI, MACD, Money Flow Index, On Balance Volume, ROC, RSI, Williams %R
|
|
164
|
+
- Chaikin Oscillator, CCI, MACD, Money Flow Index, On Balance Volume, ROC, RSI, Williams %R,
|
|
165
|
+
Stochastic Oscillator, Slow Stochastic, Slowest Stochastic, Percentage Price Oscillator (PPO),
|
|
166
|
+
Chande Momentum Oscillator (CMO), Signal Line (MACD signal),
|
|
167
|
+
McGinley Dynamic Commodity Channel Index, McGinley Dynamic MACD Line
|
|
155
168
|
|
|
156
169
|
### Moving Averages
|
|
157
170
|
- McGinley Dynamic, Moving Average
|
|
158
171
|
|
|
159
172
|
### Other Indicators
|
|
160
|
-
- ROI, True Range, ATR, Internal Bar Strength
|
|
173
|
+
- ROI, True Range, ATR, Internal Bar Strength, Positivity Indicator
|
|
161
174
|
|
|
162
175
|
### Strength Indicators
|
|
163
|
-
- Accumulation/Distribution, PVI, NVI, RVI
|
|
176
|
+
- Accumulation/Distribution, PVI, NVI, RVI, Volume Index
|
|
164
177
|
|
|
165
178
|
### Trend Indicators
|
|
166
179
|
- Aroon (Up/Down/Oscillator), Parabolic, DM, Volume-Price Trend, TSI
|
|
@@ -168,6 +181,10 @@ Each module has `bulk` (list output) and `single` (scalar output) functions.
|
|
|
168
181
|
### Volatility Indicators
|
|
169
182
|
- Ulcer Index, Volatility System
|
|
170
183
|
|
|
184
|
+
**Note on scope:** Statistical primitives available in Python's `statistics` / `math` modules
|
|
185
|
+
(the Rust `basic_indicators` surface) are intentionally not re-bound. Use the standard library
|
|
186
|
+
directly for those.
|
|
187
|
+
|
|
171
188
|
---
|
|
172
189
|
|
|
173
190
|
## 📊 Performance Benchmarks
|
|
@@ -248,7 +265,7 @@ This repository is part of a structured documentation suite:
|
|
|
248
265
|
- 📕 **Tutorials:** — [See here](https://centaurtechnicalindicators-python.readthedocs.io/en/latest/tutorials/)
|
|
249
266
|
- 📘 **How-To Guides:** — [See here](https://centaurtechnicalindicators-python.readthedocs.io/en/latest/howto/)
|
|
250
267
|
- ⏱️ **Benchmarks:** — [See here](https://centaurtechnicalindicators-python.readthedocs.io/en/latest/benchmarks/)
|
|
251
|
-
- 📙 **Explanations:** — [
|
|
268
|
+
- 📙 **Explanations:** — [tech.centaurresearchtechnologies.com](https://tech.centaurresearchtechnologies.com/)
|
|
252
269
|
- 📗 **Reference:** — [See here](https://centaurtechnicalindicators-python.readthedocs.io/en/latest/api/)
|
|
253
270
|
|
|
254
271
|
---
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
|
|
12
12
|
# Centaur Technical Indicators
|
|
13
13
|
|
|
14
|
-
A production-ready Python library providing
|
|
14
|
+
A production-ready Python library providing 50+ technical indicators for financial analysis, built on a high-performance Rust backend.
|
|
15
15
|
|
|
16
|
-
Part of the Centaur
|
|
16
|
+
Part of the CRT (Centaur Research & Technologies) ecosystem.
|
|
17
17
|
|
|
18
18
|
Looking for the Rust crate? See: [ChironMind/CentaurTechnicalIndicators-Rust](https://github.com/ChironMind/CentaurTechnicalIndicators-Rust)
|
|
19
19
|
|
|
@@ -36,7 +36,7 @@ import centaur_technical_indicators as cti
|
|
|
36
36
|
|
|
37
37
|
prices = [100.2, 100.46, 100.53, 100.38, 100.19]
|
|
38
38
|
|
|
39
|
-
ma = cti.moving_average(
|
|
39
|
+
ma = cti.moving_average.single.moving_average(
|
|
40
40
|
prices,
|
|
41
41
|
"simple"
|
|
42
42
|
)
|
|
@@ -94,9 +94,14 @@ $ pytest .
|
|
|
94
94
|
### Library Structure
|
|
95
95
|
|
|
96
96
|
- Modules based on their analysis areas (**`moving_average`**, **`momentum_indicators`**, **`strength_indicators`**...)
|
|
97
|
-
- `bulk`
|
|
97
|
+
- Most modules have both `bulk` and `single` sub-modules:
|
|
98
98
|
- `bulk`: Compute indicator over rolling periods, returns a list.
|
|
99
99
|
- `single`: Compute indicator for the entire list, returns a single value.
|
|
100
|
+
- **Exceptions (asymmetric shape):**
|
|
101
|
+
- `chart_trends` — flat module (no `single`/`bulk` sub-modules; functions are top-level).
|
|
102
|
+
- `volatility_indicators` — `volatility_system` is `bulk` only; `ulcer_index` has both.
|
|
103
|
+
- `other_indicators`, `strength_indicators`, and `trend_indicators` are asymmetric (not every
|
|
104
|
+
indicator has both variants).
|
|
100
105
|
- `types` used to personalise the technical indicators (**`moving_average_type`**, **`deviation_model`**, **`constant_model_type`**...)
|
|
101
106
|
|
|
102
107
|
---
|
|
@@ -116,29 +121,32 @@ $ pytest .
|
|
|
116
121
|
|
|
117
122
|
## 📈 Available Indicators
|
|
118
123
|
|
|
119
|
-
All indicators are grouped and split into modules based on their analysis area.
|
|
120
|
-
Each module has `bulk` (list output) and `single` (scalar output) functions.
|
|
124
|
+
All indicators are grouped and split into modules based on their analysis area.
|
|
121
125
|
|
|
122
126
|
### Candle Indicators
|
|
123
|
-
- Ichimoku Cloud, Moving Constant Bands/Envelopes, Donchian Channels, Keltner, Supertrend
|
|
127
|
+
- Ichimoku Cloud, Moving Constant Bands/Envelopes, Donchian Channels, Keltner, Supertrend,
|
|
128
|
+
McGinley Dynamic Envelopes, McGinley Dynamic Bands
|
|
124
129
|
|
|
125
130
|
### Chart Trends
|
|
126
|
-
- Trend break down, overall trends, peak/valley trends
|
|
131
|
+
- Trend break down, overall trends, peak/valley trends, peak favorable move, valley favorable move
|
|
127
132
|
|
|
128
133
|
### Correlation Indicators
|
|
129
134
|
- Correlate asset prices
|
|
130
135
|
|
|
131
136
|
### Momentum Indicators
|
|
132
|
-
- Chaikin Oscillator, CCI, MACD, Money Flow Index, On Balance Volume, ROC, RSI, Williams %R
|
|
137
|
+
- Chaikin Oscillator, CCI, MACD, Money Flow Index, On Balance Volume, ROC, RSI, Williams %R,
|
|
138
|
+
Stochastic Oscillator, Slow Stochastic, Slowest Stochastic, Percentage Price Oscillator (PPO),
|
|
139
|
+
Chande Momentum Oscillator (CMO), Signal Line (MACD signal),
|
|
140
|
+
McGinley Dynamic Commodity Channel Index, McGinley Dynamic MACD Line
|
|
133
141
|
|
|
134
142
|
### Moving Averages
|
|
135
143
|
- McGinley Dynamic, Moving Average
|
|
136
144
|
|
|
137
145
|
### Other Indicators
|
|
138
|
-
- ROI, True Range, ATR, Internal Bar Strength
|
|
146
|
+
- ROI, True Range, ATR, Internal Bar Strength, Positivity Indicator
|
|
139
147
|
|
|
140
148
|
### Strength Indicators
|
|
141
|
-
- Accumulation/Distribution, PVI, NVI, RVI
|
|
149
|
+
- Accumulation/Distribution, PVI, NVI, RVI, Volume Index
|
|
142
150
|
|
|
143
151
|
### Trend Indicators
|
|
144
152
|
- Aroon (Up/Down/Oscillator), Parabolic, DM, Volume-Price Trend, TSI
|
|
@@ -146,6 +154,10 @@ Each module has `bulk` (list output) and `single` (scalar output) functions.
|
|
|
146
154
|
### Volatility Indicators
|
|
147
155
|
- Ulcer Index, Volatility System
|
|
148
156
|
|
|
157
|
+
**Note on scope:** Statistical primitives available in Python's `statistics` / `math` modules
|
|
158
|
+
(the Rust `basic_indicators` surface) are intentionally not re-bound. Use the standard library
|
|
159
|
+
directly for those.
|
|
160
|
+
|
|
149
161
|
---
|
|
150
162
|
|
|
151
163
|
## 📊 Performance Benchmarks
|
|
@@ -226,7 +238,7 @@ This repository is part of a structured documentation suite:
|
|
|
226
238
|
- 📕 **Tutorials:** — [See here](https://centaurtechnicalindicators-python.readthedocs.io/en/latest/tutorials/)
|
|
227
239
|
- 📘 **How-To Guides:** — [See here](https://centaurtechnicalindicators-python.readthedocs.io/en/latest/howto/)
|
|
228
240
|
- ⏱️ **Benchmarks:** — [See here](https://centaurtechnicalindicators-python.readthedocs.io/en/latest/benchmarks/)
|
|
229
|
-
- 📙 **Explanations:** — [
|
|
241
|
+
- 📙 **Explanations:** — [tech.centaurresearchtechnologies.com](https://tech.centaurresearchtechnologies.com/)
|
|
230
242
|
- 📗 **Reference:** — [See here](https://centaurtechnicalindicators-python.readthedocs.io/en/latest/api/)
|
|
231
243
|
|
|
232
244
|
---
|