Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a3950bf31b | |||
| a0a7bc4e62 | |||
| 0c925aa9d5 | |||
| d9e6807ca0 | |||
| eb50ae4e90 | |||
| 4a12f60a88 | |||
| 8003572d92 | |||
| db5bd5e028 | |||
| 2ef60874b9 | |||
| d59cd44043 | |||
| ee5ee6980e | |||
| 60b4705d7e | |||
| 08b2e5abd3 | |||
| 495d9edcc3 | |||
| c32b802461 | |||
| 7e3be0d1ac | |||
| 1a90de89ea | |||
| bb901fbd25 | |||
| 692473452f | |||
| 2a5b012068 | |||
| 513e1111d2 | |||
| 4b0bdef7c6 | |||
| 3e4b6c7e22 | |||
| dd6a4affb2 | |||
| e5e094d370 | |||
| 97940046d1 | |||
| f7f0bfbc48 | |||
| 8ccfd638b2 | |||
| 452f270b4d | |||
| baffebd3da | |||
| e631e55195 | |||
| 63949f6fc8 | |||
| 92210eb7b8 | |||
| c3029f2548 | |||
| 806ae22abe | |||
| fb9c39d4cd |
@@ -30,9 +30,9 @@ assignees: ""
|
||||
## Environment
|
||||
|
||||
- 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:
|
||||
- Rust / Python / Node / .NET version (If relevant):
|
||||
- Rust / Python / Node.js / .NET version (If relevant):
|
||||
|
||||
## Additional context
|
||||
|
||||
|
||||
@@ -15,9 +15,9 @@ assignees: []
|
||||
- [ ] Rust crate (`wickra`)
|
||||
- [ ] Python (`pip install wickra`)
|
||||
- [ ] Node.js (`npm install wickra`)
|
||||
- [ ] WebAssembly
|
||||
- [ ] WASM
|
||||
- [ ] C ABI (`bindings/c`)
|
||||
- [ ] C# / .NET (`Wickra` on NuGet)
|
||||
- [ ] C# (`Wickra` on NuGet)
|
||||
- [ ] Go (`bindings/go`)
|
||||
- [ ] Java (`org.wickra:wickra` on Maven Central)
|
||||
- [ ] R (`bindings/r`)
|
||||
@@ -31,7 +31,7 @@ assignees: []
|
||||
| Binding version | `e.g. python 0.4.2 / node 0.4.2` |
|
||||
| OS / arch | `e.g. Windows 11 x86_64, Linux glibc` |
|
||||
| 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
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ assignees: ""
|
||||
- [ ] Should be exposed in the Node binding
|
||||
- [ ] Should be exposed in the WASM binding
|
||||
- [ ] 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 Java binding
|
||||
- [ ] Should be exposed in the R binding
|
||||
|
||||
@@ -13,7 +13,7 @@ assignees: []
|
||||
## Affected code path
|
||||
|
||||
- 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?
|
||||
|
||||
## Versions compared
|
||||
|
||||
@@ -33,4 +33,4 @@ import wickra as ta
|
||||
## Environment (Only if relevant)
|
||||
|
||||
- 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 test --workspace` passes.
|
||||
- [ ] 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).
|
||||
- [ ] The relevant page on the [documentation site](https://docs.wickra.org)
|
||||
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`)
|
||||
- [ ] Python binding (`bindings/python`)
|
||||
- [ ] Node.js binding (`bindings/node`)
|
||||
- [ ] WebAssembly binding (`bindings/wasm`)
|
||||
- [ ] WASM binding (`bindings/wasm`)
|
||||
- [ ] C ABI (`bindings/c`)
|
||||
- [ ] C# / .NET binding (`bindings/csharp`)
|
||||
- [ ] C# binding (`bindings/csharp`)
|
||||
- [ ] Go binding (`bindings/go`)
|
||||
- [ ] Java binding (`bindings/java`)
|
||||
- [ ] R binding (`bindings/r`)
|
||||
|
||||
@@ -10,6 +10,9 @@ updates:
|
||||
default-days: 7
|
||||
commit-message:
|
||||
prefix: "deps(cargo)"
|
||||
groups:
|
||||
cargo:
|
||||
patterns: ["*"]
|
||||
|
||||
# Node binding npm dependencies.
|
||||
- package-ecosystem: npm
|
||||
@@ -21,6 +24,9 @@ updates:
|
||||
default-days: 7
|
||||
commit-message:
|
||||
prefix: "deps(npm)"
|
||||
groups:
|
||||
node-binding:
|
||||
patterns: ["*"]
|
||||
|
||||
# Python binding pip dependencies.
|
||||
- package-ecosystem: pip
|
||||
@@ -32,6 +38,9 @@ updates:
|
||||
default-days: 7
|
||||
commit-message:
|
||||
prefix: "deps(pip)"
|
||||
groups:
|
||||
python-binding:
|
||||
patterns: ["*"]
|
||||
|
||||
# Hash-pinned CI/bench Python tooling under .github/requirements/. Each
|
||||
# <name>.in is the loose source; the matching hash-locked <name>.txt is the
|
||||
@@ -47,6 +56,9 @@ updates:
|
||||
default-days: 7
|
||||
commit-message:
|
||||
prefix: "deps(ci-pip)"
|
||||
groups:
|
||||
ci-pip:
|
||||
patterns: ["*"]
|
||||
|
||||
# GitHub Actions — keeps the SHA-pinned actions current (Dependabot reads
|
||||
# the version comment after each pinned SHA and bumps both together).
|
||||
@@ -59,3 +71,73 @@ updates:
|
||||
default-days: 7
|
||||
commit-message:
|
||||
prefix: "deps(actions)"
|
||||
groups:
|
||||
github-actions:
|
||||
patterns: ["*"]
|
||||
|
||||
# Java binding + examples (Maven). Tracks the C-ABI binding's build plugins
|
||||
# (e.g. central-publishing-maven-plugin) and the examples' jackson dependency,
|
||||
# which had no Dependabot coverage before — a stale publishing plugin slipped
|
||||
# through unnoticed until an OSV scan flagged it.
|
||||
- package-ecosystem: maven
|
||||
directories:
|
||||
- "/bindings/java"
|
||||
- "/bindings/java/benchmarks"
|
||||
- "/examples/java"
|
||||
schedule:
|
||||
interval: weekly
|
||||
open-pull-requests-limit: 10
|
||||
cooldown:
|
||||
default-days: 7
|
||||
commit-message:
|
||||
prefix: "deps(maven)"
|
||||
groups:
|
||||
maven:
|
||||
patterns: ["*"]
|
||||
|
||||
# C# binding (NuGet). The published Wickra.csproj is a thin C-ABI wrapper with
|
||||
# no external packages, but the test and benchmark projects pull xunit,
|
||||
# Microsoft.NET.Test.Sdk and BenchmarkDotNet.
|
||||
- package-ecosystem: nuget
|
||||
directories:
|
||||
- "/bindings/csharp/Wickra.Tests"
|
||||
- "/bindings/csharp/benchmarks"
|
||||
schedule:
|
||||
interval: weekly
|
||||
open-pull-requests-limit: 10
|
||||
cooldown:
|
||||
default-days: 7
|
||||
commit-message:
|
||||
prefix: "deps(nuget)"
|
||||
groups:
|
||||
nuget:
|
||||
patterns: ["*"]
|
||||
|
||||
# Node examples (npm) — separate from the binding's own package.json.
|
||||
- package-ecosystem: npm
|
||||
directory: "/examples/node"
|
||||
schedule:
|
||||
interval: weekly
|
||||
open-pull-requests-limit: 10
|
||||
cooldown:
|
||||
default-days: 7
|
||||
commit-message:
|
||||
prefix: "deps(npm)"
|
||||
groups:
|
||||
node-examples:
|
||||
patterns: ["*"]
|
||||
|
||||
# Go examples (Go modules). The binding's own go.mod has no external deps;
|
||||
# the examples pull coder/websocket.
|
||||
- package-ecosystem: gomod
|
||||
directory: "/examples/go"
|
||||
schedule:
|
||||
interval: weekly
|
||||
open-pull-requests-limit: 10
|
||||
cooldown:
|
||||
default-days: 7
|
||||
commit-message:
|
||||
prefix: "deps(gomod)"
|
||||
groups:
|
||||
go-examples:
|
||||
patterns: ["*"]
|
||||
|
||||
@@ -48,7 +48,7 @@ jobs:
|
||||
name: Cross-library benchmark report
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -122,7 +122,7 @@ jobs:
|
||||
name: Rust cross-library benchmark report
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
+36
-35
@@ -40,7 +40,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -107,7 +107,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20 # backstop: cap a wedged job instead of GitHub's 6h default (slowest real job ~5 min)
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -116,7 +116,7 @@ jobs:
|
||||
continue-on-error: true
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: "20"
|
||||
node-version: "22"
|
||||
|
||||
- name: Wait before Node retry
|
||||
if: steps.setup_node.outcome == 'failure'
|
||||
@@ -129,7 +129,7 @@ jobs:
|
||||
if: steps.setup_node.outcome == 'failure'
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: "20"
|
||||
node-version: "22"
|
||||
|
||||
- name: Set up Python
|
||||
id: setup_python
|
||||
@@ -197,7 +197,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20 # backstop: cap a wedged job instead of GitHub's 6h default (slowest real job ~5 min)
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -231,7 +231,7 @@ jobs:
|
||||
continue-on-error: true
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: "20"
|
||||
node-version: "22"
|
||||
|
||||
- name: Wait before Node retry
|
||||
if: steps.setup_node.outcome == 'failure'
|
||||
@@ -244,7 +244,7 @@ jobs:
|
||||
if: steps.setup_node.outcome == 'failure'
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: "20"
|
||||
node-version: "22"
|
||||
|
||||
- name: Cache cargo
|
||||
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||
@@ -291,7 +291,7 @@ jobs:
|
||||
toolchain: "1.88"
|
||||
packages: "-p wickra-node"
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -330,7 +330,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20 # backstop: cap a wedged job instead of GitHub's 6h default (slowest real job ~5 min)
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -345,7 +345,7 @@ jobs:
|
||||
timeout-minutes: 6
|
||||
|
||||
- name: Install cargo-llvm-cov
|
||||
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
||||
uses: taiki-e/install-action@59012be0884e296ca2da49b530610e72c49039ad # v2.81.6
|
||||
timeout-minutes: 10 # fail fast on a stuck download instead of hanging the job
|
||||
with:
|
||||
tool: cargo-llvm-cov
|
||||
@@ -372,7 +372,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20 # backstop: cap a wedged job instead of GitHub's 6h default (slowest real job ~5 min)
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -391,7 +391,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20 # backstop: cap a wedged job instead of GitHub's 6h default (slowest real job ~5 min)
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -415,7 +415,7 @@ jobs:
|
||||
# attributes the modern nightly compiler rejects, so the install
|
||||
# never gets off the ground. The prebuilt binary avoids the entire
|
||||
# transitive-dep compile.
|
||||
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
||||
uses: taiki-e/install-action@59012be0884e296ca2da49b530610e72c49039ad # v2.81.6
|
||||
timeout-minutes: 10 # fail fast on a stuck download instead of hanging the job
|
||||
with:
|
||||
tool: cargo-fuzz
|
||||
@@ -450,7 +450,7 @@ jobs:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
python-version: ["3.9", "3.11", "3.12", "3.13"]
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -527,7 +527,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20 # backstop: cap a wedged job instead of GitHub's 6h default (slowest real job ~5 min)
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -549,7 +549,7 @@ jobs:
|
||||
# same taiki-e prebuilt-binary installer we already use for
|
||||
# cargo-llvm-cov and cargo-fuzz; it tracks the latest wasm-pack
|
||||
# release, which has `--features` as a top-level flag (since 0.12).
|
||||
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
||||
uses: taiki-e/install-action@59012be0884e296ca2da49b530610e72c49039ad # v2.81.6
|
||||
timeout-minutes: 10 # fail fast on a stuck download instead of hanging the job
|
||||
with:
|
||||
tool: wasm-pack
|
||||
@@ -574,9 +574,9 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
node-version: ["18", "20"]
|
||||
node-version: ["22", "24"]
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -637,7 +637,7 @@ jobs:
|
||||
with:
|
||||
timeout_minutes: 6
|
||||
max_attempts: 2
|
||||
command: cd bindings/node && node --test __tests__/
|
||||
command: cd bindings/node && node --test
|
||||
shell: bash
|
||||
|
||||
c-abi:
|
||||
@@ -649,7 +649,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -662,7 +662,7 @@ jobs:
|
||||
timeout-minutes: 6
|
||||
|
||||
- name: Install cbindgen
|
||||
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
||||
uses: taiki-e/install-action@59012be0884e296ca2da49b530610e72c49039ad # v2.81.6
|
||||
timeout-minutes: 10 # fail fast on a stuck download instead of hanging the job
|
||||
with:
|
||||
tool: cbindgen
|
||||
@@ -705,7 +705,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -756,7 +756,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -766,7 +766,7 @@ jobs:
|
||||
- name: Set up Go
|
||||
id: setup-go
|
||||
continue-on-error: true
|
||||
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
|
||||
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
|
||||
with:
|
||||
go-version: "stable"
|
||||
cache: false
|
||||
@@ -780,7 +780,7 @@ jobs:
|
||||
|
||||
- name: Set up Go (retry)
|
||||
if: steps.setup-go.outcome == 'failure'
|
||||
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
|
||||
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
|
||||
with:
|
||||
go-version: "stable"
|
||||
cache: false
|
||||
@@ -882,7 +882,7 @@ jobs:
|
||||
WICKRA_INCLUDE_DIR: ${{ github.workspace }}/bindings/c/include
|
||||
WICKRA_LIB_DIR: ${{ github.workspace }}/target/release
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -961,7 +961,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -975,18 +975,19 @@ jobs:
|
||||
|
||||
# The binding links the C ABI hub at runtime through the Java FFM API; build
|
||||
# it first so WickraNative's development fallback finds
|
||||
# target/release/wickra.{so,dylib,dll}. JDK 22+ is required for the final FFM
|
||||
# API, so it is installed explicitly (runners ship 17/21).
|
||||
# target/release/wickra.{so,dylib,dll}. The FFM API is final since JDK 22; we
|
||||
# build on the 25 LTS (22 is EOL; the pom pins bytecode to release 22 so the
|
||||
# runtime floor stays Java 22). Installed explicitly (runners ship 17/21).
|
||||
- name: Build the C ABI library
|
||||
run: cargo build -p wickra-c --release
|
||||
|
||||
- name: Set up JDK 22
|
||||
- name: Set up JDK 25
|
||||
id: setup-java
|
||||
continue-on-error: true
|
||||
uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
|
||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: "22"
|
||||
java-version: "25"
|
||||
cache: maven
|
||||
|
||||
- name: Retry JDK setup (CDN flake)
|
||||
@@ -996,12 +997,12 @@ jobs:
|
||||
echo "::warning::setup-java failed (likely CDN flake), waiting 30s before retry..."
|
||||
sleep 30
|
||||
|
||||
- name: Set up JDK 22 (retry)
|
||||
- name: Set up JDK 25 (retry)
|
||||
if: steps.setup-java.outcome == 'failure'
|
||||
uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
|
||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: "22"
|
||||
java-version: "25"
|
||||
cache: maven
|
||||
|
||||
- name: Java info
|
||||
|
||||
@@ -40,17 +40,17 @@ jobs:
|
||||
build-mode: none
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@03e4368ac7daa2bd82b3e85262f3bf87ee112f57 # v3.36.0
|
||||
uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
build-mode: ${{ matrix.build-mode }}
|
||||
|
||||
- name: Perform CodeQL analysis
|
||||
uses: github/codeql-action/analyze@03e4368ac7daa2bd82b3e85262f3bf87ee112f57 # v3.36.0
|
||||
uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
|
||||
with:
|
||||
category: "/language:${{ matrix.language }}"
|
||||
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
# Settings -> Environments.
|
||||
environment: release
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable branch, 2026-03-27
|
||||
@@ -110,7 +110,7 @@ jobs:
|
||||
# consumers can audit the published dependency tree without
|
||||
# re-resolving Cargo.lock.
|
||||
- name: Install cargo-cyclonedx
|
||||
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
||||
uses: taiki-e/install-action@59012be0884e296ca2da49b530610e72c49039ad # v2.81.6
|
||||
timeout-minutes: 10 # fail fast on a stuck download instead of hanging the job
|
||||
with:
|
||||
tool: cargo-cyclonedx
|
||||
@@ -157,7 +157,7 @@ jobs:
|
||||
- { os: windows-11-arm, target: aarch64, manylinux: auto }
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Set up Python
|
||||
@@ -197,7 +197,7 @@ jobs:
|
||||
name: Build Python sdist
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Sync root README into bindings/python so it ships in the sdist
|
||||
@@ -249,7 +249,7 @@ jobs:
|
||||
- { host: windows-11-arm, target: aarch64-pc-windows-msvc }
|
||||
runs-on: ${{ matrix.host }}
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -258,7 +258,7 @@ jobs:
|
||||
continue-on-error: true
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: "20"
|
||||
node-version: "22"
|
||||
|
||||
- name: Wait before Node retry
|
||||
if: steps.setup_node.outcome == 'failure'
|
||||
@@ -271,7 +271,7 @@ jobs:
|
||||
if: steps.setup_node.outcome == 'failure'
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: "20"
|
||||
node-version: "22"
|
||||
|
||||
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable branch, 2026-03-27
|
||||
with:
|
||||
@@ -310,7 +310,7 @@ jobs:
|
||||
contents: read
|
||||
id-token: write
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -319,7 +319,7 @@ jobs:
|
||||
continue-on-error: true
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: "20"
|
||||
node-version: "22"
|
||||
registry-url: "https://registry.npmjs.org"
|
||||
|
||||
- name: Wait before Node retry
|
||||
@@ -333,7 +333,7 @@ jobs:
|
||||
if: steps.setup_node.outcome == 'failure'
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: "20"
|
||||
node-version: "22"
|
||||
registry-url: "https://registry.npmjs.org"
|
||||
|
||||
- name: Install Node deps
|
||||
@@ -479,7 +479,7 @@ jobs:
|
||||
contents: read
|
||||
id-token: write
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -488,7 +488,7 @@ jobs:
|
||||
continue-on-error: true
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: "20"
|
||||
node-version: "22"
|
||||
registry-url: "https://registry.npmjs.org"
|
||||
|
||||
- name: Wait before Node retry
|
||||
@@ -502,7 +502,7 @@ jobs:
|
||||
if: steps.setup_node.outcome == 'failure'
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: "20"
|
||||
node-version: "22"
|
||||
registry-url: "https://registry.npmjs.org"
|
||||
|
||||
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable branch, 2026-03-27
|
||||
@@ -512,7 +512,7 @@ jobs:
|
||||
- name: Install wasm-pack (latest, via prebuilt binary)
|
||||
# See the matching note in ci.yml: jetli's default installs an old
|
||||
# 0.10.x wasm-pack whose build subcommand rejects --features.
|
||||
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
||||
uses: taiki-e/install-action@59012be0884e296ca2da49b530610e72c49039ad # v2.81.6
|
||||
timeout-minutes: 10 # fail fast on a stuck download instead of hanging the job
|
||||
with:
|
||||
tool: wasm-pack
|
||||
@@ -588,7 +588,7 @@ jobs:
|
||||
- { host: windows-11-arm, target: aarch64-pc-windows-msvc }
|
||||
runs-on: ${{ matrix.host }}
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -638,7 +638,7 @@ jobs:
|
||||
contents: read
|
||||
id-token: write # request the GitHub OIDC token for trusted publishing
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -718,7 +718,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
environment: release
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -757,11 +757,11 @@ jobs:
|
||||
|
||||
# setup-java writes a settings.xml with the 'central' server credentials
|
||||
# (mapped from the env vars below) and imports the GPG signing key.
|
||||
- name: Set up JDK 22 + Maven Central credentials + GPG
|
||||
uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
|
||||
- name: Set up JDK 25 + Maven Central credentials + GPG
|
||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: "22"
|
||||
java-version: "25"
|
||||
server-id: central
|
||||
server-username: CENTRAL_USERNAME
|
||||
server-password: CENTRAL_PASSWORD
|
||||
@@ -788,7 +788,7 @@ jobs:
|
||||
needs: c-abi-build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -876,8 +876,9 @@ jobs:
|
||||
# bundle to this same release without re-resolving it.
|
||||
outputs:
|
||||
tag: ${{ steps.tag.outputs.tag }}
|
||||
version: ${{ steps.tag.outputs.version }}
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
fetch-depth: 0
|
||||
@@ -904,6 +905,7 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
||||
echo "version=${tag#v}" >> "$GITHUB_OUTPUT"
|
||||
echo "::notice::attaching assets to release $tag"
|
||||
|
||||
- name: Download all build artifacts
|
||||
@@ -941,7 +943,7 @@ jobs:
|
||||
# the provenance bundle is attached (P24, immutability-ready).
|
||||
draft: true
|
||||
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
|
||||
|
||||
@@ -950,21 +952,37 @@ jobs:
|
||||
pip install wickra
|
||||
npm install wickra
|
||||
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
|
||||
|
||||
Pre-built artefacts for every supported platform — the same files that
|
||||
were uploaded to crates.io, PyPI, and npm by this workflow run.
|
||||
Pre-built artefacts for every supported platform — the same files this
|
||||
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)
|
||||
- `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)
|
||||
- `wickra-*.tgz` — npm-pack tarballs (main package + per-platform subpackages + WASM)
|
||||
- `*.crate` — cargo source crates (wickra-core, wickra-data, wickra)
|
||||
- `wickra-c-<target>.tar.gz` — C ABI: `include/wickra.h` + `wickra.hpp`
|
||||
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
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ jobs:
|
||||
id-token: write # OIDC token to publish results to the OpenSSF API
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -51,6 +51,6 @@ jobs:
|
||||
retention-days: 5
|
||||
|
||||
- name: Upload SARIF to code-scanning
|
||||
uses: github/codeql-action/upload-sarif@03e4368ac7daa2bd82b3e85262f3bf87ee112f57 # v3.36.0
|
||||
uses: github/codeql-action/upload-sarif@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
||||
@@ -93,7 +93,7 @@ jobs:
|
||||
# Fetching the now-gone `refs/heads/<branch>` then fails the run (exit 1).
|
||||
# The head SHA stays reachable via `refs/pull/N/head` after the branch is
|
||||
# gone, so the checkout — and the run — survives an instant merge.
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 1
|
||||
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.ref }}
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
name: metadata audit
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
||||
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
actions: read # online audits resolve referenced actions
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
+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 │
|
||||
└──────────┘ └──────────┘ └──────────────┘ └─────────┬───────────┘
|
||||
│ 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
|
||||
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
|
||||
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
|
||||
(`bindings/r`, `.Call`) and the **Java** binding (`bindings/java`, the Java FFM
|
||||
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-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-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-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
|
||||
|
||||
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,
|
||||
R or WebAssembly to benchmark against). Every binding calls the **same** Rust
|
||||
Python and Rust (there is no comparable streaming TA library for C, C++, C#, Go, Java,
|
||||
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
|
||||
cross-library ratio — they document the raw cost of crossing each language's FFI
|
||||
boundary, in million updates per second (Mupd/s).
|
||||
@@ -127,12 +127,12 @@ AMD Ryzen 9 9950X):
|
||||
| Target | streaming (Mupd/s) | batch (Mupd/s) |
|
||||
|----------------------|-------------------:|---------------:|
|
||||
| Rust core (no FFI) | 391 | 500 |
|
||||
| C | 383 | 330 |
|
||||
| C# / .NET | 337 | 244 |
|
||||
| C / C++ | 383 | 330 |
|
||||
| C# | 337 | 244 |
|
||||
| Python | 33 | 488 |
|
||||
| Java | 28 | 175 |
|
||||
| Go | 24 | 400 |
|
||||
| WebAssembly | 19 | 167 |
|
||||
| WASM | 19 | 167 |
|
||||
| Node.js | 17 | 10 |
|
||||
| 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
|
||||
cmake -S bindings/c/benchmarks -B build/cbench && cmake --build build/cbench \
|
||||
&& ./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)
|
||||
mvn -q -f bindings/java install -DskipTests \
|
||||
&& mvn -q -f bindings/java/benchmarks exec:exec -Dexec.mainClass=org.wickra.benchmarks.Throughput
|
||||
|
||||
+102
-1
@@ -7,6 +7,103 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [0.9.1] - 2026-06-14
|
||||
|
||||
### Added
|
||||
- C ABI hub: every indicator now exposes `wickra_<ind>_warmup_period` and
|
||||
`wickra_<ind>_is_ready`, closing the gap with the native bindings (which
|
||||
already had them). The C-ABI languages surface them idiomatically: C# `int
|
||||
WarmupPeriod()` / `bool IsReady()`, Go `WarmupPeriod()` / `IsReady()`, Java
|
||||
`int warmupPeriod()` / `boolean isReady()`, and R `warmup_period()` /
|
||||
`is_ready()` generics. The alt-chart bar builders are excluded by design (a
|
||||
candle can complete 0..n bars, so they have no warmup).
|
||||
- Runnable rustdoc examples for 23 indicators that previously lacked one.
|
||||
- A Requirements reference documenting the minimum supported version per
|
||||
language — a new page in the documentation site plus README, marketing-site
|
||||
and organization-profile sections.
|
||||
|
||||
### Changed
|
||||
- Raised the minimum Node.js version to 20 — Node 18 reached end-of-life. The
|
||||
prebuilt N-API addon is now tested on the active LTS lines (22 and 24).
|
||||
- The Java binding now builds on the JDK 25 LTS in CI (JDK 22 reached
|
||||
end-of-life); the published bytecode still targets Java 22, so the runtime
|
||||
requirement is unchanged.
|
||||
- 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.
|
||||
- Python binding: upgraded `pyo3` and `rust-numpy` from 0.28 to 0.29. No public
|
||||
API changes; the full test suite passes unchanged.
|
||||
|
||||
### Fixed
|
||||
- Corrected the internal casing of the `RelativeStrengthAB` binding wrappers,
|
||||
which used `...Ab` (`WasmRelativeStrengthAb` in the WASM crate,
|
||||
`RelativeStrengthAbNode` in the Node crate) while every other surface uses the
|
||||
acronym `AB`. The published JS/WASM class name was already `RelativeStrengthAB`
|
||||
(set via `js_name`/`js_class`), so the runtime API is unchanged; the only
|
||||
visible change is the auto-generated TypeScript type alias, renamed
|
||||
`RelativeStrengthAbNode` → `RelativeStrengthABNode` in `index.d.ts`.
|
||||
|
||||
### Security
|
||||
- Resolved the pyo3 advisories RUSTSEC-2026-0176 (out-of-bounds read in
|
||||
`PyList`/`PyTuple` `nth`/`nth_back`) and RUSTSEC-2026-0177 (missing `Sync`
|
||||
bound on `PyCFunction::new_closure`) by upgrading to pyo3 0.29, which fixes
|
||||
both. The upgrade was previously blocked upstream by rust-numpy 0.28 pinning
|
||||
pyo3 `^0.28`; rust-numpy 0.29 lifts that pin. The not-affected exceptions are
|
||||
removed from `deny.toml` and `osv-scanner.toml`.
|
||||
|
||||
## [0.9.0] - 2026-06-13
|
||||
|
||||
Maintenance release: Java build-dependency updates and CI/Dependabot
|
||||
housekeeping only. No library code or public API changes.
|
||||
|
||||
### Changed
|
||||
- Java binding: upgraded the test framework to JUnit Jupiter 6.1.0 (from
|
||||
5.10.2) and bumped the Maven build plugins — `maven-compiler-plugin`
|
||||
3.13.0 → 3.15.0, `maven-surefire-plugin` 3.2.5 → 3.5.6, `maven-jar-plugin`
|
||||
3.4.1 → 3.5.0, `maven-source-plugin` 3.3.1 → 3.4.0, `maven-javadoc-plugin`
|
||||
3.7.0 → 3.12.0, and `maven-gpg-plugin` 3.2.4 → 3.2.8.
|
||||
- Java benchmarks and examples: bumped `maven-compiler-plugin` to 3.15.0 and
|
||||
`exec-maven-plugin` to 3.6.3; examples bumped `jackson-databind` 2.17.1 →
|
||||
2.22.0.
|
||||
- Grouped Dependabot updates per ecosystem into a single pull request and
|
||||
extended tracking to the NuGet (C#) binding and the Node/Go examples.
|
||||
|
||||
|
||||
## [0.8.9] - 2026-06-12
|
||||
|
||||
Maintenance release: supply-chain and CI housekeeping only. No library code or
|
||||
public API changes.
|
||||
|
||||
### Security
|
||||
- Triaged the pyo3 advisories RUSTSEC-2026-0176 (out-of-bounds read in
|
||||
`PyList`/`PyTuple` `nth`/`nth_back`) and RUSTSEC-2026-0177 (missing `Sync`
|
||||
bound on `PyCFunction::new_closure`) as **not affecting Wickra**: neither
|
||||
vulnerable API is reachable from the Python binding. Both are fixed in pyo3
|
||||
0.29, but rust-numpy 0.28 pins pyo3 `^0.28`, so the upgrade is blocked
|
||||
upstream; the advisories are recorded with their not-affected rationale in
|
||||
`deny.toml` and `osv-scanner.toml` and will be cleared once rust-numpy 0.29
|
||||
ships.
|
||||
|
||||
### Changed
|
||||
- Java binding: bumped `central-publishing-maven-plugin` 0.5.0 → 0.10.0 (the
|
||||
Maven Central publishing plugin used at release time).
|
||||
- Bumped the SHA-pinned GitHub Actions used in CI (`actions/checkout`,
|
||||
`actions/setup-go`, `actions/setup-java`, `github/codeql-action`,
|
||||
`taiki-e/install-action`) to their latest releases.
|
||||
- Added a Maven ecosystem to Dependabot so the Java binding's build plugins and
|
||||
dependencies are tracked going forward.
|
||||
|
||||
|
||||
## [0.8.8] - 2026-06-11
|
||||
### Fixed
|
||||
- R binding: declare `Depends: R (>= 2.10)`, clearing the `R CMD check` warning
|
||||
("package needs dependence on R (>= 2.10)") that the bundled, lazy-loaded
|
||||
`sample_ohlcv` dataset triggers on r-universe / CRAN.
|
||||
|
||||
## [0.8.7] - 2026-06-11
|
||||
### Added
|
||||
- R binding: a *Getting started* vignette and a synthetic `sample_ohlcv` example
|
||||
@@ -1566,7 +1663,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
optional Binance live feed.
|
||||
- Bindings for Python, Node.js, and WebAssembly.
|
||||
|
||||
[Unreleased]: https://github.com/wickra-lib/wickra/compare/v0.8.7...HEAD
|
||||
[Unreleased]: https://github.com/wickra-lib/wickra/compare/v0.9.1...HEAD
|
||||
[0.9.1]: https://github.com/wickra-lib/wickra/compare/v0.9.0...v0.9.1
|
||||
[0.9.0]: https://github.com/wickra-lib/wickra/compare/v0.8.9...v0.9.0
|
||||
[0.8.9]: https://github.com/wickra-lib/wickra/compare/v0.8.8...v0.8.9
|
||||
[0.8.8]: https://github.com/wickra-lib/wickra/compare/v0.8.7...v0.8.8
|
||||
[0.8.7]: https://github.com/wickra-lib/wickra/compare/v0.8.6...v0.8.7
|
||||
[0.8.6]: https://github.com/wickra-lib/wickra/compare/v0.8.5...v0.8.6
|
||||
[0.8.5]: https://github.com/wickra-lib/wickra/compare/v0.8.4...v0.8.5
|
||||
|
||||
+2
-2
@@ -22,7 +22,7 @@ licensed as above, without any additional terms or conditions.
|
||||
| `bindings/node` | napi-rs bindings (`wickra` 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/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/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`. |
|
||||
@@ -107,7 +107,7 @@ installed. Dependabot also keeps the `.github/requirements` pins current.
|
||||
- **Streaming parity.** An indicator's `batch` output must equal the sequence
|
||||
of `update` calls.
|
||||
- **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
|
||||
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
+21
-22
@@ -945,9 +945,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "numpy"
|
||||
version = "0.28.0"
|
||||
version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "778da78c64ddc928ebf5ad9df5edf0789410ff3bdbf3619aed51cd789a6af1e2"
|
||||
checksum = "6a5b15d63a5ff39e378daed0e1340d3a5964703ea9712eb09a0dc66fade996f4"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"ndarray",
|
||||
@@ -1152,9 +1152,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "pyo3"
|
||||
version = "0.28.3"
|
||||
version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "91fd8e38a3b50ed1167fb981cd6fd60147e091784c427b8f7183a7ee32c31c12"
|
||||
checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"once_cell",
|
||||
@@ -1166,18 +1166,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "pyo3-build-config"
|
||||
version = "0.28.3"
|
||||
version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e368e7ddfdeb98c9bca7f8383be1648fd84ab466bf2bc015e94008db6d35611e"
|
||||
checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078"
|
||||
dependencies = [
|
||||
"target-lexicon",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyo3-ffi"
|
||||
version = "0.28.3"
|
||||
version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7f29e10af80b1f7ccaf7f69eace800a03ecd13e883acfacc1e5d0988605f651e"
|
||||
checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"pyo3-build-config",
|
||||
@@ -1185,9 +1185,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "pyo3-macros"
|
||||
version = "0.28.3"
|
||||
version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "df6e520eff47c45997d2fc7dd8214b25dd1310918bbb2642156ef66a67f29813"
|
||||
checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"pyo3-macros-backend",
|
||||
@@ -1197,13 +1197,12 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "pyo3-macros-backend"
|
||||
version = "0.28.3"
|
||||
version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c4cdc218d835738f81c2338f822078af45b4afdf8b2e33cbb5916f108b813acb"
|
||||
checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362"
|
||||
dependencies = [
|
||||
"heck",
|
||||
"proc-macro2",
|
||||
"pyo3-build-config",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
@@ -1944,7 +1943,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wickra"
|
||||
version = "0.8.7"
|
||||
version = "0.9.1"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"criterion",
|
||||
@@ -1955,7 +1954,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wickra-bench"
|
||||
version = "0.8.7"
|
||||
version = "0.9.1"
|
||||
dependencies = [
|
||||
"criterion",
|
||||
"kand",
|
||||
@@ -1967,14 +1966,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wickra-c"
|
||||
version = "0.8.7"
|
||||
version = "0.9.1"
|
||||
dependencies = [
|
||||
"wickra-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wickra-core"
|
||||
version = "0.8.7"
|
||||
version = "0.9.1"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"proptest",
|
||||
@@ -1984,7 +1983,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wickra-data"
|
||||
version = "0.8.7"
|
||||
version = "0.9.1"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"csv",
|
||||
@@ -2001,7 +2000,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wickra-examples"
|
||||
version = "0.8.7"
|
||||
version = "0.9.1"
|
||||
dependencies = [
|
||||
"serde_json",
|
||||
"tokio",
|
||||
@@ -2011,7 +2010,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wickra-node"
|
||||
version = "0.8.7"
|
||||
version = "0.9.1"
|
||||
dependencies = [
|
||||
"napi",
|
||||
"napi-build",
|
||||
@@ -2021,7 +2020,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wickra-python"
|
||||
version = "0.8.7"
|
||||
version = "0.9.1"
|
||||
dependencies = [
|
||||
"numpy",
|
||||
"pyo3",
|
||||
@@ -2030,7 +2029,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wickra-wasm"
|
||||
version = "0.8.7"
|
||||
version = "0.9.1"
|
||||
dependencies = [
|
||||
"console_error_panic_hook",
|
||||
"js-sys",
|
||||
|
||||
+4
-4
@@ -14,7 +14,7 @@ members = [
|
||||
exclude = ["fuzz"]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.8.7"
|
||||
version = "0.9.1"
|
||||
authors = ["kingchenc <support@wickra.org>"]
|
||||
edition = "2021"
|
||||
rust-version = "1.86"
|
||||
@@ -26,7 +26,7 @@ keywords = ["finance", "trading", "indicators", "technical-analysis", "ta"]
|
||||
categories = ["finance", "mathematics", "science"]
|
||||
|
||||
[workspace.dependencies]
|
||||
wickra-core = { path = "crates/wickra-core", version = "0.8.7" }
|
||||
wickra-core = { path = "crates/wickra-core", version = "0.9.1" }
|
||||
|
||||
thiserror = "2"
|
||||
rayon = "1.10"
|
||||
@@ -37,8 +37,8 @@ approx = "0.5"
|
||||
criterion = { version = "0.8", features = ["html_reports"] }
|
||||
|
||||
# Python binding
|
||||
pyo3 = { version = "0.28", features = ["extension-module", "abi3-py39"] }
|
||||
numpy = "0.28"
|
||||
pyo3 = { version = "0.29", features = ["extension-module", "abi3-py39"] }
|
||||
numpy = "0.29"
|
||||
|
||||
[workspace.lints.rust]
|
||||
unsafe_code = "forbid"
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
**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
|
||||
native bindings for Python, Node.js and WebAssembly, plus a C ABI that C, C++,
|
||||
C# / .NET, Go, Java, R and any other C-capable language links against. Every indicator is a
|
||||
native bindings for Python, Node.js and WASM, plus a C ABI that C, C++,
|
||||
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
|
||||
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
|
||||
metrics — every single one updating in **O(1) per tick**. TA-Lib ships ~150 and
|
||||
none of them stream.
|
||||
- **One Rust core, five first-class targets.** Native **Python · Node.js ·
|
||||
WebAssembly · Rust** plus a **C ABI** for C / C++, C# / .NET, Go, Java, R and any other C-capable language —
|
||||
- **One Rust core, five first-class targets.** Native **Rust · Python · Node.js ·
|
||||
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
|
||||
GIL bottleneck.
|
||||
- **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 |
|
||||
|------------------|-------------|-------------|-----------------------------|-----------:|--------|
|
||||
| **★ 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 |
|
||||
| ta-rs | clean | yes | Rust only | ~30 | stale |
|
||||
| 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` |
|
||||
| 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# / .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` |
|
||||
| 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` |
|
||||
@@ -202,6 +202,29 @@ The wickra-core crate is `unsafe`-forbidden, so the native bindings are
|
||||
memory-safe end to end. The C ABI runs the same safe core; only its thin FFI
|
||||
boundary uses `unsafe`, and the caller owns handle lifetimes (`_new` / `_free`).
|
||||
|
||||
## Requirements
|
||||
|
||||
The minimum supported version per language. Prebuilt packages (Rust, Python,
|
||||
Node.js, WASM, C#) need only the runtime; the C-ABI bindings that compile on
|
||||
install — Go (cgo) and R (`.Call`) — also need a C compiler, and Java runs with
|
||||
`--enable-native-access=ALL-UNNAMED`.
|
||||
|
||||
| Language | Package | Minimum supported |
|
||||
|-------------|--------------------------------------|----------------------------|
|
||||
| Rust | crates.io · `wickra` | 1.86 (MSRV) |
|
||||
| Python | PyPI · `wickra` (abi3 wheel) | 3.9 (tested through 3.13) |
|
||||
| Node.js | npm · `wickra` (N-API 8) | 20 (tested on 22 · 24 LTS) |
|
||||
| WASM | npm · `wickra-wasm` | any modern JS engine |
|
||||
| C | `wickra.h` + library (releases) | C99 compiler |
|
||||
| C++ | `wickra.hpp` over the C ABI | C++14 compiler |
|
||||
| C# | NuGet · `Wickra` | .NET 8 (`net8.0`) |
|
||||
| Go | module · `wickra-lib/wickra-go` | Go 1.23 (cgo) |
|
||||
| Java | Maven Central · `org.wickra:wickra` | Java 22 (FFM / Panama) |
|
||||
| R | source package | R ≥ 2.10 (Rtools on Win.) |
|
||||
|
||||
Full per-language detail (runtime vs. build-from-source) is on the
|
||||
[Requirements page](https://docs.wickra.org/Requirements) in the docs.
|
||||
|
||||
## Rust API
|
||||
|
||||
```rust
|
||||
@@ -264,7 +287,7 @@ wickra/
|
||||
│ ├── node/ napi-rs (publishes on npm)
|
||||
│ ├── wasm/ wasm-bindgen (browsers, bundlers, Node)
|
||||
│ ├── 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)
|
||||
│ ├── r/ R binding over the C ABI via .Call (R package)
|
||||
│ └── java/ Java binding over the C ABI via the FFM API (Maven Central)
|
||||
@@ -312,7 +335,7 @@ cargo build -p wickra-c --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
|
||||
|
||||
# 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
|
||||
|
||||
# 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.
|
||||
- **Performance.** Keep per-tick updates O(1) and maintain the benchmark suite;
|
||||
investigate further allocation and cache improvements.
|
||||
- **Bindings parity.** Keep the Python, Node.js and WebAssembly bindings — plus
|
||||
the C ABI and the C# / .NET, Go, Java and R bindings generated from it — in lockstep with the
|
||||
- **Bindings parity.** Keep the Python, Node.js and WASM bindings — plus
|
||||
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.
|
||||
- **Documentation.** Maintain a deep-dive page per indicator on
|
||||
<https://docs.wickra.org>, plus quickstarts and cookbook material.
|
||||
|
||||
+3
-3
@@ -2,13 +2,13 @@
|
||||
|
||||
## Supported versions
|
||||
|
||||
Wickra is pre-1.0. Security fixes are applied to the latest released `0.8.7`
|
||||
Wickra is pre-1.0. Security fixes are applied to the latest released `0.9.1`
|
||||
version only; please upgrade to the newest release before reporting an issue.
|
||||
|
||||
| Version | Supported |
|
||||
| --- | --- |
|
||||
| 0.8.7 (latest) | :white_check_mark: |
|
||||
| < 0.8.7 | :x: |
|
||||
| 0.9.1 (latest) | :white_check_mark: |
|
||||
| < 0.9.1 | :x: |
|
||||
|
||||
## Reporting a vulnerability
|
||||
|
||||
|
||||
+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:
|
||||
|
||||
- **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.
|
||||
- **README:** <https://github.com/wickra-lib/wickra#readme> — installation and a
|
||||
quick overview.
|
||||
|
||||
+2
-2
@@ -3,8 +3,8 @@
|
||||
This document describes Wickra's attack surface and the threats considered,
|
||||
together with their mitigations. It complements the security assurance case in
|
||||
[`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
|
||||
and the .NET, Go, Java and R bindings built on it),
|
||||
library (a Rust core with Python, Node.js and WASM bindings plus a C ABI
|
||||
and the C#, Go, Java and R bindings built on it),
|
||||
not a network service or trading system; the attack surface is correspondingly
|
||||
small.
|
||||
|
||||
|
||||
+11
-4
@@ -9,12 +9,12 @@
|
||||
library plus a generated `wickra.h` — no system dependencies.**
|
||||
|
||||
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)
|
||||
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
|
||||
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.
|
||||
|
||||
## Install
|
||||
@@ -77,10 +77,17 @@ the main repository and documentation site:
|
||||
- **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)
|
||||
|
||||
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus this
|
||||
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against —
|
||||
Wickra ships native bindings for Python, Node.js, WASM and Rust, plus this
|
||||
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.
|
||||
|
||||
## 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
|
||||
|
||||
Wickra is an indicator toolkit, not a trading system. The values it computes
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+13710
File diff suppressed because it is too large
Load Diff
@@ -1,18 +1,18 @@
|
||||
# Wickra — .NET
|
||||
# Wickra — C#
|
||||
|
||||
[](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml)
|
||||
[](https://codecov.io/gh/wickra-lib/wickra)
|
||||
[](https://www.nuget.org/packages/Wickra)
|
||||
[](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.**
|
||||
|
||||
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)
|
||||
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
|
||||
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>
|
||||
- **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
|
||||
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against —
|
||||
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 —
|
||||
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
|
||||
|
||||
Wickra is an indicator toolkit, not a trading system. The values it computes
|
||||
|
||||
@@ -34,6 +34,21 @@ public class ArchetypeTests
|
||||
Assert.InRange(last, 1.0, 10.0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Query_WarmupPeriodAndIsReady()
|
||||
{
|
||||
using var sma = new Sma(3);
|
||||
Assert.Equal(3, sma.WarmupPeriod());
|
||||
Assert.False(sma.IsReady());
|
||||
sma.Update(1.0);
|
||||
sma.Update(2.0);
|
||||
Assert.False(sma.IsReady());
|
||||
sma.Update(3.0);
|
||||
Assert.True(sma.IsReady());
|
||||
sma.Reset();
|
||||
Assert.False(sma.IsReady());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Candle_Atr_IsFinitePositive()
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -11,7 +11,7 @@
|
||||
|
||||
<!-- NuGet package metadata -->
|
||||
<PackageId>Wickra</PackageId>
|
||||
<Version>0.8.7</Version>
|
||||
<Version>0.9.1</Version>
|
||||
<Authors>kingchenc</Authors>
|
||||
<Description>High-performance streaming technical-analysis indicators (514 indicators) for .NET, backed by the native Rust core via the Wickra C ABI.</Description>
|
||||
<PackageLicenseExpression>MIT OR Apache-2.0</PackageLicenseExpression>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
**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
|
||||
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,
|
||||
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
|
||||
@@ -108,10 +108,17 @@ main repository and documentation site:
|
||||
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
||||
- **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 —
|
||||
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
|
||||
|
||||
Wickra is an indicator toolkit, not a trading system. The values it computes are
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -24,6 +24,34 @@ func TestScalarKnownValue(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestWarmupPeriodAndIsReady(t *testing.T) {
|
||||
s, err := NewSma(3)
|
||||
if err != nil {
|
||||
t.Fatalf("NewSma: %v", err)
|
||||
}
|
||||
defer s.Close()
|
||||
|
||||
if got := s.WarmupPeriod(); got != 3 {
|
||||
t.Fatalf("sma(3) WarmupPeriod = %d, want 3", got)
|
||||
}
|
||||
if s.IsReady() {
|
||||
t.Fatal("sma is ready before any update")
|
||||
}
|
||||
s.Update(1)
|
||||
s.Update(2)
|
||||
if s.IsReady() {
|
||||
t.Fatal("sma is ready mid-warmup")
|
||||
}
|
||||
s.Update(3)
|
||||
if !s.IsReady() {
|
||||
t.Fatal("sma is not ready after the warmup period")
|
||||
}
|
||||
s.Reset()
|
||||
if s.IsReady() {
|
||||
t.Fatal("sma is ready after reset")
|
||||
}
|
||||
}
|
||||
|
||||
func TestScalarBatchMatchesStreaming(t *testing.T) {
|
||||
input := []float64{1, 2, 3, 4, 5, 6, 7, 8}
|
||||
|
||||
|
||||
+12
-5
@@ -9,7 +9,7 @@
|
||||
& Memory API — prebuilt native library, no JNI, no system dependencies.**
|
||||
|
||||
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
|
||||
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
|
||||
@@ -30,14 +30,14 @@ Maven:
|
||||
<dependency>
|
||||
<groupId>org.wickra</groupId>
|
||||
<artifactId>wickra</artifactId>
|
||||
<version>0.8.7</version>
|
||||
<version>0.9.1</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
Gradle:
|
||||
|
||||
```kotlin
|
||||
implementation("org.wickra:wickra:0.8.7")
|
||||
implementation("org.wickra:wickra:0.9.1")
|
||||
```
|
||||
|
||||
The native library ships prebuilt per platform (Linux, macOS, Windows — x64 and
|
||||
@@ -98,10 +98,17 @@ the main repository and documentation site:
|
||||
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
|
||||
- **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
|
||||
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against —
|
||||
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 —
|
||||
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
|
||||
|
||||
Wickra is an indicator toolkit, not a trading system. The values it computes
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.13.0</version>
|
||||
<version>3.15.0</version>
|
||||
</plugin>
|
||||
|
||||
<!--
|
||||
@@ -41,7 +41,7 @@
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>exec-maven-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
<version>3.6.3</version>
|
||||
<configuration>
|
||||
<executable>${java.home}/bin/java</executable>
|
||||
<arguments>
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
# OSV-Scanner suppression for this Maven manifest. OSV-Scanner looks for an
|
||||
# osv-scanner.toml next to each manifest it scans, and the repo-root config does
|
||||
# not cover Maven sub-directory scans — so the jackson finding is suppressed
|
||||
# here as well. See the root osv-scanner.toml and the SECURITY.md VEX section.
|
||||
#
|
||||
# tools.jackson.core:jackson-core 3.x is NOT a dependency of this project. Full
|
||||
# Maven resolution (the publishing plugin tree and the project dependency tree)
|
||||
# resolves only jackson 2.16.1 / 2.17.1; tools.jackson 3.x appears nowhere.
|
||||
# OSV-Scanner's own resolver flags it as a false positive.
|
||||
[[IgnoredVulns]]
|
||||
id = "GHSA-72hv-8253-57qq"
|
||||
reason = "tools.jackson.core:jackson-core 3.x is not a dependency; only jackson 2.x resolves. Not affected."
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>org.wickra</groupId>
|
||||
<artifactId>wickra</artifactId>
|
||||
<version>0.8.7</version>
|
||||
<version>0.9.1</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Wickra</name>
|
||||
@@ -44,7 +44,7 @@
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.compiler.release>22</maven.compiler.release>
|
||||
<junit.version>5.10.2</junit.version>
|
||||
<junit.version>6.1.0</junit.version>
|
||||
<!-- The FFM API is restricted; grant native access to the unnamed module so
|
||||
tests and examples run without warnings. Consumers pass the same flag. -->
|
||||
<native.access.arg>--enable-native-access=ALL-UNNAMED</native.access.arg>
|
||||
@@ -64,13 +64,13 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.13.0</version>
|
||||
<version>3.15.0</version>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>3.2.5</version>
|
||||
<version>3.5.6</version>
|
||||
<configuration>
|
||||
<argLine>${native.access.arg}</argLine>
|
||||
</configuration>
|
||||
@@ -79,7 +79,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.4.1</version>
|
||||
<version>3.5.0</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifestEntries>
|
||||
@@ -107,7 +107,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<version>3.3.1</version>
|
||||
<version>3.4.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-sources</id>
|
||||
@@ -119,7 +119,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>3.7.0</version>
|
||||
<version>3.12.0</version>
|
||||
<configuration>
|
||||
<!-- Generated members are self-descriptive; do not fail on doclint. -->
|
||||
<doclint>none</doclint>
|
||||
@@ -136,7 +136,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-gpg-plugin</artifactId>
|
||||
<version>3.2.4</version>
|
||||
<version>3.2.8</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>sign-artifacts</id>
|
||||
@@ -157,7 +157,7 @@
|
||||
<plugin>
|
||||
<groupId>org.sonatype.central</groupId>
|
||||
<artifactId>central-publishing-maven-plugin</artifactId>
|
||||
<version>0.5.0</version>
|
||||
<version>0.10.0</version>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<publishingServerId>central</publishingServerId>
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class AbandonedBaby implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ABANDONED_BABY_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ABANDONED_BABY_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class Abcd implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ABCD_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ABCD_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -57,6 +57,26 @@ public final class AbsoluteBreadthIndex implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ABSOLUTE_BREADTH_INDEX_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ABSOLUTE_BREADTH_INDEX_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -47,6 +47,26 @@ public final class AccelerationBands implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ACCELERATION_BANDS_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ACCELERATION_BANDS_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -80,6 +80,26 @@ public final class AcceleratorOscillator implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ACCELERATOR_OSCILLATOR_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ACCELERATOR_OSCILLATOR_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class AdOscillator implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AD_OSCILLATOR_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AD_OSCILLATOR_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -57,6 +57,26 @@ public final class AdVolumeLine implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AD_VOLUME_LINE_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AD_VOLUME_LINE_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -74,6 +74,26 @@ public final class AdaptiveCci implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ADAPTIVE_CCI_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ADAPTIVE_CCI_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -51,6 +51,26 @@ public final class AdaptiveCycle implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ADAPTIVE_CYCLE_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ADAPTIVE_CYCLE_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -54,6 +54,26 @@ public final class AdaptiveLaguerreFilter implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ADAPTIVE_LAGUERRE_FILTER_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ADAPTIVE_LAGUERRE_FILTER_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -54,6 +54,26 @@ public final class AdaptiveRsi implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ADAPTIVE_RSI_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ADAPTIVE_RSI_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class Adl implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ADL_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ADL_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class AdvanceBlock implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ADVANCE_BLOCK_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ADVANCE_BLOCK_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -57,6 +57,26 @@ public final class AdvanceDecline implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ADVANCE_DECLINE_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ADVANCE_DECLINE_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -57,6 +57,26 @@ public final class AdvanceDeclineRatio implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ADVANCE_DECLINE_RATIO_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ADVANCE_DECLINE_RATIO_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -47,6 +47,26 @@ public final class Adx implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ADX_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ADX_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -74,6 +74,26 @@ public final class Adxr implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ADXR_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ADXR_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -53,6 +53,26 @@ public final class Alligator implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ALLIGATOR_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ALLIGATOR_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -54,6 +54,26 @@ public final class Alma implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ALMA_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ALMA_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -58,6 +58,26 @@ public final class Alpha implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ALPHA_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ALPHA_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -39,6 +39,26 @@ public final class AmihudIlliquidity implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AMIHUD_ILLIQUIDITY_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AMIHUD_ILLIQUIDITY_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -51,6 +51,26 @@ public final class AnchoredRsi implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ANCHORED_RSI_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ANCHORED_RSI_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class AnchoredVwap implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ANCHORED_VWAP_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ANCHORED_VWAP_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -47,6 +47,26 @@ public final class AndrewsPitchfork implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ANDREWS_PITCHFORK_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ANDREWS_PITCHFORK_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -57,6 +57,26 @@ public final class Apo implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_APO_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_APO_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -46,6 +46,26 @@ public final class Aroon implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AROON_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AROON_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -74,6 +74,26 @@ public final class AroonOscillator implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AROON_OSCILLATOR_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AROON_OSCILLATOR_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -74,6 +74,26 @@ public final class Atr implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ATR_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ATR_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -47,6 +47,26 @@ public final class AtrBands implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ATR_BANDS_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ATR_BANDS_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -46,6 +46,26 @@ public final class AtrRatchet implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ATR_RATCHET_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ATR_RATCHET_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -74,6 +74,26 @@ public final class AtrTrailingStop implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_ATR_TRAILING_STOP_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_ATR_TRAILING_STOP_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -48,6 +48,26 @@ public final class AutoFib implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AUTO_FIB_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AUTO_FIB_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -57,6 +57,26 @@ public final class Autocorrelation implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AUTOCORRELATION_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AUTOCORRELATION_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -57,6 +57,26 @@ public final class AutocorrelationPeriodogram implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AUTOCORRELATION_PERIODOGRAM_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AUTOCORRELATION_PERIODOGRAM_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -74,6 +74,26 @@ public final class AverageDailyRange implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AVERAGE_DAILY_RANGE_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AVERAGE_DAILY_RANGE_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -54,6 +54,26 @@ public final class AverageDrawdown implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AVERAGE_DRAWDOWN_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AVERAGE_DRAWDOWN_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class AvgPrice implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AVG_PRICE_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AVG_PRICE_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -77,6 +77,26 @@ public final class AwesomeOscillator implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AWESOME_OSCILLATOR_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AWESOME_OSCILLATOR_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -80,6 +80,26 @@ public final class AwesomeOscillatorHistogram implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_AWESOME_OSCILLATOR_HISTOGRAM_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_AWESOME_OSCILLATOR_HISTOGRAM_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class BalanceOfPower implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BALANCE_OF_POWER_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BALANCE_OF_POWER_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -54,6 +54,26 @@ public final class BandpassFilter implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BANDPASS_FILTER_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BANDPASS_FILTER_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class Bat implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BAT_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BAT_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class BeltHold implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BELT_HOLD_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BELT_HOLD_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -58,6 +58,26 @@ public final class Beta implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BETA_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BETA_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -58,6 +58,26 @@ public final class BetaNeutralSpread implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BETA_NEUTRAL_SPREAD_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BETA_NEUTRAL_SPREAD_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -74,6 +74,26 @@ public final class BetterVolume implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BETTER_VOLUME_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BETTER_VOLUME_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -54,6 +54,26 @@ public final class BipowerVariation implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BIPOWER_VARIATION_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BIPOWER_VARIATION_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class BodySizePct implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BODY_SIZE_PCT_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BODY_SIZE_PCT_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -48,6 +48,26 @@ public final class BollingerBands implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BOLLINGER_BANDS_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BOLLINGER_BANDS_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -54,6 +54,26 @@ public final class BollingerBandwidth implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BOLLINGER_BANDWIDTH_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BOLLINGER_BANDWIDTH_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -47,6 +47,26 @@ public final class BomarBands implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BOMAR_BANDS_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BOMAR_BANDS_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -60,6 +60,26 @@ public final class BreadthThrust implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BREADTH_THRUST_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BREADTH_THRUST_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class Breakaway implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BREAKAWAY_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BREAKAWAY_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -57,6 +57,26 @@ public final class BullishPercentIndex implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BULLISH_PERCENT_INDEX_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BULLISH_PERCENT_INDEX_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -54,6 +54,26 @@ public final class BurkeRatio implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BURKE_RATIO_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BURKE_RATIO_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,26 @@ public final class Butterfly implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_BUTTERFLY_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_BUTTERFLY_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
@@ -36,6 +36,26 @@ public final class CalendarSpread implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
/** Number of updates required before update() yields a value. */
|
||||
public int warmupPeriod() {
|
||||
try {
|
||||
long n = (long) NativeMethods.WICKRA_CALENDAR_SPREAD_WARMUP_PERIOD.invokeExact(handle);
|
||||
return (int) n;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether the indicator has consumed enough input to emit a value. */
|
||||
public boolean isReady() {
|
||||
try {
|
||||
byte r = (byte) NativeMethods.WICKRA_CALENDAR_SPREAD_IS_READY.invokeExact(handle);
|
||||
return r != 0;
|
||||
} catch (Throwable t) {
|
||||
throw WickraNative.rethrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset to the just-constructed state. */
|
||||
public void reset() {
|
||||
try {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user