Files
wickra/bindings/wasm
kingchenc 21bbd521b3 F11: add SuperTrend, Chandelier Exit, Chande Kroll Stop and ATR Trailing Stop
- Rust core: super_trend.rs (SuperTrend — ATR-banded trailing stop with
  flip logic; SuperTrendOutput { value, direction }), chandelier_exit.rs
  (Chandelier Exit — ATR stop hung off the window's highest high / lowest
  low; ChandelierExitOutput { long_stop, short_stop }),
  chande_kroll_stop.rs (Chande Kroll Stop — a two-stage ATR stop;
  ChandeKrollStopOutput { stop_long, stop_short }), atr_trailing_stop.rs
  (ATR Trailing Stop — a single ratcheting close-based stop). Each with a
  full Indicator impl, runnable doctest and reference / property / warmup
  / reset / batch==streaming tests.
- Python: PySuperTrend / PyChandelierExit / PyChandeKrollStop /
  PyAtrTrailingStop PyO3 classes (struct outputs as tuples and (n, 2)
  arrays) + module registration + .pyi stubs.
- Node: explicit SuperTrendNode / ChandelierExitNode / ChandeKrollStopNode
  / AtrTrailingStopNode with SuperTrendValue / ChandelierExitValue /
  ChandeKrollStopValue objects; index.d.ts and index.js updated.
- WASM: WasmSuperTrend / WasmChandelierExit / WasmChandeKrollStop /
  WasmAtrTrailingStop.
- Wiki: Indicator-SuperTrend/ChandelierExit/ChandeKrollStop/
  AtrTrailingStop.md plus rows in the "Trailing stop" table of
  Indicators-Overview.md and entries in Home.md.
- Add clippy.toml with doc-valid-idents for the proper noun "LeBeau".

cargo fmt + clippy (core/wickra/data/wasm/node) clean; 427 core tests,
25 data tests and 61 doctests green.
2026-05-22 19:42:14 +02:00
..
2026-05-22 04:05:15 +02:00

wickra-wasm

WebAssembly bindings for the Wickra streaming-first technical indicators library.

Build

You need wasm-pack and the wasm32-unknown-unknown Rust target:

rustup target add wasm32-unknown-unknown
cargo install wasm-pack

Then from the repository root:

wasm-pack build bindings/wasm --target web --release --features panic-hook

The compiled package lands in bindings/wasm/pkg/. Targets:

  • --target web for native ES modules in browsers
  • --target bundler for webpack/Vite/Rollup
  • --target nodejs for Node.js

Example

import init, { SMA, RSI, MACD, version } from "./pkg/wickra_wasm.js";

await init();
console.log("wickra:", version());

// Streaming
const rsi = new RSI(14);
for (const price of livePrices) {
  const v = rsi.update(price);
  if (v !== undefined && v > 70) console.log("overbought");
}

// Batch (returns a Float64Array; NaN for warmup positions)
const sma = new SMA(20).batch(new Float64Array(historicalPrices));

An interactive demo lives in bindings/wasm/examples/index.html. After building the package serve the bindings/wasm/ directory and open examples/index.html.