Files
wickra/bindings/python
kingchenc 4880fea075 B5: complete the Python type stubs for all 25 indicators
The .pyi shipped stubs for only 9 of the 25 exported classes, so with
py.typed set, type checkers flagged DEMA, TEMA, HMA, KAMA, CCI, ROC,
WilliamsR, ADX, MFI, TRIX, PSAR, Keltner, Donchian, VWAP,
AwesomeOscillator and Aroon as missing. All 16 are now stubbed with
signatures matching python/src/lib.rs (constructor defaults, update
return types, batch array shapes, lifecycle methods). Verified: the
stub set equals the 25 registered classes and mypy type-checks a script
exercising every class with no issues.
2026-05-22 04:02:17 +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.