FAQ
Frequently asked questions about Wickra. If yours is not here, check the issue tracker or open a new issue.
Will batch and streaming produce the same result?
Yes — bit-identical, by construction. batch(prices) is a one-line wrapper that calls update(p) for every p in the input. The same unit test — batch_equals_streaming — pins this for every indicator. See Streaming vs Batch for the full contract.
What does warmup_period() mean?
It's the number of inputs an indicator needs before it emits its first non-None value. For RSI(14) that's 15 (14 diffs plus the seed); for SMA(20) it's 20; for MACD(12, 26, 9) it's 34 (slow + signal − 1). After warmup the indicator never goes back to None. The complete table lives at Warmup Periods.
Why am I getting None / NaN for the first N values?
That's the warmup. Use is_ready() (or the corresponding isReady() in Node, is_ready() in Python) to gate your code on "do I have a real value yet?" rather than counting inputs yourself:
import wickra as ta
rsi = ta.RSI(14)
for price in feed:
rsi.update(price)
if rsi.is_ready():
...Which indicator should I use for X?
A short cheat-sheet (full version at the bottom of Indicators Overview):
- trend direction → MA family (
SMA,EMA,HMA,T3,KAMA) - trend strength →
ADX,ChoppinessIndex,VerticalHorizontalFilter - overbought / oversold →
RSI,Stochastic,Williams %R,MFI - volatility →
ATR,TrueRange,ChaikinVolatility,StdDev - breakout level →
Donchian,BollingerBands - trailing stop →
PSAR,SuperTrend,ChandelierExit,AtrTrailingStop - volume confirmation →
OBV,ChaikinMoneyFlow,VWAP
Is a single indicator instance thread-safe?
No. update mutates state, so a single instance must not be shared across threads. Each thread should own its own indicator. For multi-asset parallelism, the Rust crate provides BatchExt::batch_parallel, which fans out over many series each with its own fresh instance behind the default parallel feature (rayon). Node's worker_threads gives the same shape from JavaScript — see examples/node/parallel_assets.js.
Does Wickra need a system compiler to install?
No. Every published wheel (PyPI), npm package, and crate ships pre-built artefacts. pip install wickra and npm install wickra are no-prerequisite installs on Linux, macOS, and Windows x64 / arm64. The only time you need a toolchain is when you are building Wickra from source.
How do I handle non-finite inputs (NaN / Inf)?
The scalar indicators (SMA, EMA, WMA, RSI, ROC, …) return the most recent valid value when fed a non-finite input, leaving their state untouched. That lets a missing price in your feed pass through without poisoning the rest of the series. ATR and the volume-aware indicators reject non-finite volume at the Candle::new boundary, so an aggregator that overflows surfaces an error instead of producing a corrupted candle (see Data Layer).
How fast is Wickra?
The streaming path is O(1) per update — the per-tick cost does not grow with how much history you have already seen. The README has a benchmark table comparing Wickra against finta and talipp; the gap is roughly 10–30× on batch workloads and ~17× per tick on a streaming RSI seeded with 2 000 historical bars.
How do I add a custom indicator?
Implement the Indicator trait in crates/wickra-core/src/indicators/<your_name>.rs, wire it through the bindings, and add reference-value plus batch == streaming equivalence tests. The complete how-to and the project's standards are in CONTRIBUTING.md.
Where do I get historical OHLCV data to test with?
The repo ships seven real BTCUSDT datasets at examples/data/btcusdt-{1m,5m,15m,1h,12h,1d,1month}.csv (50 000 / 10 000 / 10 000 / 10 000 / 5 000 / 3 200 / 105 candles respectively). Refresh them with the latest market history via cargo run -p wickra-examples --bin fetch_btcusdt. See Data Layer for the full story.
How is Wickra different from TA-Lib / pandas-ta / talipp?
- TA-Lib and pandas-ta are batch-only — every new tick triggers a full recomputation. Wickra updates in O(1). The numerical results are the same; the speed gap shows up in live trading and large backtests.
- talipp is streaming-first like Wickra but Python-only and slower per update.
fintais batch-only and pure-Python.ta-lib-pythonand TA-Lib both require C build tooling on Windows; Wickra ships pre-built native wheels.
See the TA-Lib Migration guide for a direct function-by-function mapping.
See also
- Home — documentation home.
- Streaming vs Batch — the central design idea.
- TA-Lib Migration — function-by-function mapping table.
- Cookbook — practical strategy recipes.