Files
wickra/bindings/python
kingchenc 24a9ff8244 ci(release): three fixes after the first v0.1.0 attempt
Three blockers surfaced when the first tag actually ran the pipeline:

1. PyPI sdist build refused the `readme = "../../README.md"` path
   in bindings/python/pyproject.toml. maturin sdist forbids `..`
   inside archive entries. Solution: add a Python-specific README at
   bindings/python/README.md (covers the Python install + pointers to
   the main repo) and point the project.readme key at the local file.

2. Node publish job hit ENOENT on npm/<platform>/wickra.<...>.node
   because napi's per-platform scaffolding directories did not exist
   yet when `napi artifacts` ran. Insert `napi create-npm-dirs` as
   its own step before `napi artifacts` so the platform package layout
   is in place before binaries get moved into it.

3. and 4. (crates.io email + npm 2FA-bypass) are registry-side account
   settings that have to be done in the user's browser; no code change
   needed for those. They'll be sorted before the next tag push.
2026-05-21 20:51:30 +02:00
..

Wickra — Python bindings

Streaming-first technical indicators powered by a Rust core.

pip install wickra

Quick start

import numpy as np
import wickra as ta

# Batch — TA-Lib-style usage
prices = np.linspace(100, 200, 1000)
rsi = ta.RSI(14).batch(prices)            # NumPy array; NaN during warmup

# Streaming — feed ticks one at a time
rsi = ta.RSI(14)
for price in live_prices:
    v = rsi.update(price)                 # O(1) per tick
    if v is not None and v > 70:
        ...

What's included

25 streaming-first indicators across four families. Every one passes a batch == streaming equivalence test and reference-value tests:

  • Trend — SMA, EMA, WMA, DEMA, TEMA, HMA, KAMA
  • Momentum — RSI (Wilder), MACD, Stochastic, CCI, ROC, WilliamsR, ADX, MFI, TRIX, AwesomeOscillator, Aroon
  • Volatility — BollingerBands, ATR, Keltner, Donchian, PSAR
  • Volume — OBV, VWAP

Why streaming-first matters

Classic TA libraries are batch-only: every live tick triggers a full recomputation over the entire history. Wickra updates indicator state in O(1) per tick. On a 5K-bar history the streaming RSI gap is ~17× over the nearest peer with a streaming API and 100×+ over batch-only libraries.

Full project

See https://github.com/kingchenc/wickra for benchmarks, the Rust core, Node.js and WebAssembly bindings, examples, and CI.

License

Licensed under the PolyForm Noncommercial License 1.0.0. Personal, research, educational, and non-profit use are all permitted. Commercial sale requires a separate license — contact via the GitHub repo.