docs: standardise language naming + binding security sections (#290)
* docs: standardise language naming and add binding security sections Canonical binding list everywhere: Rust, Python, Node.js, WASM, C, C++, C#, Go, Java, R. Use C# (not .NET) as the language label, WASM (not WebAssembly) in prose, and frame the C ABI as a hub rather than a list item. - Bump stale indicator counts (200+ -> 514) and family count (sixteen -> twenty-four) in the Node/Python/WASM and docs READMEs. - Add a short Security section to all eight binding READMEs. - Relabel benchmark rows (C -> C / C++, C# / .NET -> C#). - Fix the 'language stecker' wording in the C#/Go/R API intros. - Documentation only; no code or public API changes. * release.yml: extend install snippets and expose version output Add the missing registry installs to the release body (dotnet, go, Gradle/ Maven Central, r-universe) alongside cargo/pip/npm, and expose a v-stripped 'version' output from the tag step for the Gradle coordinate. Also fix the C-ABI language order in the assets note (C# before Go). * release.yml: correct the release body (10 languages, all registries) Reframe the tagline to '10 languages' (native Rust/Python/Node.js/WASM + a C ABI hub for C, C++, C#, Go, Java, R) instead of '4 language registries', note that C#/Java/Go/R publish to NuGet/Maven/Go/r-universe via their own jobs, and tidy the Node.js label and the C-ABI hub list.
This commit is contained in:
@@ -30,9 +30,9 @@ assignees: ""
|
|||||||
## Environment
|
## Environment
|
||||||
|
|
||||||
- Wickra version:
|
- Wickra version:
|
||||||
- Language / binding: <!-- Rust crate / Python / Node / WASM / C ABI / C# (.NET) / Go / Java / R -->
|
- Language / binding: <!-- Rust crate / Python / Node.js / WASM / C / C++ / C# / Go / Java / R -->
|
||||||
- OS and architecture:
|
- OS and architecture:
|
||||||
- Rust / Python / Node / .NET version (If relevant):
|
- Rust / Python / Node.js / .NET version (If relevant):
|
||||||
|
|
||||||
## Additional context
|
## Additional context
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ assignees: []
|
|||||||
- [ ] Rust crate (`wickra`)
|
- [ ] Rust crate (`wickra`)
|
||||||
- [ ] Python (`pip install wickra`)
|
- [ ] Python (`pip install wickra`)
|
||||||
- [ ] Node.js (`npm install wickra`)
|
- [ ] Node.js (`npm install wickra`)
|
||||||
- [ ] WebAssembly
|
- [ ] WASM
|
||||||
- [ ] C ABI (`bindings/c`)
|
- [ ] C ABI (`bindings/c`)
|
||||||
- [ ] C# / .NET (`Wickra` on NuGet)
|
- [ ] C# (`Wickra` on NuGet)
|
||||||
- [ ] Go (`bindings/go`)
|
- [ ] Go (`bindings/go`)
|
||||||
- [ ] Java (`org.wickra:wickra` on Maven Central)
|
- [ ] Java (`org.wickra:wickra` on Maven Central)
|
||||||
- [ ] R (`bindings/r`)
|
- [ ] R (`bindings/r`)
|
||||||
@@ -31,7 +31,7 @@ assignees: []
|
|||||||
| Binding version | `e.g. python 0.4.2 / node 0.4.2` |
|
| Binding version | `e.g. python 0.4.2 / node 0.4.2` |
|
||||||
| OS / arch | `e.g. Windows 11 x86_64, Linux glibc` |
|
| OS / arch | `e.g. Windows 11 x86_64, Linux glibc` |
|
||||||
| Rust toolchain | `rustc --version` (If building from source) |
|
| Rust toolchain | `rustc --version` (If building from source) |
|
||||||
| Python / Node / .NET version | `python --version` / `node --version` / `dotnet --version` |
|
| Python / Node.js / .NET version | `python --version` / `node --version` / `dotnet --version` |
|
||||||
|
|
||||||
## Minimal reproducer
|
## Minimal reproducer
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ assignees: ""
|
|||||||
- [ ] Should be exposed in the Node binding
|
- [ ] Should be exposed in the Node binding
|
||||||
- [ ] Should be exposed in the WASM binding
|
- [ ] Should be exposed in the WASM binding
|
||||||
- [ ] Should be exposed in the C ABI
|
- [ ] Should be exposed in the C ABI
|
||||||
- [ ] Should be exposed in the C# / .NET binding
|
- [ ] Should be exposed in the C# binding
|
||||||
- [ ] Should be exposed in the Go binding
|
- [ ] Should be exposed in the Go binding
|
||||||
- [ ] Should be exposed in the Java binding
|
- [ ] Should be exposed in the Java binding
|
||||||
- [ ] Should be exposed in the R binding
|
- [ ] Should be exposed in the R binding
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ assignees: []
|
|||||||
## Affected code path
|
## Affected code path
|
||||||
|
|
||||||
- Indicator / API: `e.g. EMA.update`
|
- Indicator / API: `e.g. EMA.update`
|
||||||
- Binding: `Rust / Python / Node / Wasm / C ABI / C# (.NET) / Go / Java / R`
|
- Binding: `Rust / Python / Node.js / WASM / C / C++ / C# / Go / Java / R`
|
||||||
- Hot loop or one-shot call?
|
- Hot loop or one-shot call?
|
||||||
|
|
||||||
## Versions compared
|
## Versions compared
|
||||||
|
|||||||
@@ -33,4 +33,4 @@ import wickra as ta
|
|||||||
## Environment (Only if relevant)
|
## Environment (Only if relevant)
|
||||||
|
|
||||||
- Wickra version: `e.g. 0.4.2`
|
- Wickra version: `e.g. 0.4.2`
|
||||||
- Binding: `Rust / Python / Node / Wasm / C ABI / C# (.NET) / Go / Java / R`
|
- Binding: `Rust / Python / Node.js / WASM / C / C++ / C# / Go / Java / R`
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
- [ ] `cargo clippy --workspace --all-targets -- -D warnings` is clean.
|
- [ ] `cargo clippy --workspace --all-targets -- -D warnings` is clean.
|
||||||
- [ ] `cargo test --workspace` passes.
|
- [ ] `cargo test --workspace` passes.
|
||||||
- [ ] New behaviour has tests; bug fixes have a regression test.
|
- [ ] New behaviour has tests; bug fixes have a regression test.
|
||||||
- [ ] Public API changes are mirrored in the Python / Node / WASM bindings, and the C ABI + C# + Go + Java + R bindings are regenerated
|
- [ ] Public API changes are mirrored in the Python / Node.js / WASM bindings, and the C ABI + C# + Go + Java + R bindings are regenerated
|
||||||
and their type stubs (If applicable).
|
and their type stubs (If applicable).
|
||||||
- [ ] The relevant page on the [documentation site](https://docs.wickra.org)
|
- [ ] The relevant page on the [documentation site](https://docs.wickra.org)
|
||||||
and the `README.md` are updated (If applicable). Docs edits go to a
|
and the `README.md` are updated (If applicable). Docs edits go to a
|
||||||
|
|||||||
@@ -22,9 +22,9 @@ Please fill in the sections below. Delete any that don't apply.
|
|||||||
- [ ] Rust crate (`crates/wickra`)
|
- [ ] Rust crate (`crates/wickra`)
|
||||||
- [ ] Python binding (`bindings/python`)
|
- [ ] Python binding (`bindings/python`)
|
||||||
- [ ] Node.js binding (`bindings/node`)
|
- [ ] Node.js binding (`bindings/node`)
|
||||||
- [ ] WebAssembly binding (`bindings/wasm`)
|
- [ ] WASM binding (`bindings/wasm`)
|
||||||
- [ ] C ABI (`bindings/c`)
|
- [ ] C ABI (`bindings/c`)
|
||||||
- [ ] C# / .NET binding (`bindings/csharp`)
|
- [ ] C# binding (`bindings/csharp`)
|
||||||
- [ ] Go binding (`bindings/go`)
|
- [ ] Go binding (`bindings/go`)
|
||||||
- [ ] Java binding (`bindings/java`)
|
- [ ] Java binding (`bindings/java`)
|
||||||
- [ ] R binding (`bindings/r`)
|
- [ ] R binding (`bindings/r`)
|
||||||
|
|||||||
@@ -876,6 +876,7 @@ jobs:
|
|||||||
# bundle to this same release without re-resolving it.
|
# bundle to this same release without re-resolving it.
|
||||||
outputs:
|
outputs:
|
||||||
tag: ${{ steps.tag.outputs.tag }}
|
tag: ${{ steps.tag.outputs.tag }}
|
||||||
|
version: ${{ steps.tag.outputs.version }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
@@ -904,6 +905,7 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "version=${tag#v}" >> "$GITHUB_OUTPUT"
|
||||||
echo "::notice::attaching assets to release $tag"
|
echo "::notice::attaching assets to release $tag"
|
||||||
|
|
||||||
- name: Download all build artifacts
|
- name: Download all build artifacts
|
||||||
@@ -941,7 +943,7 @@ jobs:
|
|||||||
# the provenance bundle is attached (P24, immutability-ready).
|
# the provenance bundle is attached (P24, immutability-ready).
|
||||||
draft: true
|
draft: true
|
||||||
body: |
|
body: |
|
||||||
Wickra ${{ github.ref_name }} — streaming-first technical indicators across 4 language registries plus a C ABI.
|
Wickra ${{ github.ref_name }} — streaming-first technical indicators for 10 languages: native Rust, Python, Node.js, WASM plus a C ABI hub for C, C++, C#, Go, Java, R.
|
||||||
|
|
||||||
### Install
|
### Install
|
||||||
|
|
||||||
@@ -950,21 +952,37 @@ jobs:
|
|||||||
pip install wickra
|
pip install wickra
|
||||||
npm install wickra
|
npm install wickra
|
||||||
npm install wickra-wasm
|
npm install wickra-wasm
|
||||||
|
dotnet add package Wickra
|
||||||
|
go get github.com/wickra-lib/wickra-go
|
||||||
|
```
|
||||||
|
|
||||||
|
Java (Gradle, Maven Central):
|
||||||
|
|
||||||
|
```gradle
|
||||||
|
implementation("org.wickra:wickra:${{ steps.tag.outputs.version }}")
|
||||||
|
```
|
||||||
|
|
||||||
|
R (r-universe):
|
||||||
|
|
||||||
|
```r
|
||||||
|
install.packages("wickra", repos = "https://wickra-lib.r-universe.dev")
|
||||||
```
|
```
|
||||||
|
|
||||||
### Attached assets
|
### Attached assets
|
||||||
|
|
||||||
Pre-built artefacts for every supported platform — the same files that
|
Pre-built artefacts for every supported platform — the same files this
|
||||||
were uploaded to crates.io, PyPI, and npm by this workflow run.
|
workflow run published to crates.io, PyPI, and npm. C# ships to NuGet,
|
||||||
|
Java to Maven Central, Go to the wickra-go module, and R to r-universe
|
||||||
|
via their own release jobs.
|
||||||
|
|
||||||
- `*.whl` / `wickra-*.tar.gz` — Python wheels + sdist (5 platforms, ABI3 ≥ 3.9)
|
- `*.whl` / `wickra-*.tar.gz` — Python wheels + sdist (5 platforms, ABI3 ≥ 3.9)
|
||||||
- `wickra.*.node` — native Node bindings (linux-x64-gnu, darwin-x64,
|
- `wickra.*.node` — native Node.js bindings (linux-x64-gnu, darwin-x64,
|
||||||
darwin-arm64, win32-x64-msvc)
|
darwin-arm64, win32-x64-msvc)
|
||||||
- `wickra-*.tgz` — npm-pack tarballs (main package + per-platform subpackages + WASM)
|
- `wickra-*.tgz` — npm-pack tarballs (main package + per-platform subpackages + WASM)
|
||||||
- `*.crate` — cargo source crates (wickra-core, wickra-data, wickra)
|
- `*.crate` — cargo source crates (wickra-core, wickra-data, wickra)
|
||||||
- `wickra-c-<target>.tar.gz` — C ABI: `include/wickra.h` + `wickra.hpp`
|
- `wickra-c-<target>.tar.gz` — C ABI: `include/wickra.h` + `wickra.hpp`
|
||||||
and the cdylib/staticlib per target (linux/macos/windows × x64/arm64),
|
and the cdylib/staticlib per target (linux/macos/windows × x64/arm64),
|
||||||
the hub for C / C++ / Go / C# / Java / R
|
the hub for C, C++, C#, Go, Java and R
|
||||||
|
|
||||||
### Auto-generated changelog
|
### Auto-generated changelog
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -31,7 +31,7 @@ or replace lives behind a separate crate boundary.
|
|||||||
┌────────────┼────────────┬────────────────┐
|
┌────────────┼────────────┬────────────────┐
|
||||||
│ │ │ │
|
│ │ │ │
|
||||||
┌──▼───────┐ ┌──▼───────┐ ┌──▼───────────┐ ┌──▼──────────────────┐
|
┌──▼───────┐ ┌──▼───────┐ ┌──▼───────────┐ ┌──▼──────────────────┐
|
||||||
│ Python │ │ Node │ │ WASM │ │ C ABI (cbindgen) │
|
│ Python │ │ Node.js │ │ WASM │ │ C ABI (cbindgen) │
|
||||||
│ (PyO3) │ │ (napi-rs)│ │(wasm-bindgen)│ │ cdylib + header │
|
│ (PyO3) │ │ (napi-rs)│ │(wasm-bindgen)│ │ cdylib + header │
|
||||||
└──────────┘ └──────────┘ └──────────────┘ └─────────┬───────────┘
|
└──────────┘ └──────────┘ └──────────────┘ └─────────┬───────────┘
|
||||||
│ linked by
|
│ linked by
|
||||||
@@ -41,11 +41,11 @@ or replace lives behind a separate crate boundary.
|
|||||||
└─────────────────────┘
|
└─────────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
Python, Node and WASM are *native* Rust bindings (PyO3 / napi-rs /
|
Python, Node.js and WASM are *native* Rust bindings (PyO3 / napi-rs /
|
||||||
wasm-bindgen). The C ABI is the *hub* every other C-capable language links
|
wasm-bindgen). The C ABI is the *hub* every other C-capable language links
|
||||||
against: it builds to a `cdylib`/`staticlib` plus a generated `wickra.h`, and
|
against: it builds to a `cdylib`/`staticlib` plus a generated `wickra.h`, and
|
||||||
downstream languages link that one artifact rather than each re-wrapping the
|
downstream languages link that one artifact rather than each re-wrapping the
|
||||||
core. C and C++ link it directly; the **C# / .NET** binding (`bindings/csharp`,
|
core. C and C++ link it directly; the **C#** binding (`bindings/csharp`,
|
||||||
on NuGet), the **Go** binding (`bindings/go`, cgo), the **R** binding
|
on NuGet), the **Go** binding (`bindings/go`, cgo), the **R** binding
|
||||||
(`bindings/r`, `.Call`) and the **Java** binding (`bindings/java`, the Java FFM
|
(`bindings/r`, `.Call`) and the **Java** binding (`bindings/java`, the Java FFM
|
||||||
API / Panama, on Maven Central) are all generated from `wickra.h`.
|
API / Panama, on Maven Central) are all generated from `wickra.h`.
|
||||||
@@ -57,7 +57,7 @@ API / Panama, on Maven Central) are all generated from `wickra.h`.
|
|||||||
| `wickra-data` | `crates/wickra-data` | CSV reader, tick aggregator, resampler, live exchange feeds (feature-gated) | `tokio`, `tokio-tungstenite` (live), `serde_json` |
|
| `wickra-data` | `crates/wickra-data` | CSV reader, tick aggregator, resampler, live exchange feeds (feature-gated) | `tokio`, `tokio-tungstenite` (live), `serde_json` |
|
||||||
| `wickra-python` | `bindings/python` | `_wickra` PyO3 module + Python package | `pyo3`, `numpy`, depends on `wickra-core` |
|
| `wickra-python` | `bindings/python` | `_wickra` PyO3 module + Python package | `pyo3`, `numpy`, depends on `wickra-core` |
|
||||||
| `wickra-node` | `bindings/node` | NAPI-RS native binding | `napi`, depends on `wickra-core` |
|
| `wickra-node` | `bindings/node` | NAPI-RS native binding | `napi`, depends on `wickra-core` |
|
||||||
| `wickra-wasm` | `bindings/wasm` | WebAssembly binding | `wasm-bindgen`, depends on `wickra-core` |
|
| `wickra-wasm` | `bindings/wasm` | WASM binding | `wasm-bindgen`, depends on `wickra-core` |
|
||||||
| `wickra-c` | `bindings/c` | C ABI hub — `cdylib`/`staticlib` + generated `wickra.h` (cbindgen) | depends on `wickra-core` |
|
| `wickra-c` | `bindings/c` | C ABI hub — `cdylib`/`staticlib` + generated `wickra.h` (cbindgen) | depends on `wickra-core` |
|
||||||
| `wickra-examples` | `examples/rust` | runnable binary examples | depends on `wickra`, `wickra-data` |
|
| `wickra-examples` | `examples/rust` | runnable binary examples | depends on `wickra`, `wickra-data` |
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -98,8 +98,8 @@ python -m benchmarks.compare_libraries
|
|||||||
## 3. Per-binding throughput — the cost of the boundary
|
## 3. Per-binding throughput — the cost of the boundary
|
||||||
|
|
||||||
The sections above compare Wickra against other libraries, which only exists for
|
The sections above compare Wickra against other libraries, which only exists for
|
||||||
Python and Rust (there is no comparable streaming TA library for C, C#, Go, Java,
|
Python and Rust (there is no comparable streaming TA library for C, C++, C#, Go, Java,
|
||||||
R or WebAssembly to benchmark against). Every binding calls the **same** Rust
|
R or WASM to benchmark against). Every binding calls the **same** Rust
|
||||||
core, so these per-binding benchmarks are **not** a speed claim and **not** a
|
core, so these per-binding benchmarks are **not** a speed claim and **not** a
|
||||||
cross-library ratio — they document the raw cost of crossing each language's FFI
|
cross-library ratio — they document the raw cost of crossing each language's FFI
|
||||||
boundary, in million updates per second (Mupd/s).
|
boundary, in million updates per second (Mupd/s).
|
||||||
@@ -127,12 +127,12 @@ AMD Ryzen 9 9950X):
|
|||||||
| Target | streaming (Mupd/s) | batch (Mupd/s) |
|
| Target | streaming (Mupd/s) | batch (Mupd/s) |
|
||||||
|----------------------|-------------------:|---------------:|
|
|----------------------|-------------------:|---------------:|
|
||||||
| Rust core (no FFI) | 391 | 500 |
|
| Rust core (no FFI) | 391 | 500 |
|
||||||
| C | 383 | 330 |
|
| C / C++ | 383 | 330 |
|
||||||
| C# / .NET | 337 | 244 |
|
| C# | 337 | 244 |
|
||||||
| Python | 33 | 488 |
|
| Python | 33 | 488 |
|
||||||
| Java | 28 | 175 |
|
| Java | 28 | 175 |
|
||||||
| Go | 24 | 400 |
|
| Go | 24 | 400 |
|
||||||
| WebAssembly | 19 | 167 |
|
| WASM | 19 | 167 |
|
||||||
| Node.js | 17 | 10 |
|
| Node.js | 17 | 10 |
|
||||||
| R | 0.1 | 193 |
|
| R | 0.1 | 193 |
|
||||||
|
|
||||||
@@ -160,7 +160,7 @@ node bindings/node/benchmarks/throughput.js # native napi-
|
|||||||
cargo build -p wickra-c --release # the C ABI hub
|
cargo build -p wickra-c --release # the C ABI hub
|
||||||
cmake -S bindings/c/benchmarks -B build/cbench && cmake --build build/cbench \
|
cmake -S bindings/c/benchmarks -B build/cbench && cmake --build build/cbench \
|
||||||
&& ./build/cbench/throughput # raw C ABI
|
&& ./build/cbench/throughput # raw C ABI
|
||||||
dotnet run -c Release --project bindings/csharp/benchmarks # C# / .NET (P/Invoke)
|
dotnet run -c Release --project bindings/csharp/benchmarks # C# (P/Invoke)
|
||||||
( cd bindings/go/benchmarks && go run . ) # Go (cgo)
|
( cd bindings/go/benchmarks && go run . ) # Go (cgo)
|
||||||
mvn -q -f bindings/java install -DskipTests \
|
mvn -q -f bindings/java install -DskipTests \
|
||||||
&& mvn -q -f bindings/java/benchmarks exec:exec -Dexec.mainClass=org.wickra.benchmarks.Throughput
|
&& mvn -q -f bindings/java/benchmarks exec:exec -Dexec.mainClass=org.wickra.benchmarks.Throughput
|
||||||
|
|||||||
@@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Standardised programming-language naming and ordering across all docs, READMEs,
|
||||||
|
the documentation site, marketing site, organization profile and GitHub
|
||||||
|
repository descriptions. Canonical list:
|
||||||
|
`Rust, Python, Node.js, WASM, C, C++, C#, Go, Java, R`. Uses C# (not .NET) as
|
||||||
|
the language label, lists C and C++ separately, prefers `Node.js` and `WASM` in
|
||||||
|
prose, and frames the C ABI as a hub (`C ABI hub → …`) rather than a
|
||||||
|
language-list entry. Documentation only — no code or public API changes.
|
||||||
|
|
||||||
## [0.9.0] - 2026-06-13
|
## [0.9.0] - 2026-06-13
|
||||||
|
|
||||||
Maintenance release: Java build-dependency updates and CI/Dependabot
|
Maintenance release: Java build-dependency updates and CI/Dependabot
|
||||||
|
|||||||
+2
-2
@@ -22,7 +22,7 @@ licensed as above, without any additional terms or conditions.
|
|||||||
| `bindings/node` | napi-rs bindings (`wickra` on npm). |
|
| `bindings/node` | napi-rs bindings (`wickra` on npm). |
|
||||||
| `bindings/wasm` | wasm-bindgen bindings (`wickra-wasm` on npm). |
|
| `bindings/wasm` | wasm-bindgen bindings (`wickra-wasm` on npm). |
|
||||||
| `bindings/c` | C ABI — `cdylib` + `staticlib` + generated `include/wickra.h`. The hub for C / C++ and any C-capable language. |
|
| `bindings/c` | C ABI — `cdylib` + `staticlib` + generated `include/wickra.h`. The hub for C / C++ and any C-capable language. |
|
||||||
| `bindings/csharp` | .NET binding over the C ABI (`Wickra` on NuGet) — `[LibraryImport]` P/Invoke generated from `wickra.h`. |
|
| `bindings/csharp` | C# binding over the C ABI (`Wickra` on NuGet) — `[LibraryImport]` P/Invoke generated from `wickra.h`. |
|
||||||
| `bindings/go` | Go binding over the C ABI via cgo (module tag `bindings/go/vX.Y.Z`) — wrappers generated from `wickra.h`. |
|
| `bindings/go` | Go binding over the C ABI via cgo (module tag `bindings/go/vX.Y.Z`) — wrappers generated from `wickra.h`. |
|
||||||
| `bindings/r` | R binding over the C ABI via `.Call` (R package) — C glue + R wrappers generated from `wickra.h`. |
|
| `bindings/r` | R binding over the C ABI via `.Call` (R package) — C glue + R wrappers generated from `wickra.h`. |
|
||||||
| `bindings/java` | Java binding over the C ABI via the FFM API (Panama, Maven Central) — wrappers generated from `wickra.h`. |
|
| `bindings/java` | Java binding over the C ABI via the FFM API (Panama, Maven Central) — wrappers generated from `wickra.h`. |
|
||||||
@@ -107,7 +107,7 @@ installed. Dependabot also keeps the `.github/requirements` pins current.
|
|||||||
- **Streaming parity.** An indicator's `batch` output must equal the sequence
|
- **Streaming parity.** An indicator's `batch` output must equal the sequence
|
||||||
of `update` calls.
|
of `update` calls.
|
||||||
- **Bindings.** A change to a public indicator API must be mirrored across the
|
- **Bindings.** A change to a public indicator API must be mirrored across the
|
||||||
Python, Node, and WASM bindings, including their type stubs / `.d.ts`. The C ABI
|
Python, Node.js, and WASM bindings, including their type stubs / `.d.ts`. The C ABI
|
||||||
(`bindings/c`) is generated from the core, so regenerate it from the core and
|
(`bindings/c`) is generated from the core, so regenerate it from the core and
|
||||||
commit `src/lib.rs` + `include/wickra.h`. The C# binding (`bindings/csharp`) is
|
commit `src/lib.rs` + `include/wickra.h`. The C# binding (`bindings/csharp`) is
|
||||||
generated from `wickra.h`, so regenerate and commit its `Generated/*.g.cs` too.
|
generated from `wickra.h`, so regenerate and commit its `Generated/*.g.cs` too.
|
||||||
|
|||||||
@@ -22,8 +22,8 @@
|
|||||||
**Streaming-first technical indicators. Install with `pip install wickra` — no system dependencies.**
|
**Streaming-first technical indicators. Install with `pip install wickra` — no system dependencies.**
|
||||||
|
|
||||||
Wickra is a multi-language technical-analysis library with a Rust core and
|
Wickra is a multi-language technical-analysis library with a Rust core and
|
||||||
native bindings for Python, Node.js and WebAssembly, plus a C ABI that C, C++,
|
native bindings for Python, Node.js and WASM, plus a C ABI that C, C++,
|
||||||
C# / .NET, Go, Java, R and any other C-capable language links against. Every indicator is a
|
C#, Go, Java, R and any other C-capable language links against. Every indicator is a
|
||||||
state machine that updates in O(1) per new data point, so live trading bots and
|
state machine that updates in O(1) per new data point, so live trading bots and
|
||||||
historical backtests share the exact same implementation.
|
historical backtests share the exact same implementation.
|
||||||
|
|
||||||
@@ -81,8 +81,8 @@ times to get there.
|
|||||||
breadth, Renko/Kagi/Point&Figure bars, Ehlers DSP cycles, risk/performance
|
breadth, Renko/Kagi/Point&Figure bars, Ehlers DSP cycles, risk/performance
|
||||||
metrics — every single one updating in **O(1) per tick**. TA-Lib ships ~150 and
|
metrics — every single one updating in **O(1) per tick**. TA-Lib ships ~150 and
|
||||||
none of them stream.
|
none of them stream.
|
||||||
- **One Rust core, five first-class targets.** Native **Python · Node.js ·
|
- **One Rust core, five first-class targets.** Native **Rust · Python · Node.js ·
|
||||||
WebAssembly · Rust** plus a **C ABI** for C / C++, C# / .NET, Go, Java, R and any other C-capable language —
|
WASM** plus a **C ABI** for C, C++, C#, Go, Java, R and any other C-capable language —
|
||||||
identical math, identical results, zero per-language reimplementation and zero
|
identical math, identical results, zero per-language reimplementation and zero
|
||||||
GIL bottleneck.
|
GIL bottleneck.
|
||||||
- **Correct by construction, not by hope.** Every `update` validates its input,
|
- **Correct by construction, not by hope.** Every `update` validates its input,
|
||||||
@@ -106,7 +106,7 @@ Every other library forces one of those compromises. Wickra doesn't:
|
|||||||
|
|
||||||
| Library | Install | Streaming | Languages | Indicators | Active |
|
| Library | Install | Streaming | Languages | Indicators | Active |
|
||||||
|------------------|-------------|-------------|-----------------------------|-----------:|--------|
|
|------------------|-------------|-------------|-----------------------------|-----------:|--------|
|
||||||
| **★ Wickra**| **clean** | **yes, O(1)** | **Rust · Python · Node · WASM · C · C# · Go · Java · R** | **514** | **yes** |
|
| **★ Wickra**| **clean** | **yes, O(1)** | **Rust · Python · Node.js · WASM · C · C++ · C# · Go · Java · R** | **514** | **yes** |
|
||||||
| kand | clean | yes | Python · WASM · Rust | ~60 | yes |
|
| kand | clean | yes | Python · WASM · Rust | ~60 | yes |
|
||||||
| ta-rs | clean | yes | Rust only | ~30 | stale |
|
| ta-rs | clean | yes | Rust only | ~30 | stale |
|
||||||
| yata | clean | partial | Rust only | ~35 | yes |
|
| yata | clean | partial | Rust only | ~35 | yes |
|
||||||
@@ -190,7 +190,7 @@ it — regenerate from the core).
|
|||||||
| Browser / WASM | `npm install wickra-wasm` | `examples/wasm/index.html` |
|
| Browser / WASM | `npm install wickra-wasm` | `examples/wasm/index.html` |
|
||||||
| Rust | `cargo add wickra` | `examples/rust/src/bin/backtest.rs` |
|
| Rust | `cargo add wickra` | `examples/rust/src/bin/backtest.rs` |
|
||||||
| C / C++ (C ABI) | header + library, see [`bindings/c`](bindings/c) | `examples/c/streaming.c` |
|
| C / C++ (C ABI) | header + library, see [`bindings/c`](bindings/c) | `examples/c/streaming.c` |
|
||||||
| C# / .NET (C ABI) | `dotnet add package Wickra`, see [`bindings/csharp`](bindings/csharp) | `examples/csharp/streaming` |
|
| C# (C ABI) | `dotnet add package Wickra`, see [`bindings/csharp`](bindings/csharp) | `examples/csharp/streaming` |
|
||||||
| Go (cgo, C ABI) | `go get github.com/wickra-lib/wickra/bindings/go`, see [`bindings/go`](bindings/go) | `examples/go/streaming` |
|
| Go (cgo, C ABI) | `go get github.com/wickra-lib/wickra/bindings/go`, see [`bindings/go`](bindings/go) | `examples/go/streaming` |
|
||||||
| Java (FFM, C ABI) | Maven Central `org.wickra:wickra`, see [`bindings/java`](bindings/java) | `examples/java` (`Streaming`) |
|
| Java (FFM, C ABI) | Maven Central `org.wickra:wickra`, see [`bindings/java`](bindings/java) | `examples/java` (`Streaming`) |
|
||||||
| R (`.Call`, C ABI) | `R CMD INSTALL bindings/r`, see [`bindings/r`](bindings/r) | `examples/r/streaming.R` |
|
| R (`.Call`, C ABI) | `R CMD INSTALL bindings/r`, see [`bindings/r`](bindings/r) | `examples/r/streaming.R` |
|
||||||
@@ -264,7 +264,7 @@ wickra/
|
|||||||
│ ├── node/ napi-rs (publishes on npm)
|
│ ├── node/ napi-rs (publishes on npm)
|
||||||
│ ├── wasm/ wasm-bindgen (browsers, bundlers, Node)
|
│ ├── wasm/ wasm-bindgen (browsers, bundlers, Node)
|
||||||
│ ├── c/ C ABI (cdylib + staticlib) + generated include/wickra.h
|
│ ├── c/ C ABI (cdylib + staticlib) + generated include/wickra.h
|
||||||
│ ├── csharp/ .NET binding over the C ABI (publishes on NuGet)
|
│ ├── csharp/ C# binding over the C ABI (publishes on NuGet)
|
||||||
│ ├── go/ Go binding over the C ABI via cgo (module tag)
|
│ ├── go/ Go binding over the C ABI via cgo (module tag)
|
||||||
│ ├── r/ R binding over the C ABI via .Call (R package)
|
│ ├── r/ R binding over the C ABI via .Call (R package)
|
||||||
│ └── java/ Java binding over the C ABI via the FFM API (Maven Central)
|
│ └── java/ Java binding over the C ABI via the FFM API (Maven Central)
|
||||||
@@ -312,7 +312,7 @@ cargo build -p wickra-c --release
|
|||||||
cmake -S examples/c -B examples/c/build -DWICKRA_LIB_DIR="$PWD/target/release"
|
cmake -S examples/c -B examples/c/build -DWICKRA_LIB_DIR="$PWD/target/release"
|
||||||
cmake --build examples/c/build && ctest --test-dir examples/c/build --output-on-failure
|
cmake --build examples/c/build && ctest --test-dir examples/c/build --output-on-failure
|
||||||
|
|
||||||
# C# / .NET binding (requires the .NET 8 SDK; links the C ABI above)
|
# C# binding (requires the .NET 8 SDK; links the C ABI above)
|
||||||
dotnet test bindings/csharp/Wickra.Tests/Wickra.Tests.csproj
|
dotnet test bindings/csharp/Wickra.Tests/Wickra.Tests.csproj
|
||||||
|
|
||||||
# Go binding (requires a C compiler for cgo; links the C ABI above)
|
# Go binding (requires a C compiler for cgo; links the C ABI above)
|
||||||
|
|||||||
+2
-2
@@ -21,8 +21,8 @@ minor releases; breaking changes are called out in the changelog.
|
|||||||
versioning stability for a 1.0 release.
|
versioning stability for a 1.0 release.
|
||||||
- **Performance.** Keep per-tick updates O(1) and maintain the benchmark suite;
|
- **Performance.** Keep per-tick updates O(1) and maintain the benchmark suite;
|
||||||
investigate further allocation and cache improvements.
|
investigate further allocation and cache improvements.
|
||||||
- **Bindings parity.** Keep the Python, Node.js and WebAssembly bindings — plus
|
- **Bindings parity.** Keep the Python, Node.js and WASM bindings — plus
|
||||||
the C ABI and the C# / .NET, Go, Java and R bindings generated from it — in lockstep with the
|
the C ABI and the C#, Go, Java and R bindings generated from it — in lockstep with the
|
||||||
Rust core, including type stubs and platform coverage.
|
Rust core, including type stubs and platform coverage.
|
||||||
- **Documentation.** Maintain a deep-dive page per indicator on
|
- **Documentation.** Maintain a deep-dive page per indicator on
|
||||||
<https://docs.wickra.org>, plus quickstarts and cookbook material.
|
<https://docs.wickra.org>, plus quickstarts and cookbook material.
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ Thanks for using Wickra! Here is where to get help, depending on what you need.
|
|||||||
Most questions are answered in the documentation:
|
Most questions are answered in the documentation:
|
||||||
|
|
||||||
- **Docs site:** <https://docs.wickra.org> — quickstarts for Rust, Python,
|
- **Docs site:** <https://docs.wickra.org> — quickstarts for Rust, Python,
|
||||||
Node.js, WebAssembly, C, C#, Go, Java and R, a per-indicator reference, warmup periods, the
|
Node.js, WASM, C, C++, C#, Go, Java and R, a per-indicator reference, warmup periods, the
|
||||||
data layer, and an FAQ.
|
data layer, and an FAQ.
|
||||||
- **README:** <https://github.com/wickra-lib/wickra#readme> — installation and a
|
- **README:** <https://github.com/wickra-lib/wickra#readme> — installation and a
|
||||||
quick overview.
|
quick overview.
|
||||||
|
|||||||
+2
-2
@@ -3,8 +3,8 @@
|
|||||||
This document describes Wickra's attack surface and the threats considered,
|
This document describes Wickra's attack surface and the threats considered,
|
||||||
together with their mitigations. It complements the security assurance case in
|
together with their mitigations. It complements the security assurance case in
|
||||||
[`SECURITY.md`](SECURITY.md). Wickra is a computational technical-analysis
|
[`SECURITY.md`](SECURITY.md). Wickra is a computational technical-analysis
|
||||||
library (a Rust core with Python, Node.js and WebAssembly bindings plus a C ABI
|
library (a Rust core with Python, Node.js and WASM bindings plus a C ABI
|
||||||
and the .NET, Go, Java and R bindings built on it),
|
and the C#, Go, Java and R bindings built on it),
|
||||||
not a network service or trading system; the attack surface is correspondingly
|
not a network service or trading system; the attack surface is correspondingly
|
||||||
small.
|
small.
|
||||||
|
|
||||||
|
|||||||
+11
-4
@@ -9,12 +9,12 @@
|
|||||||
library plus a generated `wickra.h` — no system dependencies.**
|
library plus a generated `wickra.h` — no system dependencies.**
|
||||||
|
|
||||||
Wickra is a multi-language technical-analysis library with a Rust core and
|
Wickra is a multi-language technical-analysis library with a Rust core and
|
||||||
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R and any
|
bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R and any
|
||||||
other C-capable language. Every indicator is an O(1)
|
other C-capable language. Every indicator is an O(1)
|
||||||
streaming state machine, so live trading bots and historical backtests share
|
streaming state machine, so live trading bots and historical backtests share
|
||||||
the exact same implementation. This package is the **C ABI hub**: it compiles the
|
the exact same implementation. This package is the **C ABI hub**: it compiles the
|
||||||
core to a C-compatible shared/static library plus a generated header, so any
|
core to a C-compatible shared/static library plus a generated header, so any
|
||||||
C-capable language (C, C++, Go, C#, Java, R) links against one artifact instead
|
C-capable language (C, C++, C#, Go, Java, R) links against one artifact instead
|
||||||
of re-wrapping every indicator natively.
|
of re-wrapping every indicator natively.
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
@@ -77,10 +77,17 @@ the main repository and documentation site:
|
|||||||
- **Docs** (C quickstart, cookbook, TA-Lib migration): <https://docs.wickra.org/Quickstart-C>
|
- **Docs** (C quickstart, cookbook, TA-Lib migration): <https://docs.wickra.org/Quickstart-C>
|
||||||
- **Runnable examples:** [`examples/c/`](https://github.com/wickra-lib/wickra/tree/main/examples/c)
|
- **Runnable examples:** [`examples/c/`](https://github.com/wickra-lib/wickra/tree/main/examples/c)
|
||||||
|
|
||||||
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus this
|
Wickra ships native bindings for Python, Node.js, WASM and Rust, plus this
|
||||||
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against —
|
C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
|
||||||
all exposing the same indicators from the shared Rust core.
|
all exposing the same indicators from the shared Rust core.
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
Found a security issue? **Please don't open a public issue.** Report it privately
|
||||||
|
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
|
||||||
|
**support@wickra.org** with a subject line starting `[wickra security]`. Full
|
||||||
|
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
|
|
||||||
Wickra is an indicator toolkit, not a trading system. The values it computes
|
Wickra is an indicator toolkit, not a trading system. The values it computes
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
# Wickra — .NET
|
# Wickra — C#
|
||||||
|
|
||||||
[](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml)
|
[](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml)
|
||||||
[](https://codecov.io/gh/wickra-lib/wickra)
|
[](https://codecov.io/gh/wickra-lib/wickra)
|
||||||
[](https://www.nuget.org/packages/Wickra)
|
[](https://www.nuget.org/packages/Wickra)
|
||||||
[](https://github.com/wickra-lib/wickra#license)
|
[](https://github.com/wickra-lib/wickra#license)
|
||||||
|
|
||||||
**Streaming-first technical indicators for .NET. `dotnet add package Wickra` —
|
**Streaming-first technical indicators for C#. `dotnet add package Wickra` —
|
||||||
prebuilt native library, no system dependencies.**
|
prebuilt native library, no system dependencies.**
|
||||||
|
|
||||||
Wickra is a multi-language technical-analysis library with a Rust core and
|
Wickra is a multi-language technical-analysis library with a Rust core and
|
||||||
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R and any
|
bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R and any
|
||||||
other C-capable language. Every indicator is an O(1)
|
other C-capable language. Every indicator is an O(1)
|
||||||
streaming state machine, so live trading bots and historical backtests share
|
streaming state machine, so live trading bots and historical backtests share
|
||||||
the exact same implementation. This package is the .NET binding; it consumes the
|
the exact same implementation. This package is the C# binding; it consumes the
|
||||||
C ABI hub through `[LibraryImport]` P/Invoke and exposes all 514 streaming-first
|
C ABI hub through `[LibraryImport]` P/Invoke and exposes all 514 streaming-first
|
||||||
indicators as idiomatic `IDisposable` classes.
|
indicators as idiomatic `IDisposable` classes.
|
||||||
|
|
||||||
@@ -73,10 +73,17 @@ the main repository and documentation site:
|
|||||||
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
||||||
- **Runnable examples:** [`examples/csharp/`](https://github.com/wickra-lib/wickra/tree/main/examples/csharp)
|
- **Runnable examples:** [`examples/csharp/`](https://github.com/wickra-lib/wickra/tree/main/examples/csharp)
|
||||||
|
|
||||||
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a
|
Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
|
||||||
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against —
|
C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
|
||||||
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
Found a security issue? **Please don't open a public issue.** Report it privately
|
||||||
|
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
|
||||||
|
**support@wickra.org** with a subject line starting `[wickra security]`. Full
|
||||||
|
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
|
|
||||||
Wickra is an indicator toolkit, not a trading system. The values it computes
|
Wickra is an indicator toolkit, not a trading system. The values it computes
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
**Streaming-first technical indicators for Go, over the Wickra C ABI hub via cgo.**
|
**Streaming-first technical indicators for Go, over the Wickra C ABI hub via cgo.**
|
||||||
|
|
||||||
Wickra is a multi-language technical-analysis library with a Rust core and
|
Wickra is a multi-language technical-analysis library with a Rust core and
|
||||||
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R and
|
bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R and
|
||||||
any other C-capable language. Every indicator is an O(1) streaming state machine,
|
any other C-capable language. Every indicator is an O(1) streaming state machine,
|
||||||
so live trading bots and historical backtests share the exact same
|
so live trading bots and historical backtests share the exact same
|
||||||
implementation. This package is the Go binding; it consumes the C ABI hub through
|
implementation. This package is the Go binding; it consumes the C ABI hub through
|
||||||
@@ -108,10 +108,17 @@ main repository and documentation site:
|
|||||||
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
||||||
- **Runnable examples:** [`examples/go/`](https://github.com/wickra-lib/wickra/tree/main/examples/go)
|
- **Runnable examples:** [`examples/go/`](https://github.com/wickra-lib/wickra/tree/main/examples/go)
|
||||||
|
|
||||||
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a
|
Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
|
||||||
C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
|
C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
|
||||||
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
Found a security issue? **Please don't open a public issue.** Report it privately
|
||||||
|
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
|
||||||
|
**support@wickra.org** with a subject line starting `[wickra security]`. Full
|
||||||
|
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
|
|
||||||
Wickra is an indicator toolkit, not a trading system. The values it computes are
|
Wickra is an indicator toolkit, not a trading system. The values it computes are
|
||||||
|
|||||||
+10
-3
@@ -9,7 +9,7 @@
|
|||||||
& Memory API — prebuilt native library, no JNI, no system dependencies.**
|
& Memory API — prebuilt native library, no JNI, no system dependencies.**
|
||||||
|
|
||||||
Wickra is a multi-language technical-analysis library with a Rust core and
|
Wickra is a multi-language technical-analysis library with a Rust core and
|
||||||
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R
|
bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R
|
||||||
and any other C-capable language. Every indicator is an O(1) streaming state
|
and any other C-capable language. Every indicator is an O(1) streaming state
|
||||||
machine, so live trading bots and historical backtests share the exact same
|
machine, so live trading bots and historical backtests share the exact same
|
||||||
implementation. This package is the Java binding; it consumes the C ABI hub
|
implementation. This package is the Java binding; it consumes the C ABI hub
|
||||||
@@ -98,10 +98,17 @@ the main repository and documentation site:
|
|||||||
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
||||||
- **Runnable examples:** [`examples/java/`](https://github.com/wickra-lib/wickra/tree/main/examples/java)
|
- **Runnable examples:** [`examples/java/`](https://github.com/wickra-lib/wickra/tree/main/examples/java)
|
||||||
|
|
||||||
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a
|
Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
|
||||||
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against —
|
C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
|
||||||
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
Found a security issue? **Please don't open a public issue.** Report it privately
|
||||||
|
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
|
||||||
|
**support@wickra.org** with a subject line starting `[wickra security]`. Full
|
||||||
|
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
|
|
||||||
Wickra is an indicator toolkit, not a trading system. The values it computes
|
Wickra is an indicator toolkit, not a trading system. The values it computes
|
||||||
|
|||||||
+11
-4
@@ -9,11 +9,11 @@
|
|||||||
prebuilt native binary, no system dependencies.**
|
prebuilt native binary, no system dependencies.**
|
||||||
|
|
||||||
Wickra is a multi-language technical-analysis library with a Rust core and
|
Wickra is a multi-language technical-analysis library with a Rust core and
|
||||||
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R and any
|
bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R and any
|
||||||
other C-capable language. Every indicator is an O(1)
|
other C-capable language. Every indicator is an O(1)
|
||||||
streaming state machine, so live trading bots and historical backtests share
|
streaming state machine, so live trading bots and historical backtests share
|
||||||
the exact same implementation. This package is the Node.js binding (napi-rs);
|
the exact same implementation. This package is the Node.js binding (napi-rs);
|
||||||
it exposes 200+ streaming-first indicators across sixteen families.
|
it exposes all 514 streaming-first indicators across twenty-four families.
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
@@ -68,10 +68,17 @@ the main repository and documentation site:
|
|||||||
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
||||||
- **Runnable examples:** [`examples/node/`](https://github.com/wickra-lib/wickra/tree/main/examples/node)
|
- **Runnable examples:** [`examples/node/`](https://github.com/wickra-lib/wickra/tree/main/examples/node)
|
||||||
|
|
||||||
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a
|
Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
|
||||||
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against —
|
C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
|
||||||
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
Found a security issue? **Please don't open a public issue.** Report it privately
|
||||||
|
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
|
||||||
|
**support@wickra.org** with a subject line starting `[wickra security]`. Full
|
||||||
|
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
|
|
||||||
Wickra is an indicator toolkit, not a trading system. The values it computes
|
Wickra is an indicator toolkit, not a trading system. The values it computes
|
||||||
|
|||||||
@@ -9,11 +9,11 @@
|
|||||||
system dependencies, no C build tooling.**
|
system dependencies, no C build tooling.**
|
||||||
|
|
||||||
Wickra is a multi-language technical-analysis library with a Rust core and
|
Wickra is a multi-language technical-analysis library with a Rust core and
|
||||||
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R and any
|
bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R and any
|
||||||
other C-capable language. Every indicator is an O(1)
|
other C-capable language. Every indicator is an O(1)
|
||||||
streaming state machine, so live trading bots and historical backtests share
|
streaming state machine, so live trading bots and historical backtests share
|
||||||
the exact same implementation. This package is the Python binding (PyO3); it
|
the exact same implementation. This package is the Python binding (PyO3); it
|
||||||
exposes 200+ streaming-first indicators across sixteen families.
|
exposes all 514 streaming-first indicators across twenty-four families.
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
@@ -73,10 +73,17 @@ the main repository and documentation site:
|
|||||||
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
||||||
- **Runnable examples:** [`examples/python/`](https://github.com/wickra-lib/wickra/tree/main/examples/python)
|
- **Runnable examples:** [`examples/python/`](https://github.com/wickra-lib/wickra/tree/main/examples/python)
|
||||||
|
|
||||||
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a
|
Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
|
||||||
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against —
|
C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
|
||||||
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
Found a security issue? **Please don't open a public issue.** Report it privately
|
||||||
|
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
|
||||||
|
**support@wickra.org** with a subject line starting `[wickra security]`. Full
|
||||||
|
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
|
|
||||||
Wickra is an indicator toolkit, not a trading system. The values it computes
|
Wickra is an indicator toolkit, not a trading system. The values it computes
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
**Streaming-first technical indicators for R, over the Wickra C ABI hub via `.Call`.**
|
**Streaming-first technical indicators for R, over the Wickra C ABI hub via `.Call`.**
|
||||||
|
|
||||||
Wickra is a multi-language technical-analysis library with a Rust core and
|
Wickra is a multi-language technical-analysis library with a Rust core and
|
||||||
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R
|
bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R
|
||||||
and any other C-capable language. Every indicator is an O(1) streaming state
|
and any other C-capable language. Every indicator is an O(1) streaming state
|
||||||
machine, so live trading and historical backtests share the exact same
|
machine, so live trading and historical backtests share the exact same
|
||||||
implementation. This package is the R binding; it reaches the C ABI hub through
|
implementation. This package is the R binding; it reaches the C ABI hub through
|
||||||
@@ -79,10 +79,17 @@ main repository and documentation site:
|
|||||||
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
||||||
- **Runnable examples:** [`examples/r/`](https://github.com/wickra-lib/wickra/tree/main/examples/r)
|
- **Runnable examples:** [`examples/r/`](https://github.com/wickra-lib/wickra/tree/main/examples/r)
|
||||||
|
|
||||||
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a
|
Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
|
||||||
C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
|
C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
|
||||||
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
Found a security issue? **Please don't open a public issue.** Report it privately
|
||||||
|
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
|
||||||
|
**support@wickra.org** with a subject line starting `[wickra security]`. Full
|
||||||
|
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
|
|
||||||
Wickra is an indicator toolkit, not a trading system. The values it computes are
|
Wickra is an indicator toolkit, not a trading system. The values it computes are
|
||||||
|
|||||||
+14
-7
@@ -1,4 +1,4 @@
|
|||||||
# Wickra — WebAssembly
|
# Wickra — WASM
|
||||||
|
|
||||||
[](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml)
|
[](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml)
|
||||||
[](https://codecov.io/gh/wickra-lib/wickra)
|
[](https://codecov.io/gh/wickra-lib/wickra)
|
||||||
@@ -9,12 +9,12 @@
|
|||||||
wickra-wasm` — pure WebAssembly, runs anywhere a modern JS engine does.**
|
wickra-wasm` — pure WebAssembly, runs anywhere a modern JS engine does.**
|
||||||
|
|
||||||
Wickra is a multi-language technical-analysis library with a Rust core and
|
Wickra is a multi-language technical-analysis library with a Rust core and
|
||||||
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R and any
|
bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R and any
|
||||||
other C-capable language. Every indicator is an O(1)
|
other C-capable language. Every indicator is an O(1)
|
||||||
streaming state machine, so live trading dashboards and historical backtests
|
streaming state machine, so live trading dashboards and historical backtests
|
||||||
share the exact same implementation. This package is the WebAssembly binding
|
share the exact same implementation. This package is the WASM binding
|
||||||
(wasm-bindgen, built for the `web` target); it exposes 200+ streaming-first
|
(wasm-bindgen, built for the `web` target); it exposes all 514 streaming-first
|
||||||
indicators across sixteen families.
|
indicators across twenty-four families.
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
@@ -67,10 +67,17 @@ the main repository and documentation site:
|
|||||||
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
||||||
- **Runnable browser examples:** [`examples/wasm/`](https://github.com/wickra-lib/wickra/tree/main/examples/wasm)
|
- **Runnable browser examples:** [`examples/wasm/`](https://github.com/wickra-lib/wickra/tree/main/examples/wasm)
|
||||||
|
|
||||||
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a
|
Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
|
||||||
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against —
|
C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
|
||||||
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
Found a security issue? **Please don't open a public issue.** Report it privately
|
||||||
|
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
|
||||||
|
**support@wickra.org** with a subject line starting `[wickra security]`. Full
|
||||||
|
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
|
|
||||||
Wickra is an indicator toolkit, not a trading system. The values it computes
|
Wickra is an indicator toolkit, not a trading system. The values it computes
|
||||||
|
|||||||
+4
-2
@@ -14,11 +14,13 @@ That includes:
|
|||||||
[Java](https://docs.wickra.org/Quickstart-Java), and
|
[Java](https://docs.wickra.org/Quickstart-Java), and
|
||||||
[R](https://docs.wickra.org/Quickstart-R).
|
[R](https://docs.wickra.org/Quickstart-R).
|
||||||
- A per-indicator deep dive for every one of the **514 indicators** across
|
- A per-indicator deep dive for every one of the **514 indicators** across
|
||||||
the sixteen families (Moving Averages, Momentum Oscillators, Trend &
|
the twenty-four families (Moving Averages, Momentum Oscillators, Trend &
|
||||||
Directional, Price Oscillators, Volatility & Bands, Bands & Channels,
|
Directional, Price Oscillators, Volatility & Bands, Bands & Channels,
|
||||||
Trailing Stops, Volume, Price Statistics, Ehlers / Cycle DSP, Pivots &
|
Trailing Stops, Volume, Price Statistics, Ehlers / Cycle DSP, Pivots &
|
||||||
S/R, DeMark, Ichimoku & Charts, Candlestick Patterns, Market Profile,
|
S/R, DeMark, Ichimoku & Charts, Candlestick Patterns, Market Profile,
|
||||||
Risk / Performance) — see the
|
Risk / Performance, Microstructure, Derivatives, Alt-Chart Bars, Market
|
||||||
|
Breadth, Seasonality & Session, Chart Patterns, Harmonic Patterns,
|
||||||
|
Fibonacci) — see the
|
||||||
[indicators overview](https://docs.wickra.org/Indicators-Overview).
|
[indicators overview](https://docs.wickra.org/Indicators-Overview).
|
||||||
- **Reference pages**: [warmup periods](https://docs.wickra.org/Warmup-Periods),
|
- **Reference pages**: [warmup periods](https://docs.wickra.org/Warmup-Periods),
|
||||||
[streaming vs batch](https://docs.wickra.org/Streaming-vs-Batch),
|
[streaming vs batch](https://docs.wickra.org/Streaming-vs-Batch),
|
||||||
|
|||||||
+2
-2
@@ -48,7 +48,7 @@ three `strategy_*`) build against the bundled datasets and run under `ctest`.
|
|||||||
run in CI; run them by hand. `parallel_assets` links OpenMP when the toolchain
|
run in CI; run them by hand. `parallel_assets` links OpenMP when the toolchain
|
||||||
provides it and falls back to a single-threaded run otherwise.
|
provides it and falls back to a single-threaded run otherwise.
|
||||||
|
|
||||||
## C# / .NET — `examples/csharp/`
|
## C# — `examples/csharp/`
|
||||||
|
|
||||||
Build the C ABI library first (`cargo build -p wickra-c --release`), then run any
|
Build the C ABI library first (`cargo build -p wickra-c --release`), then run any
|
||||||
example with the .NET 8 SDK; the binding resolves the native library automatically.
|
example with the .NET 8 SDK; the binding resolves the native library automatically.
|
||||||
@@ -173,7 +173,7 @@ cd ../../examples/node && npm install # links wickra + installs `ws`
|
|||||||
| `strategy_macd_adx.js` | Hourly BTCUSDT trend-follower: MACD crossover entries gated by ADX(14) > 20. | `node strategy_macd_adx.js` |
|
| `strategy_macd_adx.js` | Hourly BTCUSDT trend-follower: MACD crossover entries gated by ADX(14) > 20. | `node strategy_macd_adx.js` |
|
||||||
| `strategy_bollinger_squeeze.js` | Daily BTCUSDT Bollinger-squeeze breakout with ATR(14) trailing stop. | `node strategy_bollinger_squeeze.js` |
|
| `strategy_bollinger_squeeze.js` | Daily BTCUSDT Bollinger-squeeze breakout with ATR(14) trailing stop. | `node strategy_bollinger_squeeze.js` |
|
||||||
|
|
||||||
## WebAssembly — `examples/wasm/`
|
## WASM — `examples/wasm/`
|
||||||
|
|
||||||
Build the WASM module first (one-time):
|
Build the WASM module first (one-time):
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Wickra examples — C# / .NET
|
# Wickra examples — C#
|
||||||
|
|
||||||
Runnable .NET examples for the [Wickra .NET binding](../../bindings/csharp).
|
Runnable C# examples for the [Wickra C# binding](../../bindings/csharp).
|
||||||
Each example is a small console project that references the `Wickra` project and
|
Each example is a small console project that references the `Wickra` project and
|
||||||
resolves the native library automatically (from `target/release` during local
|
resolves the native library automatically (from `target/release` during local
|
||||||
development, or the NuGet `runtimes/` layout when packaged).
|
development, or the NuGet `runtimes/` layout when packaged).
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Wickra WASM examples
|
# Wickra WASM examples
|
||||||
|
|
||||||
Browser demos for the `wickra-wasm` WebAssembly binding. Every demo loads
|
Browser demos for the `wickra-wasm` WASM binding. Every demo loads
|
||||||
the module the same way (`init()` then construct indicators) so the
|
the module the same way (`init()` then construct indicators) so the
|
||||||
patterns transfer one-to-one to your own page.
|
patterns transfer one-to-one to your own page.
|
||||||
|
|
||||||
@@ -61,4 +61,4 @@ indicators tracks those.
|
|||||||
- [Quickstart: WASM](https://docs.wickra.org/Quickstart-WASM) — module-load
|
- [Quickstart: WASM](https://docs.wickra.org/Quickstart-WASM) — module-load
|
||||||
flow, `wasm-pack` targets, and the streaming API.
|
flow, `wasm-pack` targets, and the streaming API.
|
||||||
- [examples/README.md](../README.md) — cross-language index, including
|
- [examples/README.md](../README.md) — cross-language index, including
|
||||||
the Rust, Python, Node, C and C# siblings of every demo above.
|
the Rust, Python, Node.js, C and C# siblings of every demo above.
|
||||||
|
|||||||
Reference in New Issue
Block a user