Compare commits

...

34 Commits

Author SHA1 Message Date
kingchenc ee5ee6980e release: bump 0.8.9 -> 0.9.0 (#289) 2026-06-13 03:21:33 +02:00
dependabot[bot] 60b4705d7e deps(maven): bump org.codehaus.mojo:exec-maven-plugin from 3.2.0 to 3.6.3 in /examples/java (#284) 2026-06-13 01:01:55 +02:00
dependabot[bot] 08b2e5abd3 deps(maven): bump org.apache.maven.plugins:maven-compiler-plugin from 3.13.0 to 3.15.0 in /examples/java (#283) 2026-06-13 01:01:49 +02:00
dependabot[bot] 495d9edcc3 deps(maven): bump com.fasterxml.jackson.core:jackson-databind from 2.17.1 to 2.22.0 in /examples/java (#282) 2026-06-13 01:01:44 +02:00
dependabot[bot] c32b802461 deps(maven): bump org.codehaus.mojo:exec-maven-plugin from 3.2.0 to 3.6.3 in /bindings/java/benchmarks (#281) 2026-06-13 01:01:38 +02:00
dependabot[bot] 7e3be0d1ac deps(maven): bump org.apache.maven.plugins:maven-compiler-plugin from 3.13.0 to 3.15.0 in /bindings/java/benchmarks (#280) 2026-06-13 01:01:32 +02:00
dependabot[bot] 1a90de89ea deps(maven): bump org.apache.maven.plugins:maven-javadoc-plugin from 3.7.0 to 3.12.0 in /bindings/java (#279) 2026-06-13 01:01:27 +02:00
dependabot[bot] bb901fbd25 deps(maven): bump org.apache.maven.plugins:maven-jar-plugin from 3.4.1 to 3.5.0 in /bindings/java (#278) 2026-06-13 01:01:21 +02:00
dependabot[bot] 692473452f deps(maven): bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.4 to 3.2.8 in /bindings/java (#277) 2026-06-13 01:01:15 +02:00
dependabot[bot] 2a5b012068 deps(maven): bump org.junit.jupiter:junit-jupiter from 5.10.2 to 6.1.0 in /bindings/java (#276) 2026-06-13 01:01:09 +02:00
dependabot[bot] 513e1111d2 deps(maven): bump org.apache.maven.plugins:maven-surefire-plugin from 3.2.5 to 3.5.6 in /bindings/java (#275) 2026-06-13 01:01:03 +02:00
dependabot[bot] 4b0bdef7c6 deps(maven): bump org.apache.maven.plugins:maven-compiler-plugin from 3.13.0 to 3.15.0 in /bindings/java (#274) 2026-06-13 01:00:57 +02:00
dependabot[bot] 3e4b6c7e22 deps(maven): bump org.apache.maven.plugins:maven-source-plugin from 3.3.1 to 3.4.0 in /bindings/java (#273) 2026-06-13 01:00:51 +02:00
kingchenc dd6a4affb2 ci(dependabot): group updates per ecosystem into a single PR (#288)
All nine Dependabot ecosystems now batch their updates into one grouped PR each
(`groups: { <name>: { patterns: ["*"] } }`) instead of one PR per dependency.

A routine refresh previously fanned out into a dozen-plus PRs (the Maven batch
alone opened 12), each running the full nine-language CI matrix (~55 checks) and
clogging the runner queue ahead of release and feature runs. Grouping collapses
that to one PR per ecosystem.

Trade-off: a single broken update blocks its whole group until excluded — fine
for routine maintenance bumps. Security updates are unaffected (they are not
grouped and continue to arrive individually).
2026-06-12 23:39:26 +02:00
kingchenc e5e094d370 chore(supply-chain): suppress jackson false positive in the Maven sub-scans (#287)
Follow-up to #272. The root `osv-scanner.toml` cleared the OpenSSF Scorecard
Vulnerabilities check from score 5 to 9 (the two pyo3 advisories, which live in
`Cargo.lock` at the root). One finding remained — `GHSA-72hv-8253-57qq`
(jackson-core 3.x async-parser DoS) — because OSV-Scanner resolves its config
relative to each manifest, and the repo-root config does not cover the Maven
sub-directory scans.

This adds the same not-affected suppression next to the two Maven manifests
(`bindings/java`, `examples/java`).

`tools.jackson.core:jackson-core` 3.x is not a dependency of this project: full
Maven resolution (publishing-plugin tree + project trees) 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.
2026-06-12 23:31:21 +02:00
kingchenc 97940046d1 ci(dependabot): track NuGet (C#) and the Node/Go examples (#286)
Closes the remaining Dependabot coverage gaps after the Maven ecosystem was
added. Audited every binding for external dependency manifests:

| Language | External deps | Coverage |
|----------|---------------|----------|
| Rust (core/wasm) | yes | already `cargo` |
| Python | yes | already `pip` |
| Node (binding) | yes | already `npm` |
| Java | yes | already `maven` |
| **C# / .NET** | **yes** (xunit, Microsoft.NET.Test.Sdk, BenchmarkDotNet) | **added `nuget`** |
| **examples/node** | **yes** (`ws`) | **added `npm`** |
| **examples/go** | **yes** (`coder/websocket`) | **added `gomod`** |
| C (C ABI) | no | nothing to track |
| Go (binding) | no (empty go.mod) | nothing to track |
| R | only `Depends: R` | Dependabot has no R/CRAN ecosystem |

The published `Wickra.csproj` itself has no external NuGet packages (thin C-ABI
wrapper), so only the test and benchmark projects are tracked.
2026-06-12 23:23:08 +02:00
kingchenc f7f0bfbc48 release: bump 0.8.8 -> 0.8.9 (#285)
Maintenance release — supply-chain and CI housekeeping only. No library code or
public API changes.

### Security
- Triaged the pyo3 advisories RUSTSEC-2026-0176 / RUSTSEC-2026-0177 as not
  affecting Wickra (vulnerable APIs unreachable from the binding; fix blocked
  upstream by rust-numpy pinning pyo3 `^0.28`). Recorded in `deny.toml` and
  `osv-scanner.toml`.

### Changed
- Java binding: `central-publishing-maven-plugin` 0.5.0 → 0.10.0.
- CI GitHub Actions bumped to latest (checkout, setup-go, setup-java,
  codeql-action, taiki-e/install-action).
- Added a Maven ecosystem to Dependabot.

Version bumped across all manifests/lockfiles via `bump_version.py`; Cargo.lock
refreshed. CHANGELOG `[0.8.9]` filled. Tag/publish to follow on explicit GO.
2026-06-12 23:21:39 +02:00
kingchenc 8ccfd638b2 chore(supply-chain): osv-scanner suppressions, bump publishing plugin, track Maven in Dependabot (#272)
Follow-up to the Dependabot action-bump merges and the cargo-deny ignore (#271).
Three low-risk supply-chain housekeeping changes — config/docs only, no library
code, no runtime change.

## 1. `osv-scanner.toml` (new)

The OpenSSF Scorecard *Vulnerabilities* check runs OSV-Scanner over the repo and
was flagging five advisory IDs (`score is 5`). These reduce to three findings,
all assessed as not affecting Wickra:

| Advisory | Assessment |
|----------|------------|
| RUSTSEC-2026-0176 / GHSA-36hh-v3qg-5jq4 (pyo3) | Vulnerable API unused; fix is pyo3 0.29 but rust-numpy 0.28 pins pyo3 `^0.28` → upstream-blocked. Already in `deny.toml`. |
| RUSTSEC-2026-0177 / GHSA-chgr-c6px-7xpp (pyo3) | Same — `PyCFunction::new_closure` not called. Already in `deny.toml`. |
| GHSA-72hv-8253-57qq (jackson-core 3.x) | **Not a dependency of this project.** No manifest, Maven plugin, or the GitHub dependency-graph SBOM references `tools.jackson` 3.x; the only jackson present is `com.fasterxml.jackson.core:jackson-databind` 2.17.1. |

`osv-scanner.toml` records these as ignored-with-reason at the OSV layer,
mirroring `deny.toml` and the SECURITY.md VEX section. The Scorecard finding
also flip-flopped (fixed → reappeared) across unrelated release-bump commits,
confirming it is not a stable real exposure.

## 2. Bump `central-publishing-maven-plugin` 0.5.0 → 0.10.0

The Java binding pinned a publishing plugin five versions behind. Validated
locally with the JDK 22 toolchain (`mvn -Prelease validate`): the extension
loads, the existing `publishingServerId`/`autoPublish` config is compatible, and
all 14 binding tests pass. The actual `mvn deploy` upload path is only exercised
at release time (needs the Central token + GPG key), so it will be confirmed at
the next release.

## 3. Add a Maven ecosystem to Dependabot

The Java binding had no Dependabot coverage, which is why the stale 0.5.0 plugin
went unnoticed. Adds `package-ecosystem: maven` over `/bindings/java`,
`/bindings/java/benchmarks`, and `/examples/java` so plugin and dependency
updates (incl. the examples' jackson) are tracked going forward.
2026-06-12 23:15:56 +02:00
dependabot[bot] 452f270b4d deps(actions): bump github/codeql-action from 3.36.0 to 4.36.2 (#270)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.36.0 to 4.36.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/github/codeql-action/releases">github/codeql-action's releases</a>.</em></p>
<blockquote>
<h2>v4.36.2</h2>
<ul>
<li>Cache CodeQL CLI version information across Actions steps. <a href="https://redirect.github.com/github/codeql-action/pull/3943">#3943</a></li>
<li>Reduce requests while waiting for analysis processing by using exponential backoff when polling SARIF processing status. <a href="https://redirect.github.com/github/codeql-action/pull/3937">#3937</a></li>
<li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6">2.25.6</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3948">#3948</a></li>
</ul>
<h2>v4.36.1</h2>
<p>No user facing changes.</p>
<h2>v4.36.0</h2>
<ul>
<li><em>Breaking change</em>: Bump the minimum required CodeQL bundle version to 2.19.4. <a href="https://redirect.github.com/github/codeql-action/pull/3894">#3894</a></li>
<li>Add support for SHA-256 Git object IDs. <a href="https://redirect.github.com/github/codeql-action/pull/3893">#3893</a></li>
<li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.5">2.25.5</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3926">#3926</a></li>
</ul>
<h2>v4.35.5</h2>
<ul>
<li>We have improved how the JavaScript bundles for the CodeQL Action are generated to avoid duplication across bundles and reduce the size of the repository by around 70%. This should have no effect on the runtime behaviour of the CodeQL Action. <a href="https://redirect.github.com/github/codeql-action/pull/3899">#3899</a></li>
<li>For performance and accuracy reasons, <a href="https://redirect.github.com/github/roadmap/issues/1158">improved incremental analysis</a> will now only be enabled on a pull request when diff-informed analysis is also enabled for that run. If diff-informed analysis is unavailable (for example, because the PR diff ranges could not be computed), the action will fall back to a full analysis. <a href="https://redirect.github.com/github/codeql-action/pull/3791">#3791</a></li>
<li>If multiple inputs are provided for the GitHub-internal <code>analysis-kinds</code> input, only <code>code-scanning</code> will be enabled. The <code>analysis-kinds</code> input is experimental, for GitHub-internal use only, and may change without notice at any time. <a href="https://redirect.github.com/github/codeql-action/pull/3892">#3892</a></li>
<li>Added an experimental change which, when running a Code Scanning analysis for a PR with <a href="https://redirect.github.com/github/roadmap/issues/1158">improved incremental analysis</a> enabled, prefers CodeQL CLI versions that have a cached overlay-base database for the configured languages. This speeds up analysis for a repository when there is not yet a cached overlay-base database for the latest CLI version. We expect to roll this change out to everyone in May. <a href="https://redirect.github.com/github/codeql-action/pull/3880">#3880</a></li>
</ul>
<h2>v4.35.4</h2>
<ul>
<li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.4">2.25.4</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3881">#3881</a></li>
</ul>
<h2>v4.35.3</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for customers using CodeQL version 2.19.3 and earlier. These versions of CodeQL were discontinued on 9 April 2026 alongside GitHub Enterprise Server 3.15, and will be unsupported by the next minor release of the CodeQL Action. <a href="https://redirect.github.com/github/codeql-action/pull/3837">#3837</a></li>
<li>Configurations for private registries that use Cloudsmith or GCP OIDC are now accepted. <a href="https://redirect.github.com/github/codeql-action/pull/3850">#3850</a></li>
<li>Best-effort connection tests for private registries now use <code>GET</code> requests instead of <code>HEAD</code> for better compatibility with various registry implementations. For NuGet feeds, the test is now always performed against the service index. <a href="https://redirect.github.com/github/codeql-action/pull/3853">#3853</a></li>
<li>Fixed a bug where two diagnostics produced within the same millisecond could overwrite each other on disk, causing one of them to be lost. <a href="https://redirect.github.com/github/codeql-action/pull/3852">#3852</a></li>
<li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.3">2.25.3</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3865">#3865</a></li>
</ul>
<h2>v4.35.2</h2>
<ul>
<li>The undocumented TRAP cache cleanup feature that could be enabled using the <code>CODEQL_ACTION_CLEANUP_TRAP_CACHES</code> environment variable is deprecated and will be removed in May 2026. If you are affected by this, we recommend disabling TRAP caching by passing the <code>trap-caching: false</code> input to the <code>init</code> Action. <a href="https://redirect.github.com/github/codeql-action/pull/3795">#3795</a></li>
<li>The Git version 2.36.0 requirement for improved incremental analysis now only applies to repositories that contain submodules. <a href="https://redirect.github.com/github/codeql-action/pull/3789">#3789</a></li>
<li>Python analysis on GHES no longer extracts the standard library, relying instead on models of the standard library. This should result in significantly faster extraction and analysis times, while the effect on alerts should be minimal. <a href="https://redirect.github.com/github/codeql-action/pull/3794">#3794</a></li>
<li>Fixed a bug in the validation of OIDC configurations for private registries that was added in CodeQL Action 4.33.0 / 3.33.0. <a href="https://redirect.github.com/github/codeql-action/pull/3807">#3807</a></li>
<li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.2">2.25.2</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3823">#3823</a></li>
</ul>
<h2>v4.35.1</h2>
<ul>
<li>Fix incorrect minimum required Git version for <a href="https://redirect.github.com/github/roadmap/issues/1158">improved incremental analysis</a>: it should have been 2.36.0, not 2.11.0. <a href="https://redirect.github.com/github/codeql-action/pull/3781">#3781</a></li>
</ul>
<h2>v4.35.0</h2>
<ul>
<li>Reduced the minimum Git version required for <a href="https://redirect.github.com/github/roadmap/issues/1158">improved incremental analysis</a> from 2.38.0 to 2.11.0. <a href="https://redirect.github.com/github/codeql-action/pull/3767">#3767</a></li>
<li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.1">2.25.1</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3773">#3773</a></li>
</ul>
<h2>v4.34.1</h2>
<ul>
<li>Downgrade default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.3">2.24.3</a> due to issues with a small percentage of Actions and JavaScript analyses. <a href="https://redirect.github.com/github/codeql-action/pull/3762">#3762</a></li>
</ul>
<h2>v4.34.0</h2>
<ul>
<li>Added an experimental change which disables TRAP caching when <a href="https://redirect.github.com/github/roadmap/issues/1158">improved incremental analysis</a> is enabled, since improved incremental analysis supersedes TRAP caching. This will improve performance and reduce Actions cache usage. We expect to roll this change out to everyone in March. <a href="https://redirect.github.com/github/codeql-action/pull/3569">#3569</a></li>
<li>We are rolling out improved incremental analysis to C/C++ analyses that use build mode <code>none</code>. We expect this rollout to be complete by the end of April 2026. <a href="https://redirect.github.com/github/codeql-action/pull/3584">#3584</a></li>
<li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.0">2.25.0</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3585">#3585</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action's changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a href="https://github.com/github/codeql-action/releases">releases page</a> for the relevant changes to the CodeQL CLI and language packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<ul>
<li>Cache CodeQL CLI version information across Actions steps. <a href="https://redirect.github.com/github/codeql-action/pull/3943">#3943</a></li>
<li>Reduce requests while waiting for analysis processing by using exponential backoff when polling SARIF processing status. <a href="https://redirect.github.com/github/codeql-action/pull/3937">#3937</a></li>
<li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6">2.25.6</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3948">#3948</a></li>
</ul>
<h2>4.36.1 - 02 Jun 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.0 - 22 May 2026</h2>
<ul>
<li><em>Breaking change</em>: Bump the minimum required CodeQL bundle version to 2.19.4. <a href="https://redirect.github.com/github/codeql-action/pull/3894">#3894</a></li>
<li>Add support for SHA-256 Git object IDs. <a href="https://redirect.github.com/github/codeql-action/pull/3893">#3893</a></li>
<li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.5">2.25.5</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3926">#3926</a></li>
</ul>
<h2>4.35.5 - 15 May 2026</h2>
<ul>
<li>We have improved how the JavaScript bundles for the CodeQL Action are generated to avoid duplication across bundles and reduce the size of the repository by around 70%. This should have no effect on the runtime behaviour of the CodeQL Action. <a href="https://redirect.github.com/github/codeql-action/pull/3899">#3899</a></li>
<li>For performance and accuracy reasons, <a href="https://redirect.github.com/github/roadmap/issues/1158">improved incremental analysis</a> will now only be enabled on a pull request when diff-informed analysis is also enabled for that run. If diff-informed analysis is unavailable (for example, because the PR diff ranges could not be computed), the action will fall back to a full analysis. <a href="https://redirect.github.com/github/codeql-action/pull/3791">#3791</a></li>
<li>If multiple inputs are provided for the GitHub-internal <code>analysis-kinds</code> input, only <code>code-scanning</code> will be enabled. The <code>analysis-kinds</code> input is experimental, for GitHub-internal use only, and may change without notice at any time. <a href="https://redirect.github.com/github/codeql-action/pull/3892">#3892</a></li>
<li>Added an experimental change which, when running a Code Scanning analysis for a PR with <a href="https://redirect.github.com/github/roadmap/issues/1158">improved incremental analysis</a> enabled, prefers CodeQL CLI versions that have a cached overlay-base database for the configured languages. This speeds up analysis for a repository when there is not yet a cached overlay-base database for the latest CLI version. We expect to roll this change out to everyone in May. <a href="https://redirect.github.com/github/codeql-action/pull/3880">#3880</a></li>
</ul>
<h2>4.35.4 - 07 May 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.4">2.25.4</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3881">#3881</a></li>
</ul>
<h2>4.35.3 - 01 May 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for customers using CodeQL version 2.19.3 and earlier. These versions of CodeQL were discontinued on 9 April 2026 alongside GitHub Enterprise Server 3.15, and will be unsupported by the next minor release of the CodeQL Action. <a href="https://redirect.github.com/github/codeql-action/pull/3837">#3837</a></li>
<li>Configurations for private registries that use Cloudsmith or GCP OIDC are now accepted. <a href="https://redirect.github.com/github/codeql-action/pull/3850">#3850</a></li>
<li>Best-effort connection tests for private registries now use <code>GET</code> requests instead of <code>HEAD</code> for better compatibility with various registry implementations. For NuGet feeds, the test is now always performed against the service index. <a href="https://redirect.github.com/github/codeql-action/pull/3853">#3853</a></li>
<li>Fixed a bug where two diagnostics produced within the same millisecond could overwrite each other on disk, causing one of them to be lost. <a href="https://redirect.github.com/github/codeql-action/pull/3852">#3852</a></li>
<li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.3">2.25.3</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3865">#3865</a></li>
</ul>
<h2>4.35.2 - 15 Apr 2026</h2>
<ul>
<li>The undocumented TRAP cache cleanup feature that could be enabled using the <code>CODEQL_ACTION_CLEANUP_TRAP_CACHES</code> environment variable is deprecated and will be removed in May 2026. If you are affected by this, we recommend disabling TRAP caching by passing the <code>trap-caching: false</code> input to the <code>init</code> Action. <a href="https://redirect.github.com/github/codeql-action/pull/3795">#3795</a></li>
<li>The Git version 2.36.0 requirement for improved incremental analysis now only applies to repositories that contain submodules. <a href="https://redirect.github.com/github/codeql-action/pull/3789">#3789</a></li>
<li>Python analysis on GHES no longer extracts the standard library, relying instead on models of the standard library. This should result in significantly faster extraction and analysis times, while the effect on alerts should be minimal. <a href="https://redirect.github.com/github/codeql-action/pull/3794">#3794</a></li>
<li>Fixed a bug in the validation of OIDC configurations for private registries that was added in CodeQL Action 4.33.0 / 3.33.0. <a href="https://redirect.github.com/github/codeql-action/pull/3807">#3807</a></li>
<li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.2">2.25.2</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3823">#3823</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/github/codeql-action/commit/8aad20d150bbac5944a9f9d289da16a4b0d87c1e"><code>8aad20d</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/3949">#3949</a> from github/update-v4.36.2-dcb947ce1</li>
<li><a href="https://github.com/github/codeql-action/commit/f521b08cd8f468ab193ea950a589cb2e9c869c6a"><code>f521b08</code></a> Add additional changelog notes</li>
<li><a href="https://github.com/github/codeql-action/commit/8aeff0ffb7b78582ee0d0e6eebb8140684400d08"><code>8aeff0f</code></a> Update changelog for v4.36.2</li>
<li><a href="https://github.com/github/codeql-action/commit/dcb947ce15976d40ea82935510b2db4872ec124c"><code>dcb947c</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/3948">#3948</a> from github/update-bundle/codeql-bundle-v2.25.6</li>
<li><a href="https://github.com/github/codeql-action/commit/c251bcefa178f7780f62f150002acffe3d07fde9"><code>c251bce</code></a> Add changelog note</li>
<li><a href="https://github.com/github/codeql-action/commit/62953c18b35f59e28351d2f1e806925aef8b1e3c"><code>62953c1</code></a> Update default bundle to codeql-bundle-v2.25.6</li>
<li><a href="https://github.com/github/codeql-action/commit/423b570baf1976cd7a3daeba5d6e9f9b76432f37"><code>423b570</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/3946">#3946</a> from github/dependabot/npm_and_yarn/npm-minor-5d507a...</li>
<li><a href="https://github.com/github/codeql-action/commit/c35d1b164463ee62a100735382aaaa525c5d3496"><code>c35d1b1</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/3947">#3947</a> from github/dependabot/github_actions/dot-github/wor...</li>
<li><a href="https://github.com/github/codeql-action/commit/cb1a588b02755b176e7b9d033ed4b69312f0e1bd"><code>cb1a588</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/3937">#3937</a> from github/robertbrignull/waitForProcessing_backoff</li>
<li><a href="https://github.com/github/codeql-action/commit/ba47406412c54532b5b4fcfbaf877c9e2382b206"><code>ba47406</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/3943">#3943</a> from github/henrymercer/cache-cli-version-info</li>
<li>Additional commits viewable in <a href="https://github.com/github/codeql-action/compare/03e4368ac7daa2bd82b3e85262f3bf87ee112f57...8aad20d150bbac5944a9f9d289da16a4b0d87c1e">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action&package-manager=github_actions&previous-version=3.36.0&new-version=4.36.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
2026-06-12 22:49:45 +02:00
dependabot[bot] baffebd3da deps(actions): bump actions/checkout from 6.0.2 to 6.0.3 (#269)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2 to 6.0.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/actions/checkout/releases">actions/checkout's releases</a>.</em></p>
<blockquote>
<h2>v6.0.3</h2>
<h2>What's Changed</h2>
<ul>
<li>Update changelog by <a href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2357">actions/checkout#2357</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
<li>Fix checkout init for SHA-256 repositories by <a href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>Update changelog for v6.0.3 by <a href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2446">actions/checkout#2446</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/yaananth"><code>@​yaananth</code></a> made their first contribution in <a href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/actions/checkout/compare/v6...v6.0.3">https://github.com/actions/checkout/compare/v6...v6.0.3</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>v6.0.3</h2>
<ul>
<li>Fix checkout init for SHA-256 repositories by <a href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<h2>v6.0.2</h2>
<ul>
<li>Fix tag handling: preserve annotations and explicit fetch-tags by <a href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2356">actions/checkout#2356</a></li>
</ul>
<h2>v6.0.1</h2>
<ul>
<li>Add worktree support for persist-credentials includeIf by <a href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
</ul>
<h2>v6.0.0</h2>
<ul>
<li>Persist creds to a separate file by <a href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>Update README to include Node.js 24 support details and requirements by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
</ul>
<h2>v5.0.1</h2>
<ul>
<li>Port v6 cleanup to v5 by <a href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<h2>v5.0.0</h2>
<ul>
<li>Update actions checkout to use node 24 by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
</ul>
<h2>v4.3.1</h2>
<ul>
<li>Port v6 cleanup to v4 by <a href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
</ul>
<h2>v4.3.0</h2>
<ul>
<li>docs: update README.md by <a href="https://github.com/motss"><code>@​motss</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
<li>Add internal repos for checking out multiple repositories by <a href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
<li>Documentation update - add recommended permissions to Readme by <a href="https://github.com/benwells"><code>@​benwells</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
<li>Adjust positioning of user email note and permissions heading by <a href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li>
<li>Update README.md by <a href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li>
<li>Update CODEOWNERS for actions by <a href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li>
<li>Update package dependencies by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li>
</ul>
<h2>v4.2.2</h2>
<ul>
<li><code>url-helper.ts</code> now leverages well-known environment variables by <a href="https://github.com/jww3"><code>@​jww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li>
<li>Expand unit test coverage for <code>isGhes</code> by <a href="https://github.com/jww3"><code>@​jww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li>
</ul>
<h2>v4.2.1</h2>
<ul>
<li>Check out other refs/* by commit if provided, fall back to ref by <a href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li>
</ul>
<h2>v4.2.0</h2>
<ul>
<li>Add Ref and Commit outputs by <a href="https://github.com/lucacome"><code>@​lucacome</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1180">actions/checkout#1180</a></li>
<li>Dependency updates by <a href="https://github.com/dependabot"><code>@​dependabot</code></a>- <a href="https://redirect.github.com/actions/checkout/pull/1777">actions/checkout#1777</a>, <a href="https://redirect.github.com/actions/checkout/pull/1872">actions/checkout#1872</a></li>
</ul>
<h2>v4.1.7</h2>
<ul>
<li>Bump the minor-npm-dependencies group across 1 directory with 4 updates by <a href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1739">actions/checkout#1739</a></li>
<li>Bump actions/checkout from 3 to 4 by <a href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1697">actions/checkout#1697</a></li>
<li>Check out other refs/* by commit by <a href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1774">actions/checkout#1774</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/actions/checkout/commit/df4cb1c069e1874edd31b4311f1884172cec0e10"><code>df4cb1c</code></a> Update changelog for v6.0.3 (<a href="https://redirect.github.com/actions/checkout/issues/2446">#2446</a>)</li>
<li><a href="https://github.com/actions/checkout/commit/1cce3390c2bfda521930d01229c073c7ff920824"><code>1cce339</code></a> Fix checkout init for SHA-256 repositories (<a href="https://redirect.github.com/actions/checkout/issues/2439">#2439</a>)</li>
<li><a href="https://github.com/actions/checkout/commit/900f2210b1d28bbbd0bd22d17926b9e224e8f231"><code>900f221</code></a> fix: expand merge commit SHA regex and add SHA-256 test cases (<a href="https://redirect.github.com/actions/checkout/issues/2414">#2414</a>)</li>
<li><a href="https://github.com/actions/checkout/commit/0c366fd6a839edf440554fa01a7085ccba70ac98"><code>0c366fd</code></a> Update changelog (<a href="https://redirect.github.com/actions/checkout/issues/2357">#2357</a>)</li>
<li>See full diff in <a href="https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...df4cb1c069e1874edd31b4311f1884172cec0e10">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=6.0.2&new-version=6.0.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
2026-06-12 22:36:18 +02:00
dependabot[bot] e631e55195 deps(actions): bump actions/setup-java from 4.8.0 to 5.2.0 (#268)
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.8.0 to 5.2.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/actions/setup-java/releases">actions/setup-java's releases</a>.</em></p>
<blockquote>
<h2>v5.2.0</h2>
<h2>What's Changed</h2>
<h3>Enhancement</h3>
<ul>
<li>Retry on HTTP 522 Connection timed out by <a href="https://github.com/findepi"><code>@​findepi</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/964">actions/setup-java#964</a></li>
</ul>
<h3>Documentation Changes</h3>
<ul>
<li>Update gradle caching by <a href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/972">actions/setup-java#972</a></li>
<li>Update checkout to v6 by <a href="https://github.com/mahabaleshwars"><code>@​mahabaleshwars</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/973">actions/setup-java#973</a></li>
</ul>
<h3>Dependency Updates</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> to v5 by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/968">actions/setup-java#968</a></li>
<li>Upgrade actions/checkout from 5 to 6 by <a href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/961">actions/setup-java#961</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/findepi"><code>@​findepi</code></a> made their first contribution in <a href="https://redirect.github.com/actions/setup-java/pull/964">actions/setup-java#964</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/actions/setup-java/compare/v5...v5.2.0">https://github.com/actions/setup-java/compare/v5...v5.2.0</a></p>
<h2>v5.1.0</h2>
<h2>What's Changed</h2>
<h3>New Features</h3>
<ul>
<li>Add support for <code>.sdkmanrc</code> file in <code>java-version-file</code> parameter by <a href="https://github.com/guicamest"><code>@​guicamest</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/736">actions/setup-java#736</a></li>
<li>Add support for Microsoft OpenJDK 25 builds by <a href="https://github.com/the-mod"><code>@​the-mod</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/927">actions/setup-java#927</a></li>
</ul>
<h3>Bug Fixes &amp; Improvements</h3>
<ul>
<li>Update Regex to Support All ASDF Versions for the supported distributions in tool-versions File by <a href="https://github.com/aparnajyothi-y"><code>@​aparnajyothi-y</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/767">actions/setup-java#767</a></li>
<li>Enhance error logging for network failures to include endpoint/IP details, add retry mechanism and update workflows to use macos-15-intel by <a href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/946">actions/setup-java#946</a></li>
<li>Update SapMachine URLs by <a href="https://github.com/RealCLanger"><code>@​RealCLanger</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/955">actions/setup-java#955</a></li>
<li>Add GitHub Token Support for GraalVM and Refactor Code by <a href="https://github.com/mahabaleshwars"><code>@​mahabaleshwars</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/849">actions/setup-java#849</a></li>
</ul>
<h3>Documentation changes</h3>
<ul>
<li>Update documentation to use checkout and Java v5 by <a href="https://github.com/lmvysakh"><code>@​lmvysakh</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/903">actions/setup-java#903</a></li>
<li>Clarify JAVA_HOME and PATH setup in README by <a href="https://github.com/chiranjib-swain"><code>@​chiranjib-swain</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/841">actions/setup-java#841</a></li>
</ul>
<h3>Dependency updates</h3>
<ul>
<li>Upgrade prettier from 2.8.8 to 3.6.2 and document breaking changes in v5 by <a href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/873">actions/setup-java#873</a></li>
<li>Upgrade actions/publish-action from 0.3.0 to 0.4.0  by <a href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a href="https://redirect.github.com/actions/setup-java/pull/912">actions/setup-java#912</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/lmvysakh"><code>@​lmvysakh</code></a> made their first contribution in <a href="https://redirect.github.com/actions/setup-java/pull/903">actions/setup-java#903</a></li>
<li><a href="https://github.com/chiranjib-swain"><code>@​chiranjib-swain</code></a> made their first contribution in <a href="https://redirect.github.com/actions/setup-java/pull/841">actions/setup-java#841</a></li>
<li><a href="https://github.com/the-mod"><code>@​the-mod</code></a> made their first contribution in <a href="https://redirect.github.com/actions/setup-java/pull/927">actions/setup-java#927</a></li>
<li><a href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a> made their first contribution in <a href="https://redirect.github.com/actions/setup-java/pull/946">actions/setup-java#946</a></li>
<li><a href="https://github.com/guicamest"><code>@​guicamest</code></a> made their first contribution in <a href="https://redirect.github.com/actions/setup-java/pull/736">actions/setup-java#736</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/actions/setup-java/compare/v5...v5.1.0">https://github.com/actions/setup-java/compare/v5...v5.1.0</a></p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/actions/setup-java/commit/be666c2fcd27ec809703dec50e508c2fdc7f6654"><code>be666c2</code></a> Chore: Version Update and Checkout Update to v6 (<a href="https://redirect.github.com/actions/setup-java/issues/973">#973</a>)</li>
<li><a href="https://github.com/actions/setup-java/commit/f7a6fefba97e80156950e16f2a9dafc8579b7d05"><code>f7a6fef</code></a> Bump actions/checkout from 5 to 6 (<a href="https://redirect.github.com/actions/setup-java/issues/961">#961</a>)</li>
<li><a href="https://github.com/actions/setup-java/commit/d81c4e45f3ac973cc936d79104023e20054ba578"><code>d81c4e4</code></a> Upgrade <code>@​actions/cache</code> to v5 (<a href="https://redirect.github.com/actions/setup-java/issues/968">#968</a>)</li>
<li><a href="https://github.com/actions/setup-java/commit/1b1bbe1085cb6ab21b5b19b7bebc091a9430026a"><code>1b1bbe1</code></a> readme update (<a href="https://redirect.github.com/actions/setup-java/issues/972">#972</a>)</li>
<li><a href="https://github.com/actions/setup-java/commit/5d7b2146334bacf88728daaa70414a99f5164e0f"><code>5d7b214</code></a> Retry on HTTP 522 Connection timed out (<a href="https://redirect.github.com/actions/setup-java/issues/964">#964</a>)</li>
<li><a href="https://github.com/actions/setup-java/commit/f2beeb24e141e01a676f977032f5a29d81c9e27e"><code>f2beeb2</code></a> Bump actions/publish-action from 0.3.0 to 0.4.0 (<a href="https://redirect.github.com/actions/setup-java/issues/912">#912</a>)</li>
<li><a href="https://github.com/actions/setup-java/commit/4e7e684fbb6e33f88ecb2cf1e6b3797739cf499b"><code>4e7e684</code></a> feat: Add support for <code>.sdkmanrc</code> file in <code>java-version-file</code> parameter (<a href="https://redirect.github.com/actions/setup-java/issues/736">#736</a>)</li>
<li><a href="https://github.com/actions/setup-java/commit/46c56d6f92c88cf540acf95a12a4a41197499222"><code>46c56d6</code></a> Add GitHub Token Support for GraalVM and Refactor Code (<a href="https://redirect.github.com/actions/setup-java/issues/849">#849</a>)</li>
<li><a href="https://github.com/actions/setup-java/commit/66b945764b75604b3cfd644c3ada5232cf6c90c6"><code>66b9457</code></a> Update SapMachine URLs (<a href="https://redirect.github.com/actions/setup-java/issues/955">#955</a>)</li>
<li><a href="https://github.com/actions/setup-java/commit/6ba5449b7dcda52941806a19f0cf626b6420191e"><code>6ba5449</code></a> Enhance error logging for network failures to include endpoint/IP details, ad...</li>
<li>Additional commits viewable in <a href="https://github.com/actions/setup-java/compare/c1e323688fd81a25caa38c78aa6df2d33d3e20d9...be666c2fcd27ec809703dec50e508c2fdc7f6654">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-java&package-manager=github_actions&previous-version=4.8.0&new-version=5.2.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
2026-06-12 22:21:13 +02:00
dependabot[bot] 63949f6fc8 deps(actions): bump actions/setup-go from 5.6.0 to 6.4.0 (#267)
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5.6.0 to 6.4.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/actions/setup-go/releases">actions/setup-go's releases</a>.</em></p>
<blockquote>
<h2>v6.4.0</h2>
<h2>What's Changed</h2>
<h3>Enhancement</h3>
<ul>
<li>Add go-download-base-url input for custom Go distributions by <a href="https://github.com/gdams"><code>@​gdams</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/721">actions/setup-go#721</a></li>
</ul>
<h3>Dependency update</h3>
<ul>
<li>Upgrade minimatch from 3.1.2 to 3.1.5 by <a href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/727">actions/setup-go#727</a></li>
</ul>
<h3>Documentation update</h3>
<ul>
<li>Rearrange README.md, add advanced-usage.md by <a href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/724">actions/setup-go#724</a></li>
<li>Fix Microsoft build of Go link by <a href="https://github.com/gdams"><code>@​gdams</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/734">actions/setup-go#734</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/gdams"><code>@​gdams</code></a> made their first contribution in <a href="https://redirect.github.com/actions/setup-go/pull/721">actions/setup-go#721</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/actions/setup-go/compare/v6...v6.4.0">https://github.com/actions/setup-go/compare/v6...v6.4.0</a></p>
<h2>v6.3.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update default Go module caching to use go.mod by <a href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/705">actions/setup-go#705</a></li>
<li>Fix golang download url to go.dev by <a href="https://github.com/178inaba"><code>@​178inaba</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/469">actions/setup-go#469</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/actions/setup-go/compare/v6...v6.3.0">https://github.com/actions/setup-go/compare/v6...v6.3.0</a></p>
<h2>v6.2.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Example for restore-only cache in documentation  by <a href="https://github.com/aparnajyothi-y"><code>@​aparnajyothi-y</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/696">actions/setup-go#696</a></li>
<li>Update Node.js version in action.yml by <a href="https://github.com/ccoVeille"><code>@​ccoVeille</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/691">actions/setup-go#691</a></li>
<li>Documentation update of actions/checkout by <a href="https://github.com/deining"><code>@​deining</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/683">actions/setup-go#683</a></li>
</ul>
<h3>Dependency updates</h3>
<ul>
<li>Upgrade js-yaml from 3.14.1 to 3.14.2 by <a href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/682">actions/setup-go#682</a></li>
<li>Upgrade <code>@​actions/cache</code> to v5 by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/695">actions/setup-go#695</a></li>
<li>Upgrade actions/checkout from 5 to 6 by <a href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/686">actions/setup-go#686</a></li>
<li>Upgrade qs from 6.14.0 to 6.14.1 by <a href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/703">actions/setup-go#703</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/ccoVeille"><code>@​ccoVeille</code></a> made their first contribution in <a href="https://redirect.github.com/actions/setup-go/pull/691">actions/setup-go#691</a></li>
<li><a href="https://github.com/deining"><code>@​deining</code></a> made their first contribution in <a href="https://redirect.github.com/actions/setup-go/pull/683">actions/setup-go#683</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/actions/setup-go/compare/v6...v6.2.0">https://github.com/actions/setup-go/compare/v6...v6.2.0</a></p>
<h2>v6.1.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Fall back to downloading from go.dev/dl instead of storage.googleapis.com/golang by <a href="https://github.com/nicholasngai"><code>@​nicholasngai</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/665">actions/setup-go#665</a></li>
<li>Add support for .tool-versions file and update workflow by <a href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/673">actions/setup-go#673</a></li>
<li>Add comprehensive breaking changes documentation for v6 by <a href="https://github.com/mahabaleshwars"><code>@​mahabaleshwars</code></a> in <a href="https://redirect.github.com/actions/setup-go/pull/674">actions/setup-go#674</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/actions/setup-go/commit/4a3601121dd01d1626a1e23e37211e3254c1c06c"><code>4a36011</code></a> docs: fix Microsoft build of Go link (<a href="https://redirect.github.com/actions/setup-go/issues/734">#734</a>)</li>
<li><a href="https://github.com/actions/setup-go/commit/8f19afcc704763637be6b1718da0af52ca05785d"><code>8f19afc</code></a> feat: add go-download-base-url input for custom Go distributions (<a href="https://redirect.github.com/actions/setup-go/issues/721">#721</a>)</li>
<li><a href="https://github.com/actions/setup-go/commit/27fdb267c15a8835f1ead03dfa07f89be2bb741a"><code>27fdb26</code></a> Bump minimatch from 3.1.2 to 3.1.5 (<a href="https://redirect.github.com/actions/setup-go/issues/727">#727</a>)</li>
<li><a href="https://github.com/actions/setup-go/commit/def8c394e3ad351a79bc93815e4a585520fe993b"><code>def8c39</code></a> Rearrange README.md, add advanced-usage.md (<a href="https://redirect.github.com/actions/setup-go/issues/724">#724</a>)</li>
<li><a href="https://github.com/actions/setup-go/commit/4b73464bb391d4059bd26b0524d20df3927bd417"><code>4b73464</code></a> Fix golang download url to go.dev (<a href="https://redirect.github.com/actions/setup-go/issues/469">#469</a>)</li>
<li><a href="https://github.com/actions/setup-go/commit/a5f9b05d2d216f63e13859e0d847461041025775"><code>a5f9b05</code></a> Update default Go module caching to use go.mod (<a href="https://redirect.github.com/actions/setup-go/issues/705">#705</a>)</li>
<li><a href="https://github.com/actions/setup-go/commit/7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5"><code>7a3fe6c</code></a> Bump qs from 6.14.0 to 6.14.1 (<a href="https://redirect.github.com/actions/setup-go/issues/703">#703</a>)</li>
<li><a href="https://github.com/actions/setup-go/commit/b9adafd441833a027479ddd0db37eaece68d35cb"><code>b9adafd</code></a> Bump actions/checkout from 5 to 6 (<a href="https://redirect.github.com/actions/setup-go/issues/686">#686</a>)</li>
<li><a href="https://github.com/actions/setup-go/commit/d73f6bcfc2b419b74f47075f8a487b40cc4680f8"><code>d73f6bc</code></a> README.md: correct to actions/checkout@v6 (<a href="https://redirect.github.com/actions/setup-go/issues/683">#683</a>)</li>
<li><a href="https://github.com/actions/setup-go/commit/ae252ee6fb24babc50e89fc67c4aa608e69fbf8f"><code>ae252ee</code></a> Bump <code>@​actions/cache</code> to v5 (<a href="https://redirect.github.com/actions/setup-go/issues/695">#695</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/actions/setup-go/compare/40f1582b2485089dde7abd97c1529aa768e1baff...4a3601121dd01d1626a1e23e37211e3254c1c06c">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-go&package-manager=github_actions&previous-version=5.6.0&new-version=6.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
2026-06-12 22:08:01 +02:00
dependabot[bot] 92210eb7b8 deps(actions): bump taiki-e/install-action from 2.79.15 to 2.81.6 (#266)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.79.15 to 2.81.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/taiki-e/install-action/releases">taiki-e/install-action's releases</a>.</em></p>
<blockquote>
<h2>2.81.6</h2>
<ul>
<li>
<p>Update <code>prek@latest</code> to 0.4.4.</p>
</li>
<li>
<p>Update <code>cargo-shear@latest</code> to 1.13.0.</p>
</li>
</ul>
<h2>2.81.5</h2>
<ul>
<li>
<p>Update <code>vacuum@latest</code> to 0.29.0.</p>
</li>
<li>
<p>Update <code>uv@latest</code> to 0.11.19.</p>
</li>
<li>
<p>Update <code>typos@latest</code> to 1.47.2.</p>
</li>
<li>
<p>Update <code>mise@latest</code> to 2026.6.0.</p>
</li>
</ul>
<h2>2.81.4</h2>
<ul>
<li>
<p>Update <code>vacuum@latest</code> to 0.28.4.</p>
</li>
<li>
<p>Update <code>typos@latest</code> to 1.47.1.</p>
</li>
<li>
<p>Update <code>syft@latest</code> to 1.45.0.</p>
</li>
<li>
<p>Update <code>cargo-neat@latest</code> to 0.4.0.</p>
</li>
<li>
<p>Update <code>cargo-mutants@latest</code> to 27.1.0.</p>
</li>
</ul>
<h2>2.81.3</h2>
<ul>
<li>
<p>Update <code>vacuum@latest</code> to 0.28.3.</p>
</li>
<li>
<p>Update <code>uv@latest</code> to 0.11.18.</p>
</li>
<li>
<p>Update <code>trivy@latest</code> to 0.71.0.</p>
</li>
</ul>
<h2>2.81.2</h2>
<ul>
<li>
<p>Update <code>mise@latest</code> to 2026.5.18.</p>
</li>
<li>
<p>Update <code>cargo-semver-checks@latest</code> to 0.48.0.</p>
</li>
</ul>
<h2>2.81.1</h2>
<ul>
<li>
<p>Update <code>cargo-no-dev-deps@latest</code> to 0.2.24.</p>
</li>
<li>
<p>Update <code>cargo-hack@latest</code> to 0.6.45.</p>
</li>
</ul>
<h2>2.81.0</h2>
<ul>
<li>
<p>Support <code>convco</code>. (<a href="https://redirect.github.com/taiki-e/install-action/pull/1831">#1831</a>, thanks <a href="https://github.com/graelo"><code>@​graelo</code></a>)</p>
</li>
<li>
<p>Support <code>docgarden</code> (<a href="https://redirect.github.com/taiki-e/install-action/pull/1830">#1830</a>, thanks <a href="https://github.com/jesse-black"><code>@​jesse-black</code></a>)</p>
</li>
<li>
<p>Update <code>vacuum@latest</code> to 0.28.0.</p>
</li>
<li>
<p>Update <code>cargo-binstall@latest</code> to 1.19.1.</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md">taiki-e/install-action's changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<p>All notable changes to this project will be documented in this file.</p>
<p>This project adheres to <a href="https://semver.org">Semantic Versioning</a>.</p>
<!-- raw HTML omitted -->
<h2>[Unreleased]</h2>
<h2>[2.81.10] - 2026-06-11</h2>
<ul>
<li>
<p>Update <code>tombi@latest</code> to 1.1.3.</p>
</li>
<li>
<p>Update <code>release-plz@latest</code> to 0.3.159.</p>
</li>
<li>
<p>Update <code>cosign@latest</code> to 3.1.1.</p>
</li>
</ul>
<h2>[2.81.9] - 2026-06-10</h2>
<ul>
<li>
<p>Update <code>wasm-bindgen@latest</code> to 0.2.123.</p>
</li>
<li>
<p>Update <code>tombi@latest</code> to 1.1.2.</p>
</li>
<li>
<p>Update <code>parse-changelog@latest</code> to 0.6.17.</p>
</li>
<li>
<p>Update <code>just@latest</code> to 1.52.0.</p>
</li>
<li>
<p>Update <code>gungraun-runner@latest</code> to 0.19.2.</p>
</li>
<li>
<p>Update <code>cargo-binstall@latest</code> to 1.20.0.</p>
</li>
</ul>
<h2>[2.81.8] - 2026-06-08</h2>
<ul>
<li>
<p>Update <code>vacuum@latest</code> to 0.29.2.</p>
</li>
<li>
<p>Update <code>parse-dockerfile@latest</code> to 0.1.7.</p>
</li>
<li>
<p>Update <code>mise@latest</code> to 2026.6.1.</p>
</li>
<li>
<p>Update <code>cargo-shear@latest</code> to 1.13.1.</p>
</li>
</ul>
<h2>[2.81.7] - 2026-06-06</h2>
<ul>
<li>
<p>Update <code>wasmtime@latest</code> to 45.0.1.</p>
</li>
<li>
<p>Update <code>vacuum@latest</code> to 0.29.1.</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/taiki-e/install-action/commit/59012be0884e296ca2da49b530610e72c49039ad"><code>59012be</code></a> Release 2.81.6</li>
<li><a href="https://github.com/taiki-e/install-action/commit/52d2b0721d1d96983ea68305ea47cf412c2cb542"><code>52d2b07</code></a> Update <code>prek@latest</code> to 0.4.4</li>
<li><a href="https://github.com/taiki-e/install-action/commit/eeedd6ad125e98661ca2977b004703515f466511"><code>eeedd6a</code></a> Update <code>cargo-shear@latest</code> to 1.13.0</li>
<li><a href="https://github.com/taiki-e/install-action/commit/f23697a9b80ca29d330c6f9063d9df132e8be880"><code>f23697a</code></a> Update cargo-audit manifest</li>
<li><a href="https://github.com/taiki-e/install-action/commit/4bc351f7f2614e48088386e2a0ad917ca3a7e4ba"><code>4bc351f</code></a> Release 2.81.5</li>
<li><a href="https://github.com/taiki-e/install-action/commit/ee19c896b554e8b0244999a8559d4eaecf29da0c"><code>ee19c89</code></a> Update <code>vacuum@latest</code> to 0.29.0</li>
<li><a href="https://github.com/taiki-e/install-action/commit/026a7c19d8cde560882d2f6a1057690e982d4d70"><code>026a7c1</code></a> Update <code>uv@latest</code> to 0.11.19</li>
<li><a href="https://github.com/taiki-e/install-action/commit/73ae273667d96854ff27b31a096a2eff0076704b"><code>73ae273</code></a> Update <code>typos@latest</code> to 1.47.2</li>
<li><a href="https://github.com/taiki-e/install-action/commit/afcf03672edd439d42ab0d5d07c5254be5b35577"><code>afcf036</code></a> Update <code>mise@latest</code> to 2026.6.0</li>
<li><a href="https://github.com/taiki-e/install-action/commit/cde8c9e634f4a17bc06b61413ac0ef75450eac46"><code>cde8c9e</code></a> Release 2.81.4</li>
<li>Additional commits viewable in <a href="https://github.com/taiki-e/install-action/compare/0fd46367812ee04360509b4169d9f659d6892bb2...59012be0884e296ca2da49b530610e72c49039ad">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=taiki-e/install-action&package-manager=github_actions&previous-version=2.79.15&new-version=2.81.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
2026-06-12 21:54:06 +02:00
kingchenc c3029f2548 ci(supply-chain): ignore RUSTSEC-2026-0176/0177 until rust-numpy 0.29 (#271)
## Why

`Supply-chain (cargo-deny)` started failing on every CI run from 2026-06-11
onward, including all five open Dependabot action-bump PRs (#266–#270), which
touch no Rust code. The cause is two PyO3 advisories published 2026-06-11:

| Advisory | Issue | Affected | Patched |
|----------|-------|----------|---------|
| RUSTSEC-2026-0176 | OOB read in `PyList`/`PyTuple` `nth`/`nth_back` | `>=0.24.0, <0.29.0` | `>= 0.29.0` |
| RUSTSEC-2026-0177 | Missing `Sync` bound on `PyCFunction::new_closure` | `>=0.15.0, <0.29.0` | `>= 0.29.0` |

We are on pyo3 0.28.3, so both apply.

## Why not just bump pyo3 to 0.29

The clean fix is blocked upstream: `rust-numpy` 0.28 (its latest release) hard-pins
`pyo3 ^0.28.0`, so the resolver rejects 0.29 (`failed to select a version for the
requirement pyo3 = "^0.28.0"`). rust-numpy's "Updated to PyO3 version 0.29.0" PR is
open but not yet published to crates.io.

## Why the ignore is safe

Neither vulnerable code path is reachable from our binding — verified by grep over
`bindings/python/src`: no `BoundListIterator::nth`/`nth_back` or `PyTuple`
equivalents (0176), no `PyCFunction::new_closure` (0177), zero `PyList`/`PyTuple`
references at all.

## Removal trigger

Drop both ignores once rust-numpy 0.29 lands and pyo3 is bumped to 0.29.

Verified locally: `cargo deny check` → `advisories ok, bans ok, licenses ok, sources ok`.
2026-06-12 21:38:10 +02:00
kingchenc 806ae22abe release: bump 0.8.7 -> 0.8.8 (#265)
Version bump `0.8.7` → `0.8.8`.

### Fixed
- R binding: declare `Depends: R (>= 2.10)`, clearing the `R CMD check` "package needs dependence on R (>= 2.10)" warning that the bundled, lazy-loaded `sample_ohlcv` dataset triggers on r-universe / CRAN. (#264)

Bump touches the manual release touchpoints only; docs/webpage version strings are left to `sync-about.yml` on the tag.
2026-06-11 22:44:47 +02:00
kingchenc fb9c39d4cd fix(r): declare Depends: R (>= 2.10) for the bundled dataset (#264)
The `sample_ohlcv` dataset added in #262 is lazy-loaded (`LazyData: true`), which makes `R CMD check` on r-universe / CRAN warn:

```
* checking data for ASCII and uncompressed saves ... WARNING
  Warning: package needs dependence on R (>= 2.10)
```

Lazy-loading of package data requires R ≥ 2.10, so the package must declare it. This adds `Depends: R (>= 2.10)` to `bindings/r/DESCRIPTION`.

**Verified locally** (R 4.6.0, `R CMD build` + `R CMD check`): the `checking data for ASCII and uncompressed saves` step now reports **OK**. (The repo CI only runs `R CMD INSTALL` + testthat, not full `R CMD check`, so this surfaces only on r-universe — same asymmetry as the golden-test skip.)
2026-06-11 22:41:05 +02:00
kingchenc b1653e2107 release: bump 0.8.6 -> 0.8.7 (#263)
Version bump `0.8.6` → `0.8.7`.

### Added
- R binding: a *Getting started* vignette and a synthetic `sample_ohlcv` example dataset, giving new users a runnable, self-contained walkthrough and populating the R-universe Articles and Datasets tabs. The vignette's code is exercised in CI so a broken example is caught before the published build. (#262)

Bump touches the manual release touchpoints only; docs/webpage version strings are left to `sync-about.yml` on the tag.
2026-06-11 21:47:50 +02:00
kingchenc 32e18cb3a3 feat(r): getting-started vignette + sample_ohlcv dataset (#262)
Fills the two empty r-universe tabs (**Articles**, **Datasets**) for the R package and gives R users a runnable onboarding path.

## What
- **`vignettes/getting-started.Rmd`** — Articles tab. Walks through batch vs streaming (and that they're equivalent), multi-output MACD, candle ATR, and `reset()`, all over the bundled sample series. Built strictly from the already-proven README quick-start + golden-test API (`Sma`/`Ema`/`Rsi`/`Atr`/`MacdIndicator`, `batch`/`update`/`reset`) — no new indicator logic.
- **`data/sample_ohlcv.rda`** (+ `data-raw/sample_ohlcv.R` generator) — Datasets tab. A deterministic, seeded synthetic daily OHLCV series (250 rows × `date/open/high/low/close/volume`); documented via `R/data.R` + `man/sample_ohlcv.Rd`. `LazyData: true` → available right after `library(wickra)`.
- **`DESCRIPTION`** — `Suggests: knitr, rmarkdown`, `VignetteBuilder: knitr`, `LazyData: true`.
- **`ci.yml`** — the R job now knits the vignette (executes its R chunks, no pandoc needed) so a broken example is caught **in CI** before r-universe / CRAN `R CMD check`. The main job otherwise only `R CMD INSTALL`s.

## Verified locally (R 4.6.0 + Rtools45)
- Package installs with the dev C-ABI override; dataset moves to the lazyload DB.
- Vignette **knits cleanly** — every chunk runs, `batch == streaming` holds, MACD/ATR/RSI produce sensible values.

## Notes
- No version bump — metadata/docs only; rides the next release. Merging triggers an r-universe rebuild → Articles + Datasets populate **and** (now that `support@wickra.org` is verified) the maintainer avatar resolves.
- `data-raw/` is `.Rbuildignore`d (generator, not shipped). The `.rda` is XZ-compressed (~3 KB).

Not merging — for review.
2026-06-11 21:44:56 +02:00
kingchenc dc0c3d1736 docs(readme): serve footer social badges + star-history from snapshots (#261)
Pairs with **wickra-lib/.github#32**. The README footer (GitHub stars / forks / issues) hot-linked `img.shields.io` directly, so it showed shields' transient **"unable to select next github token from pool"** error live; the star-history chart hot-linked `star-history.com` and **froze** behind GitHub's Camo image cache (the embedded `<img>` is proxied + cached, while the linked page renders fresh).

All four now point at the committed snapshots in the `.github` repo (`raw.githubusercontent.com/wickra-lib/.github/main/profile/badges/{stars,forks,issues,star-history}.svg`), refreshed hourly by the new `refresh-social.yml` — so a broken upstream never reaches the page and the last good SVG is always served. The `<a>` links and the visual style are unchanged.

## Merge order
Merge **.github#32 first** (it creates the snapshot SVGs), then this one — otherwise the footer would briefly point at missing raw URLs.

Not merging yet — for review.
2026-06-11 19:28:04 +02:00
kingchenc ad1231cde1 release: bump 0.8.5 -> 0.8.6 (#260)
Version bump `0.8.5` → `0.8.6`.

### Changed
- Package registry metadata for better discoverability (#259):
  - R (R-universe): R-universe URL + `X-schema.org-keywords` in `DESCRIPTION`, package logo at `bindings/r/man/figures/logo.png`.
  - Python (PyPI): `Documentation` project URL.
  - C# (NuGet): package icon via `PackageIcon`.

Ships the metadata so the next PyPI/NuGet publish carries the new fields (R-universe rebuilds from main independently). Bump touches the manual release touchpoints only; docs/webpage version strings are left to `sync-about.yml` on the tag.
2026-06-11 18:17:05 +02:00
kingchenc 7ebb60b60a chore: improve package registry metadata (R-universe, PyPI, NuGet) (#259)
Closes the package-page discoverability gaps found while auditing the public registry listings. No code or version change — metadata only; takes effect on the next registry build/publish.

## R — R-universe (`bindings/r`)
- `DESCRIPTION`: add the R-universe URL to `URL:` and a CRAN-permitted `X-schema.org-keywords` field (feeds R-universe's search/ranking).
- Add a package logo at `man/figures/logo.png` (pkgdown convention → shown in the R-universe packages tab) and reference it in the R `README.md`.
- Maintainer email is **unchanged** (`support@wickra.org`).

## Python — PyPI (`bindings/python`)
- `pyproject.toml`: add a `Documentation` project URL (`https://docs.wickra.org`) so it appears in the PyPI sidebar.

## C# — NuGet (`bindings/csharp`)
- Add `icon.png` (brand mark) and `<PackageIcon>` so nuget.org shows the logo instead of the default placeholder.

## Notes
- Rust/crates.io, Node/npm, Go/pkg.go.dev and Java/Maven Central were audited and are already complete for their respective metadata models (no icon/keyword concept on some).
- The repository topic `rstats` was added (replacing the redundant `webassembly`, since `wasm` already covers it) so R is represented alongside the other language tags.
2026-06-11 18:11:54 +02:00
kingchenc d7cb771a28 release: bump 0.8.4 -> 0.8.5 (#258)
Version bump `0.8.4` → `0.8.5`.

### Fixed
- The R binding's golden-fixture parity test now skips gracefully when the shared `testdata/golden` fixtures are not bundled with the package — standalone r-universe / CRAN builds package only `bindings/r`, so the repo-root fixtures are unreachable there (this was failing the r-universe build of 0.8.4). The parity stays enforced by the repository CI, where the fixtures are present. (#257)

Bump touches the manual release touchpoints only (`Cargo.toml`/`Cargo.lock`, Python/Node/Java/C#/R manifests, lockfiles, `SECURITY.md`, `CHANGELOG.md`). docs/webpage version strings are left to `sync-about.yml` on the tag.
2026-06-11 17:13:52 +02:00
kingchenc 3e5a19c94a fix(r): skip golden-fixture test in standalone package builds + document parity (#257)
## Problem
The r-universe build of `wickra` 0.8.4 fails (`R CMD check` ERROR): the golden-fixture parity test added in #255 walks up from the working directory looking for `testdata/golden` and `stop()`s when it cannot find it. Standalone package builds (r-universe / CRAN) package only `bindings/r`, so the repo-root `testdata/golden` fixtures are unreachable there — whereas the monorepo CI checks out the full repo, so the walk-up succeeds and the test passes.

Run: https://github.com/r-universe/wickra-lib/actions/runs/27354800361

## Fix
- **`bindings/r/tests/testthat/test-golden.R`** — the fixture-directory lookup now returns `NULL` instead of erroring when the fixtures are absent, and each test starts with `skip_if(is.null(golden_dir), ...)`. The repository CI (full repo present) still runs the parity checks; standalone builds skip them. The per-test `golden_input` read moved inside the (post-skip) test bodies so nothing runs at source time when the fixtures are missing.
- **`CHANGELOG.md`** — `[Unreleased]` Fixed entry.

## Docs (B6)
- **`README.md` `## Testing`** — the four C-ABI bindings (C#, Go, Java, R) were described as covering one indicator per FFI archetype; document that they additionally replay the shared golden fixture and assert exact parity with the Rust reference outputs.
2026-06-11 17:08:33 +02:00
kingchenc 8bfe24ac1d test(golden): language-neutral fixtures + per-binding parity runners (#255)
**Task 5 — golden-fixture parity for the C-ABI bindings.** Lifts the C#/Go/Java/R tests from *one indicator per archetype* toward reference-value parity, catching FFI wiring bugs (swapped params, wrong multi-output field) the math-only core tests cannot see.

## What's here
- **`examples/rust/src/bin/gen_golden.rs`** + **`testdata/golden/*.csv`** — a Rust generator computing a deterministic OHLCV series plus the core's reference outputs for a curated archetype-spanning set: scalar (`Sma`/`Ema`/`Rsi`), candle (`Atr`), scalar multi-output (`MACD`), candle multi-output (`ADX`), pairwise (`Beta`). `nan` marks warmup. Regenerate with `cargo run -p wickra-examples --bin gen_golden`.
- **Parity runners** replaying the identical fixtures through each FFI (rel-tol 1e-6), each a standard test in the binding's existing suite (no `ci.yml` change — rides `dotnet test` / `go test` / `mvn install` / `R CMD`+testthat). A walk-up search locates `testdata/golden` regardless of run dir.
  - **C#** (`bindings/csharp/.../GoldenTests.cs`) —  validated locally, 7/7 pass.
  - **Go** (`bindings/go/golden_test.go`) —  validated locally, pass.
  - **Java** (`bindings/java/.../GoldenTests.java`) — modeled on the archetype API; validated by CI (no local mvn).
  - **R** (`bindings/r/tests/testthat/test-golden.R`) — modeled on the archetype API; validated by CI (no local Rscript).

## Notes
- The curated set spans every marshalling archetype; extending the indicator list is mechanical (add to the generator + regenerate). Bars/profile archetypes can be added next.
- No new CI jobs.
2026-06-11 15:22:29 +02:00
56 changed files with 1995 additions and 130 deletions
+82
View File
@@ -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: ["*"]
+2 -2
View File
@@ -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
+33 -23
View File
@@ -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
@@ -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
@@ -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
@@ -576,7 +576,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
node-version: ["18", "20"]
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
@@ -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
@@ -926,6 +926,16 @@ jobs:
R CMD INSTALL bindings/r
Rscript -e 'library(testthat); library(wickra); test_dir("bindings/r/tests/testthat", stop_on_failure = TRUE)'
- name: Build the vignette code
shell: bash
# The getting-started vignette runs at R CMD check time on r-universe /
# CRAN (with pandoc); this job only INSTALLs, so execute the vignette's R
# chunks here (knit, no pandoc needed) to catch a broken example before it
# reaches the published build.
run: |
Rscript -e 'install.packages("knitr", repos = Sys.getenv("RSPM", unset = "https://cloud.r-project.org"))'
Rscript -e 'knitr::knit("bindings/r/vignettes/getting-started.Rmd", output = tempfile(fileext = ".md"), quiet = TRUE); cat("vignette code OK\n")'
- name: Run the offline R examples
shell: bash
# No loader-path exports: the installed package is self-contained (bundled
@@ -951,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
@@ -973,7 +983,7 @@ jobs:
- name: Set up JDK 22
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"
@@ -988,7 +998,7 @@ jobs:
- name: Set up JDK 22 (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"
+3 -3
View File
@@ -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 }}"
+14 -14
View File
@@ -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
@@ -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
@@ -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
@@ -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
@@ -758,7 +758,7 @@ 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
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: temurin
java-version: "22"
@@ -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
@@ -877,7 +877,7 @@ jobs:
outputs:
tag: ${{ steps.tag.outputs.tag }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
fetch-depth: 0
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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 }}
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+80 -1
View File
@@ -7,6 +7,79 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [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
dataset, giving new users a runnable, self-contained walkthrough and populating
the R-universe Articles and Datasets tabs. The vignette's code is exercised in
CI so a broken example is caught before the published build.
## [0.8.6] - 2026-06-11
### Changed
- Package registry metadata for better discoverability:
- R (R-universe): added the R-universe URL and `X-schema.org-keywords` to the
R `DESCRIPTION`, plus a package logo at `bindings/r/man/figures/logo.png`
(pkgdown convention).
- Python (PyPI): added a `Documentation` project URL.
- C# (NuGet): added a package icon via `PackageIcon`.
## [0.8.5] - 2026-06-11
### Fixed
- The R binding's golden-fixture parity test now skips gracefully when the shared
`testdata/golden` fixtures are not bundled with the package — standalone
r-universe / CRAN builds package only `bindings/r`, so the repo-root fixtures
are unreachable there. The parity stays enforced by the repository CI, where
the fixtures are present.
## [0.8.4] - 2026-06-11
### Fixed
- A single non-finite (NaN/inf) tick no longer poisons indicator state.
@@ -1542,7 +1615,13 @@ 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.4...HEAD
[Unreleased]: https://github.com/wickra-lib/wickra/compare/v0.9.0...HEAD
[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
[0.8.4]: https://github.com/wickra-lib/wickra/compare/v0.8.3...v0.8.4
[0.8.3]: https://github.com/wickra-lib/wickra/compare/v0.8.2...v0.8.3
[0.8.2]: https://github.com/wickra-lib/wickra/compare/v0.8.1...v0.8.2
Generated
+9 -9
View File
@@ -1944,7 +1944,7 @@ dependencies = [
[[package]]
name = "wickra"
version = "0.8.4"
version = "0.9.0"
dependencies = [
"approx",
"criterion",
@@ -1955,7 +1955,7 @@ dependencies = [
[[package]]
name = "wickra-bench"
version = "0.8.4"
version = "0.9.0"
dependencies = [
"criterion",
"kand",
@@ -1967,14 +1967,14 @@ dependencies = [
[[package]]
name = "wickra-c"
version = "0.8.4"
version = "0.9.0"
dependencies = [
"wickra-core",
]
[[package]]
name = "wickra-core"
version = "0.8.4"
version = "0.9.0"
dependencies = [
"approx",
"proptest",
@@ -1984,7 +1984,7 @@ dependencies = [
[[package]]
name = "wickra-data"
version = "0.8.4"
version = "0.9.0"
dependencies = [
"approx",
"csv",
@@ -2001,7 +2001,7 @@ dependencies = [
[[package]]
name = "wickra-examples"
version = "0.8.4"
version = "0.9.0"
dependencies = [
"serde_json",
"tokio",
@@ -2011,7 +2011,7 @@ dependencies = [
[[package]]
name = "wickra-node"
version = "0.8.4"
version = "0.9.0"
dependencies = [
"napi",
"napi-build",
@@ -2021,7 +2021,7 @@ dependencies = [
[[package]]
name = "wickra-python"
version = "0.8.4"
version = "0.9.0"
dependencies = [
"numpy",
"pyo3",
@@ -2030,7 +2030,7 @@ dependencies = [
[[package]]
name = "wickra-wasm"
version = "0.8.4"
version = "0.9.0"
dependencies = [
"console_error_panic_hook",
"js-sys",
+2 -2
View File
@@ -14,7 +14,7 @@ members = [
exclude = ["fuzz"]
[workspace.package]
version = "0.8.4"
version = "0.9.0"
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.4" }
wickra-core = { path = "crates/wickra-core", version = "0.9.0" }
thiserror = "2"
rayon = "1.10"
+10 -4
View File
@@ -358,6 +358,12 @@ Every layer is covered; run the suites with the commands in
- `bindings/java`: JUnit cases covering one indicator per FFI archetype
(scalar/batch, multi-output, bars, profile, array input) plus batch equivalence.
The four C-ABI bindings (C#, Go, Java, R) additionally replay a shared,
language-neutral golden fixture (`testdata/golden/*.csv`, generated by
`cargo run -p wickra-examples --bin gen_golden`) and assert exact parity with the
Rust reference outputs across every archetype (SMA, EMA, RSI, ATR, MACD, ADX,
Beta), catching FFI wiring bugs the math-only core tests cannot see.
## Contributing
Contributions are very welcome — issues, bug reports, ideas, and pull requests
@@ -413,13 +419,13 @@ The library is provided **as is**, without warranty of any kind; see
<p align="center">
<a href="https://github.com/wickra-lib/wickra/stargazers">
<img alt="GitHub stars" src="https://img.shields.io/github/stars/wickra-lib/wickra?style=for-the-badge&logo=github&logoColor=white&color=ffd866">
<img alt="GitHub stars" src="https://raw.githubusercontent.com/wickra-lib/.github/main/profile/badges/stars.svg">
</a>
<a href="https://github.com/wickra-lib/wickra/network/members">
<img alt="GitHub forks" src="https://img.shields.io/github/forks/wickra-lib/wickra?style=for-the-badge&logo=github&logoColor=white&color=78dce8">
<img alt="GitHub forks" src="https://raw.githubusercontent.com/wickra-lib/.github/main/profile/badges/forks.svg">
</a>
<a href="https://github.com/wickra-lib/wickra/issues">
<img alt="GitHub issues" src="https://img.shields.io/github/issues/wickra-lib/wickra?style=for-the-badge&logo=github&logoColor=white&color=ff6188">
<img alt="GitHub issues" src="https://raw.githubusercontent.com/wickra-lib/.github/main/profile/badges/issues.svg">
</a>
</p>
@@ -430,6 +436,6 @@ The library is provided **as is**, without warranty of any kind; see
<p align="center">
<a href="https://star-history.com/#wickra-lib/wickra&Date">
<img alt="Wickra star history" width="640"
src="https://api.star-history.com/svg?repos=wickra-lib/wickra&type=Date&theme=dark">
src="https://raw.githubusercontent.com/wickra-lib/.github/main/profile/badges/star-history.svg">
</a>
</p>
+3 -3
View File
@@ -2,13 +2,13 @@
## Supported versions
Wickra is pre-1.0. Security fixes are applied to the latest released `0.8.4`
Wickra is pre-1.0. Security fixes are applied to the latest released `0.9.0`
version only; please upgrade to the newest release before reporting an issue.
| Version | Supported |
| --- | --- |
| 0.8.4 (latest) | :white_check_mark: |
| < 0.8.4 | :x: |
| 0.9.0 (latest) | :white_check_mark: |
| < 0.9.0 | :x: |
## Reporting a vulnerability
+162
View File
@@ -0,0 +1,162 @@
using System.Globalization;
using System.Runtime.CompilerServices;
using Wickra;
using Xunit;
namespace Wickra.Tests;
/// <summary>
/// Golden-fixture parity: replay the shared <c>testdata/golden</c> input series
/// through the C# FFI and assert every value matches the Rust reference output.
/// Where the archetype tests only check finiteness, this pins exact values, so a
/// wiring bug (swapped parameter, wrong multi-output field) is caught.
/// Fixtures are generated by <c>cargo run -p wickra-examples --bin gen_golden</c>.
/// </summary>
public class GoldenTests
{
private const double Tol = 1e-6;
private static string GoldenDir([CallerFilePath] string file = "") =>
Path.GetFullPath(Path.Combine(Path.GetDirectoryName(file)!, "..", "..", "..", "testdata", "golden"));
private static List<string[]> ReadCsv(string name)
{
var path = Path.Combine(GoldenDir(), name + ".csv");
return File.ReadAllLines(path)
.Skip(1) // header
.Where(l => l.Length > 0)
.Select(l => l.Split(','))
.ToList();
}
private static double[][] Input()
{
return ReadCsv("input")
.Select(r => r.Select(c => double.Parse(c, CultureInfo.InvariantCulture)).ToArray())
.ToArray();
}
private static double Cell(string s) =>
s == "nan" ? double.NaN : double.Parse(s, CultureInfo.InvariantCulture);
private static void AssertClose(double got, double want, int row, string field)
{
if (double.IsNaN(want))
{
Assert.True(double.IsNaN(got), $"row {row} {field}: expected warmup/NaN, got {got}");
return;
}
var tol = Tol * Math.Max(1.0, Math.Abs(want));
Assert.True(Math.Abs(got - want) <= tol, $"row {row} {field}: got {got}, want {want}");
}
// --- scalar (close-driven) ------------------------------------------------
[Theory]
[InlineData("sma")]
[InlineData("ema")]
[InlineData("rsi")]
public void Scalar_MatchesGolden(string name)
{
var input = Input();
var expected = ReadCsv(name);
using var ind = (IDisposable)(name switch
{
"sma" => new Sma(14),
"ema" => new Ema(14),
"rsi" => new Rsi(14),
_ => throw new ArgumentOutOfRangeException(nameof(name)),
});
for (var i = 0; i < input.Length; i++)
{
var close = input[i][3];
double got = ind switch
{
Sma s => s.Update(close),
Ema e => e.Update(close),
Rsi r => r.Update(close),
_ => double.NaN,
};
AssertClose(got, Cell(expected[i][0]), i, name);
}
}
// --- candle, single output ------------------------------------------------
[Fact]
public void Candle_Atr_MatchesGolden()
{
var input = Input();
var expected = ReadCsv("atr");
using var atr = new Atr(14);
for (var i = 0; i < input.Length; i++)
{
var (o, h, l, c, v) = (input[i][0], input[i][1], input[i][2], input[i][3], input[i][4]);
AssertClose(atr.Update(o, h, l, c, v, i), Cell(expected[i][0]), i, "atr");
}
}
// --- pairwise -------------------------------------------------------------
[Fact]
public void Pairwise_Beta_MatchesGolden()
{
var input = Input();
var expected = ReadCsv("beta");
using var beta = new Beta(20);
for (var i = 0; i < input.Length; i++)
{
// generator fed (close, open)
AssertClose(beta.Update(input[i][3], input[i][0]), Cell(expected[i][0]), i, "beta");
}
}
// --- scalar multi-output: MACD -------------------------------------------
[Fact]
public void MultiOutput_Macd_MatchesGolden()
{
var input = Input();
var expected = ReadCsv("macd");
using var macd = new MacdIndicator(12, 26, 9);
for (var i = 0; i < input.Length; i++)
{
MacdOutput? got = macd.Update(input[i][3]);
var e = expected[i];
if (e[0] == "nan")
{
Assert.Null(got);
continue;
}
Assert.NotNull(got);
AssertClose(got!.Value.Macd, Cell(e[0]), i, "macd.macd");
AssertClose(got.Value.Signal, Cell(e[1]), i, "macd.signal");
AssertClose(got.Value.Histogram, Cell(e[2]), i, "macd.histogram");
}
}
// --- candle multi-output: ADX --------------------------------------------
[Fact]
public void MultiOutput_Adx_MatchesGolden()
{
var input = Input();
var expected = ReadCsv("adx");
using var adx = new Adx(14);
for (var i = 0; i < input.Length; i++)
{
var (o, h, l, c, v) = (input[i][0], input[i][1], input[i][2], input[i][3], input[i][4]);
AdxOutput? got = adx.Update(o, h, l, c, v, i);
var e = expected[i];
if (e[0] == "nan")
{
Assert.Null(got);
continue;
}
Assert.NotNull(got);
AssertClose(got!.Value.PlusDi, Cell(e[0]), i, "adx.plus_di");
AssertClose(got.Value.MinusDi, Cell(e[1]), i, "adx.minus_di");
AssertClose(got.Value.Adx, Cell(e[2]), i, "adx.adx");
}
}
}
+3 -1
View File
@@ -11,7 +11,7 @@
<!-- NuGet package metadata -->
<PackageId>Wickra</PackageId>
<Version>0.8.4</Version>
<Version>0.9.0</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>
@@ -20,6 +20,7 @@
<RepositoryType>git</RepositoryType>
<PackageTags>technical-analysis;indicators;trading;finance;streaming;ffi;native</PackageTags>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageIcon>icon.png</PackageIcon>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
@@ -42,6 +43,7 @@
<ItemGroup>
<None Include="..\README.md" Pack="true" PackagePath="\" />
<None Include="..\icon.png" Pack="true" PackagePath="\" />
</ItemGroup>
<!--
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

+191
View File
@@ -0,0 +1,191 @@
package wickra
import (
"bufio"
"math"
"os"
"strconv"
"strings"
"testing"
)
// Golden-fixture parity: replay the shared testdata/golden input series through
// the Go FFI and assert every value matches the Rust reference output. Where the
// archetype test only checks finiteness, this pins exact values, catching wiring
// bugs (swapped params, wrong multi-output field). Fixtures are generated by
// `cargo run -p wickra-examples --bin gen_golden`.
const goldenTol = 1e-6
func readGolden(t *testing.T, name string) [][]string {
t.Helper()
f, err := os.Open("../../testdata/golden/" + name + ".csv")
if err != nil {
t.Fatalf("open %s: %v", name, err)
}
defer f.Close()
var rows [][]string
sc := bufio.NewScanner(f)
first := true
for sc.Scan() {
line := sc.Text()
if first {
first = false
continue
}
if line == "" {
continue
}
rows = append(rows, strings.Split(line, ","))
}
return rows
}
func goldenCell(s string) float64 {
if s == "nan" {
return math.NaN()
}
v, _ := strconv.ParseFloat(s, 64)
return v
}
func goldenInput(t *testing.T) [][]float64 {
rows := readGolden(t, "input")
out := make([][]float64, len(rows))
for i, r := range rows {
vals := make([]float64, len(r))
for j, c := range r {
vals[j] = goldenCell(c)
}
out[i] = vals
}
return out
}
func assertGoldenClose(t *testing.T, got, want float64, row int, field string) {
t.Helper()
if math.IsNaN(want) {
if !math.IsNaN(got) {
t.Errorf("row %d %s: expected warmup/NaN, got %v", row, field, got)
}
return
}
tol := goldenTol * math.Max(1.0, math.Abs(want))
if math.Abs(got-want) > tol {
t.Errorf("row %d %s: got %v want %v", row, field, got, want)
}
}
func TestGoldenScalar(t *testing.T) {
input := goldenInput(t)
sma, err := NewSma(14)
if err != nil {
t.Fatal(err)
}
defer sma.Close()
ema, err := NewEma(14)
if err != nil {
t.Fatal(err)
}
defer ema.Close()
rsi, err := NewRsi(14)
if err != nil {
t.Fatal(err)
}
defer rsi.Close()
cases := []struct {
name string
upd func(close float64) float64
}{
{"sma", sma.Update},
{"ema", ema.Update},
{"rsi", rsi.Update},
}
for _, tc := range cases {
exp := readGolden(t, tc.name)
for i := range input {
assertGoldenClose(t, tc.upd(input[i][3]), goldenCell(exp[i][0]), i, tc.name)
}
}
}
func TestGoldenAtr(t *testing.T) {
input := goldenInput(t)
exp := readGolden(t, "atr")
atr, err := NewAtr(14)
if err != nil {
t.Fatal(err)
}
defer atr.Close()
for i := range input {
got := atr.Update(input[i][0], input[i][1], input[i][2], input[i][3], input[i][4], int64(i))
assertGoldenClose(t, got, goldenCell(exp[i][0]), i, "atr")
}
}
func TestGoldenBeta(t *testing.T) {
input := goldenInput(t)
exp := readGolden(t, "beta")
beta, err := NewBeta(20)
if err != nil {
t.Fatal(err)
}
defer beta.Close()
for i := range input {
// generator fed (close, open)
assertGoldenClose(t, beta.Update(input[i][3], input[i][0]), goldenCell(exp[i][0]), i, "beta")
}
}
func TestGoldenMacd(t *testing.T) {
input := goldenInput(t)
exp := readGolden(t, "macd")
macd, err := NewMacdIndicator(12, 26, 9)
if err != nil {
t.Fatal(err)
}
defer macd.Close()
for i := range input {
out, ok := macd.Update(input[i][3])
if exp[i][0] == "nan" {
if ok {
t.Errorf("row %d macd: expected warmup, got %+v", i, out)
}
continue
}
if !ok {
t.Errorf("row %d macd: expected value, got warmup", i)
continue
}
assertGoldenClose(t, out.Macd, goldenCell(exp[i][0]), i, "macd.macd")
assertGoldenClose(t, out.Signal, goldenCell(exp[i][1]), i, "macd.signal")
assertGoldenClose(t, out.Histogram, goldenCell(exp[i][2]), i, "macd.histogram")
}
}
func TestGoldenAdx(t *testing.T) {
input := goldenInput(t)
exp := readGolden(t, "adx")
adx, err := NewAdx(14)
if err != nil {
t.Fatal(err)
}
defer adx.Close()
for i := range input {
out, ok := adx.Update(input[i][0], input[i][1], input[i][2], input[i][3], input[i][4], int64(i))
if exp[i][0] == "nan" {
if ok {
t.Errorf("row %d adx: expected warmup, got %+v", i, out)
}
continue
}
if !ok {
t.Errorf("row %d adx: expected value, got warmup", i)
continue
}
assertGoldenClose(t, out.PlusDi, goldenCell(exp[i][0]), i, "adx.plus_di")
assertGoldenClose(t, out.MinusDi, goldenCell(exp[i][1]), i, "adx.minus_di")
assertGoldenClose(t, out.Adx, goldenCell(exp[i][2]), i, "adx.adx")
}
}
+2 -2
View File
@@ -30,14 +30,14 @@ Maven:
<dependency>
<groupId>org.wickra</groupId>
<artifactId>wickra</artifactId>
<version>0.8.4</version>
<version>0.9.0</version>
</dependency>
```
Gradle:
```kotlin
implementation("org.wickra:wickra:0.8.4")
implementation("org.wickra:wickra:0.9.0")
```
The native library ships prebuilt per platform (Linux, macOS, Windows — x64 and
+2 -2
View File
@@ -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>
+12
View File
@@ -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."
+9 -9
View File
@@ -6,7 +6,7 @@
<groupId>org.wickra</groupId>
<artifactId>wickra</artifactId>
<version>0.8.4</version>
<version>0.9.0</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>
@@ -0,0 +1,160 @@
package org.wickra;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
/**
* Golden-fixture parity: replay the shared {@code testdata/golden} input series
* through the Java FFI and assert every value matches the Rust reference output.
* Where the archetype tests only check finiteness, this pins exact values, so a
* wiring bug (swapped parameter, wrong multi-output field) is caught. Fixtures
* are generated by {@code cargo run -p wickra-examples --bin gen_golden}.
*/
class GoldenTests {
private static final double TOL = 1e-6;
private static Path goldenDir() {
File d = new File("").getAbsoluteFile();
while (d != null) {
File g = new File(d, "testdata/golden");
if (g.isDirectory()) {
return g.toPath();
}
d = d.getParentFile();
}
throw new IllegalStateException("testdata/golden not found from " + new File("").getAbsolutePath());
}
private static List<String[]> readCsv(String name) throws Exception {
List<String> lines = Files.readAllLines(goldenDir().resolve(name + ".csv"));
List<String[]> rows = new ArrayList<>();
for (int i = 1; i < lines.size(); i++) { // skip header
if (!lines.get(i).isEmpty()) {
rows.add(lines.get(i).split(","));
}
}
return rows;
}
private static double cell(String s) {
return s.equals("nan") ? Double.NaN : Double.parseDouble(s);
}
private static double[][] input() throws Exception {
List<String[]> rows = readCsv("input");
double[][] out = new double[rows.size()][];
for (int i = 0; i < rows.size(); i++) {
String[] r = rows.get(i);
double[] v = new double[r.length];
for (int j = 0; j < r.length; j++) {
v[j] = Double.parseDouble(r[j]);
}
out[i] = v;
}
return out;
}
private static void close(double got, double want, int row, String field) {
if (Double.isNaN(want)) {
assertTrue(Double.isNaN(got), "row " + row + " " + field + ": expected warmup/NaN, got " + got);
return;
}
double tol = TOL * Math.max(1.0, Math.abs(want));
assertTrue(Math.abs(got - want) <= tol, "row " + row + " " + field + ": got " + got + " want " + want);
}
@Test
void scalarMatchesGolden() throws Exception {
double[][] in = input();
try (Sma sma = new Sma(14)) {
List<String[]> e = readCsv("sma");
for (int i = 0; i < in.length; i++) {
close(sma.update(in[i][3]), cell(e.get(i)[0]), i, "sma");
}
}
try (Ema ema = new Ema(14)) {
List<String[]> e = readCsv("ema");
for (int i = 0; i < in.length; i++) {
close(ema.update(in[i][3]), cell(e.get(i)[0]), i, "ema");
}
}
try (Rsi rsi = new Rsi(14)) {
List<String[]> e = readCsv("rsi");
for (int i = 0; i < in.length; i++) {
close(rsi.update(in[i][3]), cell(e.get(i)[0]), i, "rsi");
}
}
}
@Test
void candleAtrMatchesGolden() throws Exception {
double[][] in = input();
List<String[]> e = readCsv("atr");
try (Atr atr = new Atr(14)) {
for (int i = 0; i < in.length; i++) {
close(atr.update(in[i][0], in[i][1], in[i][2], in[i][3], in[i][4], i), cell(e.get(i)[0]), i, "atr");
}
}
}
@Test
void pairwiseBetaMatchesGolden() throws Exception {
double[][] in = input();
List<String[]> e = readCsv("beta");
try (Beta beta = new Beta(20)) {
for (int i = 0; i < in.length; i++) {
// generator fed (close, open)
close(beta.update(in[i][3], in[i][0]), cell(e.get(i)[0]), i, "beta");
}
}
}
@Test
void macdMatchesGolden() throws Exception {
double[][] in = input();
List<String[]> e = readCsv("macd");
try (MacdIndicator macd = new MacdIndicator(12, 26, 9)) {
for (int i = 0; i < in.length; i++) {
MacdOutput o = macd.update(in[i][3]);
String[] row = e.get(i);
if (row[0].equals("nan")) {
assertNull(o, "row " + i + " macd: expected warmup");
continue;
}
assertNotNull(o, "row " + i + " macd: expected value");
close(o.macd(), cell(row[0]), i, "macd.macd");
close(o.signal(), cell(row[1]), i, "macd.signal");
close(o.histogram(), cell(row[2]), i, "macd.histogram");
}
}
}
@Test
void adxMatchesGolden() throws Exception {
double[][] in = input();
List<String[]> e = readCsv("adx");
try (Adx adx = new Adx(14)) {
for (int i = 0; i < in.length; i++) {
AdxOutput o = adx.update(in[i][0], in[i][1], in[i][2], in[i][3], in[i][4], i);
String[] row = e.get(i);
if (row[0].equals("nan")) {
assertNull(o, "row " + i + " adx: expected warmup");
continue;
}
assertNotNull(o, "row " + i + " adx: expected value");
close(o.plusDi(), cell(row[0]), i, "adx.plus_di");
close(o.minusDi(), cell(row[1]), i, "adx.minus_di");
close(o.adx(), cell(row[2]), i, "adx.adx");
}
}
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wickra-darwin-arm64",
"version": "0.8.4",
"version": "0.9.0",
"description": "Native binding for wickra (macOS Apple Silicon). Installed automatically as an optional dependency of wickra on matching platforms.",
"main": "wickra.darwin-arm64.node",
"files": [
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wickra-darwin-x64",
"version": "0.8.4",
"version": "0.9.0",
"description": "Native binding for wickra (macOS Intel). Installed automatically as an optional dependency of wickra on matching platforms.",
"main": "wickra.darwin-x64.node",
"files": [
@@ -1,6 +1,6 @@
{
"name": "wickra-linux-arm64-gnu",
"version": "0.8.4",
"version": "0.9.0",
"description": "Native binding for wickra (linux arm64 GNU). Installed automatically as an optional dependency of wickra on matching platforms.",
"main": "wickra.linux-arm64-gnu.node",
"files": [
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wickra-linux-x64-gnu",
"version": "0.8.4",
"version": "0.9.0",
"description": "Native binding for wickra (linux x64 GNU). Installed automatically as an optional dependency of wickra on matching platforms.",
"main": "wickra.linux-x64-gnu.node",
"files": [
@@ -1,6 +1,6 @@
{
"name": "wickra-win32-arm64-msvc",
"version": "0.8.4",
"version": "0.9.0",
"description": "Native binding for wickra (Windows arm64 MSVC). Installed automatically as an optional dependency of wickra on matching platforms.",
"main": "wickra.win32-arm64-msvc.node",
"files": [
@@ -1,6 +1,6 @@
{
"name": "wickra-win32-x64-msvc",
"version": "0.8.4",
"version": "0.9.0",
"description": "Native binding for wickra (Windows x64 MSVC). Installed automatically as an optional dependency of wickra on matching platforms.",
"main": "wickra.win32-x64-msvc.node",
"files": [
+20 -20
View File
@@ -1,12 +1,12 @@
{
"name": "wickra",
"version": "0.8.4",
"version": "0.9.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "wickra",
"version": "0.8.4",
"version": "0.9.0",
"license": "MIT OR Apache-2.0",
"devDependencies": {
"@napi-rs/cli": "^2.18.0"
@@ -15,12 +15,12 @@
"node": ">= 18"
},
"optionalDependencies": {
"wickra-darwin-arm64": "0.8.4",
"wickra-darwin-x64": "0.8.4",
"wickra-linux-arm64-gnu": "0.8.4",
"wickra-linux-x64-gnu": "0.8.4",
"wickra-win32-arm64-msvc": "0.8.4",
"wickra-win32-x64-msvc": "0.8.4"
"wickra-darwin-arm64": "0.9.0",
"wickra-darwin-x64": "0.9.0",
"wickra-linux-arm64-gnu": "0.9.0",
"wickra-linux-x64-gnu": "0.9.0",
"wickra-win32-arm64-msvc": "0.9.0",
"wickra-win32-x64-msvc": "0.9.0"
}
},
"node_modules/@napi-rs/cli": {
@@ -41,8 +41,8 @@
}
},
"node_modules/wickra-darwin-arm64": {
"version": "0.8.4",
"resolved": "https://registry.npmjs.org/wickra-darwin-arm64/-/wickra-darwin-arm64-0.8.4.tgz",
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/wickra-darwin-arm64/-/wickra-darwin-arm64-0.9.0.tgz",
"integrity": "sha512-4eZiBR/yGUdr4nzhEUFy2i69XgNx64iI2ax/LPamsThgylC0KpHOZKK19QzJ2d9KbK4C8nMjME5FLuR+4GNEwQ==",
"cpu": [
"arm64"
@@ -57,8 +57,8 @@
}
},
"node_modules/wickra-darwin-x64": {
"version": "0.8.4",
"resolved": "https://registry.npmjs.org/wickra-darwin-x64/-/wickra-darwin-x64-0.8.4.tgz",
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/wickra-darwin-x64/-/wickra-darwin-x64-0.9.0.tgz",
"integrity": "sha512-6hf8zI3QPjTFp4zCpmgUwDvNtu6jHqNUHKD5e55POo0CgA52HkpyxSPtVm8TGTIZDI7kPjlbOdBM8CJ76mmXwA==",
"cpu": [
"x64"
@@ -73,8 +73,8 @@
}
},
"node_modules/wickra-linux-arm64-gnu": {
"version": "0.8.4",
"resolved": "https://registry.npmjs.org/wickra-linux-arm64-gnu/-/wickra-linux-arm64-gnu-0.8.4.tgz",
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/wickra-linux-arm64-gnu/-/wickra-linux-arm64-gnu-0.9.0.tgz",
"integrity": "sha512-kSe6y0xBMSiqdPLXNjwop5WZdHtvdBNKSEBCwZ4hFq33p4apW25/wrlzv9/oDuyD4kuPabJEhCCnFOplh58CUg==",
"cpu": [
"arm64"
@@ -89,8 +89,8 @@
}
},
"node_modules/wickra-linux-x64-gnu": {
"version": "0.8.4",
"resolved": "https://registry.npmjs.org/wickra-linux-x64-gnu/-/wickra-linux-x64-gnu-0.8.4.tgz",
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/wickra-linux-x64-gnu/-/wickra-linux-x64-gnu-0.9.0.tgz",
"integrity": "sha512-tWBWS4qz7hxM4xnpFb59bhf6TaLwXq0Z3jEa/2l7r8PiHA94g8r8S53NRMiT+4yiL5hSWe/nUiC/YXdRrhEZ4g==",
"cpu": [
"x64"
@@ -105,8 +105,8 @@
}
},
"node_modules/wickra-win32-arm64-msvc": {
"version": "0.8.4",
"resolved": "https://registry.npmjs.org/wickra-win32-arm64-msvc/-/wickra-win32-arm64-msvc-0.8.4.tgz",
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/wickra-win32-arm64-msvc/-/wickra-win32-arm64-msvc-0.9.0.tgz",
"integrity": "sha512-EXIckHxAtF75PUGDKRzXyqMe9ldP0JjSdu68WFN6iJfp+McYrGu6h40TEJlQ/oUEIoPqiZB/xhVyo/el5Lg7zw==",
"cpu": [
"arm64"
@@ -121,8 +121,8 @@
}
},
"node_modules/wickra-win32-x64-msvc": {
"version": "0.8.4",
"resolved": "https://registry.npmjs.org/wickra-win32-x64-msvc/-/wickra-win32-x64-msvc-0.8.4.tgz",
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/wickra-win32-x64-msvc/-/wickra-win32-x64-msvc-0.9.0.tgz",
"integrity": "sha512-Yfsqq1Xwp6hdxMyLze411vNdo7BDwI6+lPSe7A9XdqyPecNDbtKwYLpsal2r8EHbNzqM+R8XnuRtUaEQS5VlUQ==",
"cpu": [
"x64"
+7 -7
View File
@@ -1,6 +1,6 @@
{
"name": "wickra",
"version": "0.8.4",
"version": "0.9.0",
"description": "Streaming-first technical indicators: incremental, fast, install-free. Node bindings powered by Rust.",
"author": "kingchenc <support@wickra.org>",
"main": "index.js",
@@ -47,12 +47,12 @@
"node": ">= 18"
},
"optionalDependencies": {
"wickra-linux-x64-gnu": "0.8.4",
"wickra-linux-arm64-gnu": "0.8.4",
"wickra-darwin-x64": "0.8.4",
"wickra-darwin-arm64": "0.8.4",
"wickra-win32-x64-msvc": "0.8.4",
"wickra-win32-arm64-msvc": "0.8.4"
"wickra-linux-x64-gnu": "0.9.0",
"wickra-linux-arm64-gnu": "0.9.0",
"wickra-darwin-x64": "0.9.0",
"wickra-darwin-arm64": "0.9.0",
"wickra-win32-x64-msvc": "0.9.0",
"wickra-win32-arm64-msvc": "0.9.0"
},
"scripts": {
"build": "napi build --platform --release",
+2 -1
View File
@@ -4,7 +4,7 @@ build-backend = "maturin"
[project]
name = "wickra"
version = "0.8.4"
version = "0.9.0"
description = "Streaming-first technical indicators: incremental, fast, install-free."
readme = "README.md"
license = "MIT OR Apache-2.0"
@@ -48,6 +48,7 @@ bench = [
[project.urls]
Homepage = "https://github.com/wickra-lib/wickra"
Documentation = "https://docs.wickra.org"
Repository = "https://github.com/wickra-lib/wickra"
Issues = "https://github.com/wickra-lib/wickra/issues"
+1
View File
@@ -11,3 +11,4 @@
^src/wickra-c$
^src/Makevars$
^\.gitignore$
^data-raw$
+10 -3
View File
@@ -1,15 +1,19 @@
Package: wickra
Type: Package
Title: Streaming-First Technical Indicators
Version: 0.8.4
Version: 0.9.0
Authors@R: person("Wickra contributors", role = c("aut", "cre"), email = "support@wickra.org")
Description: R bindings for the Wickra technical-analysis library over its C ABI
hub. Exposes 514 indicators, each an O(1) streaming state machine shared with
the Rust core and the other language bindings, so that live and historical
evaluation use the exact same implementation.
License: MIT + file LICENSE | Apache License 2.0
URL: https://github.com/wickra-lib/wickra, https://docs.wickra.org
URL: https://github.com/wickra-lib/wickra, https://docs.wickra.org,
https://wickra-lib.r-universe.dev
BugReports: https://github.com/wickra-lib/wickra/issues
X-schema.org-keywords: technical-analysis, indicators, streaming, trading,
finance, quant, algorithmic-trading, backtesting, time-series, ta-lib,
candlestick, market-data
Encoding: UTF-8
NeedsCompilation: yes
SystemRequirements: the Wickra C ABI shared library, downloaded automatically at
@@ -17,6 +21,9 @@ SystemRequirements: the Wickra C ABI shared library, downloaded automatically at
Set WICKRA_INCLUDE_DIR and WICKRA_LIB_DIR to build against a locally built C
ABI instead (e.g. after `cargo build -p wickra-c --release`).
Roxygen: list(markdown = TRUE)
Suggests: testthat (>= 3.0.0)
Depends: R (>= 2.10)
Suggests: testthat (>= 3.0.0), knitr, rmarkdown
VignetteBuilder: knitr
LazyData: true
Config/testthat/edition: 3
Config/roxygen2/version: 8.0.0
+17
View File
@@ -0,0 +1,17 @@
#' Synthetic daily OHLCV sample series
#'
#' A deterministic, synthetic daily OHLCV (open / high / low / close / volume)
#' price series for use in the examples, the *Getting started* vignette, and
#' tests. It is a seeded random walk, **not** real market data. Regenerate with
#' `data-raw/sample_ohlcv.R`.
#'
#' @format A data frame with 250 rows and 6 columns:
#' \describe{
#' \item{date}{Trading date (`Date`).}
#' \item{open}{Opening price.}
#' \item{high}{Session high.}
#' \item{low}{Session low.}
#' \item{close}{Closing price.}
#' \item{volume}{Traded volume.}
#' }
"sample_ohlcv"
+1 -1
View File
@@ -1,4 +1,4 @@
# Wickra — R
# Wickra — R <img src="man/figures/logo.png" align="right" height="120" alt="Wickra logo" />
[![CI](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml/badge.svg)](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml)
[![codecov](https://codecov.io/gh/wickra-lib/wickra/branch/main/graph/badge.svg)](https://codecov.io/gh/wickra-lib/wickra)
+31
View File
@@ -0,0 +1,31 @@
# Generates data/sample_ohlcv.rda — a deterministic, synthetic daily OHLCV
# series used by the examples, the getting-started vignette, and tests. It is a
# seeded random walk, NOT real market data.
#
# Regenerate (run from the R package root, bindings/r):
# Rscript data-raw/sample_ohlcv.R
set.seed(42)
n <- 250L
dates <- seq(as.Date("2023-01-02"), by = "day", length.out = n)
# Random-walk close with a mild upward drift; derive OHLC around it.
returns <- rnorm(n, mean = 0.0004, sd = 0.012)
close <- round(100 * cumprod(1 + returns), 2)
open <- round(c(100, head(close, -1)) * (1 + rnorm(n, 0, 0.003)), 2)
high <- round(pmax(open, close) * (1 + abs(rnorm(n, 0, 0.004))), 2)
low <- round(pmin(open, close) * (1 - abs(rnorm(n, 0, 0.004))), 2)
volume <- round(1e6 * exp(rnorm(n, 0, 0.3)))
sample_ohlcv <- data.frame(
date = dates,
open = open,
high = high,
low = low,
close = close,
volume = volume
)
save(sample_ohlcv, file = "data/sample_ohlcv.rda", compress = "xz", version = 2)
cat(sprintf("wrote data/sample_ohlcv.rda: %d rows x %d cols\n",
nrow(sample_ohlcv), ncol(sample_ohlcv)))
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

+27
View File
@@ -0,0 +1,27 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/data.R
\docType{data}
\name{sample_ohlcv}
\alias{sample_ohlcv}
\title{Synthetic daily OHLCV sample series}
\format{
A data frame with 250 rows and 6 columns:
\describe{
\item{date}{Trading date (\code{Date}).}
\item{open}{Opening price.}
\item{high}{Session high.}
\item{low}{Session low.}
\item{close}{Closing price.}
\item{volume}{Traded volume.}
}
}
\usage{
sample_ohlcv
}
\description{
A deterministic, synthetic daily OHLCV (open / high / low / close / volume)
price series for use in the examples, the \emph{Getting started} vignette, and
tests. It is a seeded random walk, \strong{not} real market data. Regenerate with
\code{data-raw/sample_ohlcv.R}.
}
\keyword{datasets}
+119
View File
@@ -0,0 +1,119 @@
# Golden-fixture parity: replay the shared testdata/golden input series through
# the R FFI and assert every value matches the Rust reference output. Where the
# archetype test only checks finiteness, this pins exact values, catching wiring
# bugs (swapped params, wrong multi-output field). Fixtures are generated by
# `cargo run -p wickra-examples --bin gen_golden`.
#
# The fixtures live at the repository root (testdata/golden) and are present
# during the monorepo test run, but they are NOT bundled into the standalone R
# package. A packaged check (r-universe / CRAN) therefore cannot find them, so
# these tests skip there; the parity is already enforced by the repository CI.
find_golden_dir <- function() {
d <- normalizePath(getwd(), winslash = "/", mustWork = FALSE)
repeat {
g <- file.path(d, "testdata", "golden")
if (dir.exists(g)) return(g)
parent <- dirname(d)
if (identical(parent, d)) return(NULL)
d <- parent
}
}
golden_dir <- find_golden_dir()
skip_if_no_golden <- function() {
skip_if(is.null(golden_dir), "golden fixtures not bundled with the package")
}
read_golden <- function(name) {
read.csv(file.path(golden_dir, paste0(name, ".csv")),
colClasses = "character", check.names = FALSE)
}
read_golden_input <- function() read.csv(file.path(golden_dir, "input.csv"))
gcell <- function(s) if (identical(s, "nan")) NA_real_ else as.numeric(s)
expect_close <- function(got, want, row, field) {
if (is.na(want)) {
expect_true(is.na(got), info = paste("row", row, field, "expected warmup/NA"))
} else {
tol <- 1e-6 * max(1, abs(want))
expect_lte(abs(got - want), tol, label = paste("row", row, field, "got", got, "want", want))
}
}
test_that("scalar indicators match golden", {
skip_if_no_golden()
golden_input <- read_golden_input()
specs <- list(c("sma", 14), c("ema", 14), c("rsi", 14))
for (spec in specs) {
name <- spec[[1]]
ind <- switch(name, sma = Sma(14), ema = Ema(14), rsi = Rsi(14))
exp <- read_golden(name)
for (i in seq_len(nrow(golden_input))) {
got <- update(ind, golden_input$close[i])
expect_close(got, gcell(exp[i, 1]), i, name)
}
}
})
test_that("candle Atr matches golden", {
skip_if_no_golden()
golden_input <- read_golden_input()
atr <- Atr(14)
exp <- read_golden("atr")
for (i in seq_len(nrow(golden_input))) {
got <- update(atr, golden_input$open[i], golden_input$high[i], golden_input$low[i],
golden_input$close[i], golden_input$volume[i], i - 1)
expect_close(got, gcell(exp[i, 1]), i, "atr")
}
})
test_that("pairwise Beta matches golden", {
skip_if_no_golden()
golden_input <- read_golden_input()
beta <- Beta(20)
exp <- read_golden("beta")
for (i in seq_len(nrow(golden_input))) {
# generator fed (close, open)
got <- update(beta, golden_input$close[i], golden_input$open[i])
expect_close(got, gcell(exp[i, 1]), i, "beta")
}
})
test_that("multi-output MACD matches golden", {
skip_if_no_golden()
golden_input <- read_golden_input()
macd <- MacdIndicator(12, 26, 9)
exp <- read_golden("macd")
for (i in seq_len(nrow(golden_input))) {
out <- update(macd, golden_input$close[i])
if (identical(exp[i, "macd"], "nan")) {
expect_true(all(is.na(out)), info = paste("row", i, "macd warmup"))
} else {
expect_close(out[["macd"]], gcell(exp[i, "macd"]), i, "macd.macd")
expect_close(out[["signal"]], gcell(exp[i, "signal"]), i, "macd.signal")
expect_close(out[["histogram"]], gcell(exp[i, "histogram"]), i, "macd.histogram")
}
}
})
test_that("multi-output ADX matches golden", {
skip_if_no_golden()
golden_input <- read_golden_input()
adx <- Adx(14)
exp <- read_golden("adx")
for (i in seq_len(nrow(golden_input))) {
out <- update(adx, golden_input$open[i], golden_input$high[i], golden_input$low[i],
golden_input$close[i], golden_input$volume[i], i - 1)
if (identical(exp[i, "plus_di"], "nan")) {
expect_true(all(is.na(out)), info = paste("row", i, "adx warmup"))
} else {
expect_close(out[["plus_di"]], gcell(exp[i, "plus_di"]), i, "adx.plus_di")
expect_close(out[["minus_di"]], gcell(exp[i, "minus_di"]), i, "adx.minus_di")
expect_close(out[["adx"]], gcell(exp[i, "adx"]), i, "adx.adx")
}
}
})
+113
View File
@@ -0,0 +1,113 @@
---
title: "Getting started with wickra"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{Getting started with wickra}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r setup, include = FALSE}
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
```
`wickra` exposes the Wickra technical-analysis library in R over its C ABI hub.
Every indicator is a constructor returning a `wickra_indicator`; you feed it data
one observation at a time with `update()` (an O(1) streaming step) or run a whole
series at once with `batch()`. Both paths share the exact same Rust core, so a
live feed and a historical backtest compute identical values.
```{r}
library(wickra)
```
## A sample series
The package ships a small synthetic OHLCV series, `sample_ohlcv`, for examples
(a seeded random walk — not real market data).
```{r}
head(sample_ohlcv)
```
## Batch: a whole series at once
Scalar indicators run over a vector with `batch()`. Warmup positions are `NA`.
```{r}
sma <- Sma(20)
sma_values <- batch(sma, sample_ohlcv$close)
tail(sma_values)
```
## Streaming: one observation at a time
The same indicator fed tick-by-tick with `update()` returns the identical
values — an equivalence the test suite enforces for every indicator.
```{r}
sma_stream <- Sma(20)
streamed <- vapply(sample_ohlcv$close, function(p) update(sma_stream, p), numeric(1))
same_warmup <- all(is.na(streamed) == is.na(sma_values))
same_values <- all(streamed == sma_values, na.rm = TRUE)
c(batch_equals_streaming = same_warmup && same_values)
```
A typical streaming loop reacts to each value as it arrives:
```{r}
rsi <- Rsi(14)
overbought_days <- 0L
for (price in sample_ohlcv$close) {
v <- update(rsi, price) # NA during warmup
if (!is.na(v) && v > 70) overbought_days <- overbought_days + 1L
}
overbought_days
```
## Multi-output indicators
Indicators with several outputs return a *named* numeric vector (`NA` while
warming up). MACD is the classic example — line, signal, and histogram:
```{r}
macd <- MacdIndicator(12, 26, 9)
last_macd <- c(macd = NA, signal = NA, histogram = NA)
for (price in sample_ohlcv$close) last_macd <- update(macd, price)
last_macd
```
## Candle indicators
Indicators that need the whole bar take the OHLCV fields plus a timestamp:
```{r}
atr <- Atr(14)
last_atr <- NA_real_
for (i in seq_len(nrow(sample_ohlcv))) {
last_atr <- update(
atr,
sample_ohlcv$open[i], sample_ohlcv$high[i], sample_ohlcv$low[i],
sample_ohlcv$close[i], sample_ohlcv$volume[i], i - 1
)
}
last_atr
```
## Resetting state
`reset()` returns an indicator to its warmup state so the same object can be
reused on a fresh series:
```{r}
reset(sma)
update(sma, 100) # NaN — warming up again
```
## Next steps
- Full indicator catalogue, guides, and per-indicator reference:
<https://docs.wickra.org>.
- Every constructor (`Sma()`, `Rsi()`, `MacdIndicator()`, `Atr()`, …) is listed
in this package's help index.
+12
View File
@@ -9,6 +9,18 @@ all-features = true
# Fail on any security advisory or unmaintained/unsound crate in the tree.
version = 2
yanked = "deny"
# Temporary, upstream-blocked exception. Both advisories are fixed in pyo3
# 0.29.0, but rust-numpy 0.28 (latest release) hard-pins `pyo3 ^0.28.0`, so the
# resolver cannot select 0.29 until rust-numpy ships a 0.29-compatible release
# (PyO3/rust-numpy "Updated to PyO3 version 0.29.0" is open, not yet published).
# Neither vulnerable code path is reachable from our binding: it never calls
# `BoundListIterator::nth`/`nth_back` or the `PyTuple` equivalents (0176), nor
# `PyCFunction::new_closure` (0177) — verified by grep over bindings/python/src.
# Remove both once rust-numpy 0.29 lands and the pyo3 0.29 bump goes in.
ignore = [
"RUSTSEC-2026-0176",
"RUSTSEC-2026-0177",
]
[bans]
# Catch accidental duplicate versions and wildcard ("*") version requirements.
+12
View File
@@ -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. This
# example resolves only com.fasterxml.jackson.core:jackson-databind 2.17.1 (and
# its 2.x jackson-core); 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."
+5 -5
View File
@@ -6,7 +6,7 @@
<groupId>org.wickra.examples</groupId>
<artifactId>wickra-examples</artifactId>
<version>0.8.4</version>
<version>0.9.0</version>
<packaging>jar</packaging>
<name>Wickra Java examples</name>
@@ -21,13 +21,13 @@
<dependency>
<groupId>org.wickra</groupId>
<artifactId>wickra</artifactId>
<version>0.8.4</version>
<version>0.9.0</version>
</dependency>
<!-- Only the network examples (fetch_btcusdt) parse JSON. -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.1</version>
<version>2.22.0</version>
</dependency>
</dependencies>
@@ -36,7 +36,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<version>3.15.0</version>
</plugin>
<!--
@@ -46,7 +46,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>
+7 -7
View File
@@ -17,7 +17,7 @@
},
"../../bindings/node": {
"name": "wickra",
"version": "0.8.4",
"version": "0.9.0",
"license": "MIT OR Apache-2.0",
"devDependencies": {
"@napi-rs/cli": "^2.18.0"
@@ -26,12 +26,12 @@
"node": ">= 18"
},
"optionalDependencies": {
"wickra-darwin-arm64": "0.8.4",
"wickra-darwin-x64": "0.8.4",
"wickra-linux-arm64-gnu": "0.8.4",
"wickra-linux-x64-gnu": "0.8.4",
"wickra-win32-arm64-msvc": "0.8.4",
"wickra-win32-x64-msvc": "0.8.4"
"wickra-darwin-arm64": "0.9.0",
"wickra-darwin-x64": "0.9.0",
"wickra-linux-arm64-gnu": "0.9.0",
"wickra-linux-x64-gnu": "0.9.0",
"wickra-win32-arm64-msvc": "0.9.0",
"wickra-win32-x64-msvc": "0.9.0"
}
},
"node_modules/wickra": {
+138
View File
@@ -0,0 +1,138 @@
//! Generate the language-neutral golden fixtures consumed by the per-binding
//! parity runners (`bindings/{csharp,go,java,r}`).
//!
//! Run from the repo root: `cargo run -p wickra-examples --bin gen_golden`.
//! It writes a deterministic OHLCV input series plus the reference outputs of a
//! curated set of indicators spanning the FFI archetypes (scalar, candle,
//! scalar multi-output, candle multi-output, pairwise), computed by the Rust
//! core. Each binding runner replays the same input through its own FFI and
//! checks it matches these values — catching wiring bugs (swapped params,
//! wrong multi-output index) that the math-only core tests cannot see.
//!
//! `nan` marks a warmup slot where the indicator returned `None`.
use std::fmt::Write as _;
use std::fs;
use std::path::Path;
use wickra::{Adx, Atr, Beta, Candle, Ema, Indicator, MacdIndicator, Rsi, Sma};
const N: usize = 80;
/// Deterministic OHLCV bar `i`: a varied, non-degenerate path so every
/// indicator gets real movement (no constant returns, no zero ranges).
fn bar(i: usize) -> (f64, f64, f64, f64, f64) {
let t = i as f64;
let close = 100.0 + 10.0 * (t * 0.3).sin() + 0.5 * t;
let open = close - (t * 0.5).cos();
let span = 1.0 + 0.5 * (t * 0.7).sin().abs();
let high = close.max(open) + span;
let low = close.min(open) - span;
let volume = 1000.0 + 100.0 * (t * 0.2).sin().abs();
(open, high, low, close, volume)
}
fn cell(v: Option<f64>) -> String {
match v {
Some(x) => format!("{x}"),
None => "nan".to_owned(),
}
}
fn write_csv(dir: &Path, name: &str, header: &str, rows: &[String]) {
let mut out = String::new();
let _ = writeln!(out, "{header}");
for r in rows {
let _ = writeln!(out, "{r}");
}
let path = dir.join(format!("{name}.csv"));
fs::write(&path, out).expect("write fixture");
println!("wrote {}", path.display());
}
fn main() {
let dir = Path::new("testdata/golden");
fs::create_dir_all(dir).expect("create testdata/golden");
let candles: Vec<Candle> = (0..N)
.map(|i| {
let (o, h, l, c, v) = bar(i);
Candle::new(o, h, l, c, v, i as i64).expect("valid candle")
})
.collect();
let closes: Vec<f64> = candles.iter().map(|c| c.close).collect();
// input.csv — the single shared series every runner reads.
let mut input = vec![String::from("open,high,low,close,volume")];
for c in &candles {
input.push(format!(
"{},{},{},{},{}",
c.open, c.high, c.low, c.close, c.volume
));
}
let input_header = input.remove(0);
write_csv(dir, "input", &input_header, &input);
// scalar (close-driven), single output. Each is a distinct type, so write
// them out separately rather than from a heterogeneous collection.
{
let mut sma = Sma::new(14).unwrap();
let rows: Vec<String> = closes.iter().map(|&c| cell(sma.update(c))).collect();
write_csv(dir, "sma", "sma", &rows);
}
{
let mut ema = Ema::new(14).unwrap();
let rows: Vec<String> = closes.iter().map(|&c| cell(ema.update(c))).collect();
write_csv(dir, "ema", "ema", &rows);
}
{
let mut rsi = Rsi::new(14).unwrap();
let rows: Vec<String> = closes.iter().map(|&c| cell(rsi.update(c))).collect();
write_csv(dir, "rsi", "rsi", &rows);
}
// candle, single output.
{
let mut atr = Atr::new(14).unwrap();
let rows: Vec<String> = candles.iter().map(|&c| cell(atr.update(c))).collect();
write_csv(dir, "atr", "atr", &rows);
}
// scalar multi-output: MACD(12,26,9).
{
let mut macd = MacdIndicator::new(12, 26, 9).unwrap();
let rows: Vec<String> = closes
.iter()
.map(|&c| match macd.update(c) {
Some(o) => format!("{},{},{}", o.macd, o.signal, o.histogram),
None => "nan,nan,nan".to_owned(),
})
.collect();
write_csv(dir, "macd", "macd,signal,histogram", &rows);
}
// candle multi-output: ADX(14).
{
let mut adx = Adx::new(14).unwrap();
let rows: Vec<String> = candles
.iter()
.map(|&c| match adx.update(c) {
Some(o) => format!("{},{},{}", o.plus_di, o.minus_di, o.adx),
None => "nan,nan,nan".to_owned(),
})
.collect();
write_csv(dir, "adx", "plus_di,minus_di,adx", &rows);
}
// pairwise: Beta(20) over (close, open).
{
let mut beta = Beta::new(20).unwrap();
let rows: Vec<String> = candles
.iter()
.map(|&c| cell(beta.update((c.close, c.open))))
.collect();
write_csv(dir, "beta", "beta", &rows);
}
println!("golden fixtures written to {}", dir.display());
}
+35
View File
@@ -0,0 +1,35 @@
# OSV-Scanner suppressions (VEX record). Consumed by the OpenSSF Scorecard
# Vulnerabilities check, which runs OSV-Scanner over this repository. Each entry
# is an advisory assessed as not affecting Wickra; this mirrors the cargo-deny
# `ignore` list in deny.toml at the OSV layer. See the "Vulnerability
# exploitability (VEX)" section of SECURITY.md.
# pyo3 — both advisories are fixed in pyo3 0.29.0, but rust-numpy 0.28 (latest
# release) hard-pins pyo3 ^0.28.0, so the bump is upstream-blocked. Neither
# vulnerable code path is reachable from the binding: it never calls
# BoundListIterator nth/nth_back, the PyTuple equivalents, or
# PyCFunction::new_closure (verified by grep over bindings/python/src). Also
# tracked in deny.toml; remove once rust-numpy 0.29 ships and pyo3 is bumped.
[[IgnoredVulns]]
id = "RUSTSEC-2026-0176"
reason = "pyo3 OOB read in PyList/PyTuple nth/nth_back; vulnerable API unused; fix blocked upstream by rust-numpy. Tracked in deny.toml."
[[IgnoredVulns]]
id = "GHSA-36hh-v3qg-5jq4"
reason = "Alias of RUSTSEC-2026-0176."
[[IgnoredVulns]]
id = "RUSTSEC-2026-0177"
reason = "pyo3 missing Sync on PyCFunction::new_closure; vulnerable API unused; fix blocked upstream by rust-numpy. Tracked in deny.toml."
[[IgnoredVulns]]
id = "GHSA-chgr-c6px-7xpp"
reason = "Alias of RUSTSEC-2026-0177."
# jackson-core 3.x async-parser DoS — tools.jackson.core:jackson-core 3.x is not
# a dependency of this project. No manifest, Maven plugin, or the GitHub
# dependency-graph SBOM references jackson 3.x; the only jackson present is
# com.fasterxml.jackson.core:jackson-databind 2.17.1 (examples only). Not affected.
[[IgnoredVulns]]
id = "GHSA-72hv-8253-57qq"
reason = "tools.jackson.core:jackson-core 3.x is not a dependency of this project; only jackson-databind 2.17.1 is present. Not affected."
+81
View File
@@ -0,0 +1,81 @@
plus_di,minus_di,adx
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
39.5757019682593,10.51553170206367,30.912276792040817
37.536261624936586,10.906948307963743,32.63069750889788
35.215165462446194,12.883060473369223,33.61637662813429
32.86410166086221,15.606658308025656,33.758337048896145
30.70333902684003,18.50628500756431,33.11744953242373
28.583754140794692,21.990805693589266,31.683067176177246
26.55934622279741,25.269437743189002,29.597761510222966
24.849750313093512,27.34663879718962,27.82532441495794
23.505186308008465,28.419972295720065,26.513882262566277
22.24831894567969,28.255382095825222,25.469626589930424
21.991214452481188,26.24217101526044,24.279889509686143
23.0167314852192,24.206077112686202,22.725510472977113
25.270075861089534,22.49633154108633,21.51703781909767
28.167925277844184,20.797978949255484,21.055190823958306
32.199512135355,19.002819811263755,21.39222118044018
36.67556284467224,17.08189161927664,22.467654445091764
39.66767810504092,15.312333278446436,24.027003737037383
41.25710485757308,13.864063299710923,25.86050681733179
41.90255145462447,12.778588478409224,27.8177163877859
42.395628716412624,11.937994453509367,29.834786399099126
41.39315313749411,11.291691494482587,31.784798356703554
38.98369312390027,10.942263455121635,33.52631517717672
36.80520205991526,11.790866997951634,34.808291852450445
34.33471861125097,14.165199105275695,35.29246448522293
31.575896425438806,17.056390539549085,34.90412360474046
29.011655429985023,19.499990165743316,33.81146999165209
26.941362744011517,21.41861333571675,32.21208520671275
25.293388618220902,23.528371409730532,30.16945244226847
23.70108159294569,26.085794270270323,28.356623123061247
21.9818825371455,26.753559469925122,27.030505691607747
20.4556018343849,25.575479039846915,25.894230469505597
19.315305653157523,24.149775639951073,24.839117763267886
20.15346427198841,22.836532180755725,23.510691119817217
22.621623373749483,21.279561359099215,22.049713637827605
26.102172398824052,19.564946484191104,21.497230627213543
29.5794011460886,17.914862734831026,21.71599192763469
33.103914522491884,16.421886804841026,22.570814571368153
36.988461875248944,14.998303176938437,23.980008725527608
39.75301194225335,13.75986552582622,25.73669586768207
41.37315229671887,12.777991517838071,27.67023180773477
42.48135161688847,11.981093863498268,29.693955639647385
42.62294720176041,11.257736731480932,31.730983563876975
40.47684671425082,10.451870979556956,33.67554918447296
37.62379013468778,11.104415435913893,35.1575133843429
35.445073236866044,12.840589537363048,35.99012453099969
33.361147221464314,15.58241905716853,36.014040954862004
30.784559395666363,20.10967847345435,34.9397977135121
28.101022653590128,23.891333482064333,33.02243689823779
25.724805235133402,26.22784634752717,30.732853434649453
23.898483996930594,27.16675703876092,28.994806129209827
22.507592062957475,27.59047661188655,27.648453495608493
21.169522519356338,26.35196828602853,26.452526680749255
21.224977830554703,24.775436644747092,25.11436900225873
1 plus_di minus_di adx
2 nan nan nan
3 nan nan nan
4 nan nan nan
5 nan nan nan
6 nan nan nan
7 nan nan nan
8 nan nan nan
9 nan nan nan
10 nan nan nan
11 nan nan nan
12 nan nan nan
13 nan nan nan
14 nan nan nan
15 nan nan nan
16 nan nan nan
17 nan nan nan
18 nan nan nan
19 nan nan nan
20 nan nan nan
21 nan nan nan
22 nan nan nan
23 nan nan nan
24 nan nan nan
25 nan nan nan
26 nan nan nan
27 nan nan nan
28 nan nan nan
29 39.5757019682593 10.51553170206367 30.912276792040817
30 37.536261624936586 10.906948307963743 32.63069750889788
31 35.215165462446194 12.883060473369223 33.61637662813429
32 32.86410166086221 15.606658308025656 33.758337048896145
33 30.70333902684003 18.50628500756431 33.11744953242373
34 28.583754140794692 21.990805693589266 31.683067176177246
35 26.55934622279741 25.269437743189002 29.597761510222966
36 24.849750313093512 27.34663879718962 27.82532441495794
37 23.505186308008465 28.419972295720065 26.513882262566277
38 22.24831894567969 28.255382095825222 25.469626589930424
39 21.991214452481188 26.24217101526044 24.279889509686143
40 23.0167314852192 24.206077112686202 22.725510472977113
41 25.270075861089534 22.49633154108633 21.51703781909767
42 28.167925277844184 20.797978949255484 21.055190823958306
43 32.199512135355 19.002819811263755 21.39222118044018
44 36.67556284467224 17.08189161927664 22.467654445091764
45 39.66767810504092 15.312333278446436 24.027003737037383
46 41.25710485757308 13.864063299710923 25.86050681733179
47 41.90255145462447 12.778588478409224 27.8177163877859
48 42.395628716412624 11.937994453509367 29.834786399099126
49 41.39315313749411 11.291691494482587 31.784798356703554
50 38.98369312390027 10.942263455121635 33.52631517717672
51 36.80520205991526 11.790866997951634 34.808291852450445
52 34.33471861125097 14.165199105275695 35.29246448522293
53 31.575896425438806 17.056390539549085 34.90412360474046
54 29.011655429985023 19.499990165743316 33.81146999165209
55 26.941362744011517 21.41861333571675 32.21208520671275
56 25.293388618220902 23.528371409730532 30.16945244226847
57 23.70108159294569 26.085794270270323 28.356623123061247
58 21.9818825371455 26.753559469925122 27.030505691607747
59 20.4556018343849 25.575479039846915 25.894230469505597
60 19.315305653157523 24.149775639951073 24.839117763267886
61 20.15346427198841 22.836532180755725 23.510691119817217
62 22.621623373749483 21.279561359099215 22.049713637827605
63 26.102172398824052 19.564946484191104 21.497230627213543
64 29.5794011460886 17.914862734831026 21.71599192763469
65 33.103914522491884 16.421886804841026 22.570814571368153
66 36.988461875248944 14.998303176938437 23.980008725527608
67 39.75301194225335 13.75986552582622 25.73669586768207
68 41.37315229671887 12.777991517838071 27.67023180773477
69 42.48135161688847 11.981093863498268 29.693955639647385
70 42.62294720176041 11.257736731480932 31.730983563876975
71 40.47684671425082 10.451870979556956 33.67554918447296
72 37.62379013468778 11.104415435913893 35.1575133843429
73 35.445073236866044 12.840589537363048 35.99012453099969
74 33.361147221464314 15.58241905716853 36.014040954862004
75 30.784559395666363 20.10967847345435 34.9397977135121
76 28.101022653590128 23.891333482064333 33.02243689823779
77 25.724805235133402 26.22784634752717 30.732853434649453
78 23.898483996930594 27.16675703876092 28.994806129209827
79 22.507592062957475 27.59047661188655 27.648453495608493
80 21.169522519356338 26.35196828602853 26.452526680749255
81 21.224977830554703 24.775436644747092 25.11436900225873
+81
View File
@@ -0,0 +1,81 @@
atr
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
3.917642936098542
3.871756865753318
3.8256550237571303
3.775585219414474
3.7359112048078584
3.751806385408204
3.844730678370346
3.9663267478375337
4.065925146592011
4.103990051025662
4.122277884333844
4.120405500552875
4.1099068422738645
4.067219182386907
3.965656623010464
3.883731209815142
3.8454426000158177
3.827649810828608
3.8056867488416217
3.7971798302715882
3.795930185925992
3.768312827006575
3.700099728786484
3.6306300896424184
3.63084862338228
3.6560272497167245
3.6536783654804816
3.670527021756155
3.731163563648225
3.855191519830406
3.994403105040647
4.097289247845801
4.128368657741341
4.103844480606131
4.0291518193306395
3.972922779511551
3.9077919971718877
3.8900842871217334
3.9281940607734454
3.970355102352287
3.970344885666312
3.9271768651715058
3.891868629198634
3.896746818914544
3.888594808948336
3.8241554941261624
3.755340593345057
3.742402894117046
3.779811441067645
3.833276428397188
3.8832337640008086
3.9482678364884123
3.9963590513965954
3.9961613679725096
3.957618048219805
3.9111378825809897
3.9118754285284236
3.9079875306228926
3.8519602816708205
3.8003043443211753
3.824279210324508
3.89030736805505
3.946176568396809
3.944383618517461
3.889018639116889
3.8395240928112067
3.792174559624793
1 atr
2 nan
3 nan
4 nan
5 nan
6 nan
7 nan
8 nan
9 nan
10 nan
11 nan
12 nan
13 nan
14 nan
15 3.917642936098542
16 3.871756865753318
17 3.8256550237571303
18 3.775585219414474
19 3.7359112048078584
20 3.751806385408204
21 3.844730678370346
22 3.9663267478375337
23 4.065925146592011
24 4.103990051025662
25 4.122277884333844
26 4.120405500552875
27 4.1099068422738645
28 4.067219182386907
29 3.965656623010464
30 3.883731209815142
31 3.8454426000158177
32 3.827649810828608
33 3.8056867488416217
34 3.7971798302715882
35 3.795930185925992
36 3.768312827006575
37 3.700099728786484
38 3.6306300896424184
39 3.63084862338228
40 3.6560272497167245
41 3.6536783654804816
42 3.670527021756155
43 3.731163563648225
44 3.855191519830406
45 3.994403105040647
46 4.097289247845801
47 4.128368657741341
48 4.103844480606131
49 4.0291518193306395
50 3.972922779511551
51 3.9077919971718877
52 3.8900842871217334
53 3.9281940607734454
54 3.970355102352287
55 3.970344885666312
56 3.9271768651715058
57 3.891868629198634
58 3.896746818914544
59 3.888594808948336
60 3.8241554941261624
61 3.755340593345057
62 3.742402894117046
63 3.779811441067645
64 3.833276428397188
65 3.8832337640008086
66 3.9482678364884123
67 3.9963590513965954
68 3.9961613679725096
69 3.957618048219805
70 3.9111378825809897
71 3.9118754285284236
72 3.9079875306228926
73 3.8519602816708205
74 3.8003043443211753
75 3.824279210324508
76 3.89030736805505
77 3.946176568396809
78 3.944383618517461
79 3.889018639116889
80 3.8395240928112067
81 3.792174559624793
+81
View File
@@ -0,0 +1,81 @@
beta
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
0.9195261318785413
0.922546057952995
0.9270670303012646
0.9360823119678988
0.9520494101604974
0.9734365033467753
0.995093627699459
1.0111583960294632
1.018359059410051
1.0174553154888744
1.0121204526718954
1.0067713468887387
1.0049777031298115
1.0087588074727343
1.0182494903866188
1.031286972171161
1.0431058848104742
1.0473159800278413
1.0395185963505182
1.0218520432290943
1.0027356441997792
0.989852175809267
0.9830850966851594
0.9757086459066595
0.9639743320260056
0.9518863451049362
0.945167696468917
0.9459710447944064
0.9530453598334451
0.9634788824656162
0.973948405670025
0.9815754255825168
0.9846435781849213
0.9830670028068416
0.9783981708129912
0.9733920844663336
0.9713725848572005
0.9755741087472364
0.988273819307749
1.0091885908656193
1.0332355593672604
1.0510340548483572
1.057262107302167
1.058580145340488
1.0645933328050556
1.0735088672694193
1.0743308164692502
1.0612002349944065
1.0392533178013483
1.0174419588972756
1.0016230577141623
0.9934855658174216
0.9919410932606791
0.9943630990130676
0.9973488461009995
0.9974248103764315
0.9919840212101835
0.9802751136245323
0.9638604974880948
0.9461133999713321
0.9309659374652403
1 beta
2 nan
3 nan
4 nan
5 nan
6 nan
7 nan
8 nan
9 nan
10 nan
11 nan
12 nan
13 nan
14 nan
15 nan
16 nan
17 nan
18 nan
19 nan
20 nan
21 0.9195261318785413
22 0.922546057952995
23 0.9270670303012646
24 0.9360823119678988
25 0.9520494101604974
26 0.9734365033467753
27 0.995093627699459
28 1.0111583960294632
29 1.018359059410051
30 1.0174553154888744
31 1.0121204526718954
32 1.0067713468887387
33 1.0049777031298115
34 1.0087588074727343
35 1.0182494903866188
36 1.031286972171161
37 1.0431058848104742
38 1.0473159800278413
39 1.0395185963505182
40 1.0218520432290943
41 1.0027356441997792
42 0.989852175809267
43 0.9830850966851594
44 0.9757086459066595
45 0.9639743320260056
46 0.9518863451049362
47 0.945167696468917
48 0.9459710447944064
49 0.9530453598334451
50 0.9634788824656162
51 0.973948405670025
52 0.9815754255825168
53 0.9846435781849213
54 0.9830670028068416
55 0.9783981708129912
56 0.9733920844663336
57 0.9713725848572005
58 0.9755741087472364
59 0.988273819307749
60 1.0091885908656193
61 1.0332355593672604
62 1.0510340548483572
63 1.057262107302167
64 1.058580145340488
65 1.0645933328050556
66 1.0735088672694193
67 1.0743308164692502
68 1.0612002349944065
69 1.0392533178013483
70 1.0174419588972756
71 1.0016230577141623
72 0.9934855658174216
73 0.9919410932606791
74 0.9943630990130676
75 0.9973488461009995
76 0.9974248103764315
77 0.9919840212101835
78 0.9802751136245323
79 0.9638604974880948
80 0.9461133999713321
81 0.9309659374652403
+81
View File
@@ -0,0 +1,81 @@
ema
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
107.082865308575
105.90971557088022
104.81838000454273
103.91437652548925
103.29137341232037
103.02217097393634
103.15163412061464
103.6921955736008
104.62232136443316
105.88806700052659
107.40757775297398
109.07812453770966
110.78504123504803
112.4117601975411
113.85004525232907
115.00950442946956
115.8255294789832
116.26495019544112
116.32889606739172
116.05260755010886
115.50221201839392
114.76875083248335
113.95998970819002
113.19074277367604
112.57257361958058
112.2037924360836
112.16064199938042
112.49045917546245
113.20742223024638
114.29126332917505
115.68906080413531
117.3199507165269
119.08233652305883
120.86295254590979
122.54697139145239
124.02825224132444
125.2188143840051
126.05668958634725
126.51145173900844
126.58692971020658
126.32086097368011
125.78151686199148
125.06160082390045
124.26996466927172
123.5218827065933
122.92875250508669
122.58814223802023
122.57507361058863
122.93531900967452
123.68131159273575
124.79103363078006
126.20998238510259
127.85603789338172
129.62679782427364
131.408724185901
133.0872848279711
134.5571838169111
135.7317668260377
136.550761377433
136.98566051598186
137.04226900211742
136.7601845743594
136.20926061449748
135.48336619117217
134.6920008752563
133.95051334772793
133.369797540168
1 ema
2 nan
3 nan
4 nan
5 nan
6 nan
7 nan
8 nan
9 nan
10 nan
11 nan
12 nan
13 nan
14 nan
15 107.082865308575
16 105.90971557088022
17 104.81838000454273
18 103.91437652548925
19 103.29137341232037
20 103.02217097393634
21 103.15163412061464
22 103.6921955736008
23 104.62232136443316
24 105.88806700052659
25 107.40757775297398
26 109.07812453770966
27 110.78504123504803
28 112.4117601975411
29 113.85004525232907
30 115.00950442946956
31 115.8255294789832
32 116.26495019544112
33 116.32889606739172
34 116.05260755010886
35 115.50221201839392
36 114.76875083248335
37 113.95998970819002
38 113.19074277367604
39 112.57257361958058
40 112.2037924360836
41 112.16064199938042
42 112.49045917546245
43 113.20742223024638
44 114.29126332917505
45 115.68906080413531
46 117.3199507165269
47 119.08233652305883
48 120.86295254590979
49 122.54697139145239
50 124.02825224132444
51 125.2188143840051
52 126.05668958634725
53 126.51145173900844
54 126.58692971020658
55 126.32086097368011
56 125.78151686199148
57 125.06160082390045
58 124.26996466927172
59 123.5218827065933
60 122.92875250508669
61 122.58814223802023
62 122.57507361058863
63 122.93531900967452
64 123.68131159273575
65 124.79103363078006
66 126.20998238510259
67 127.85603789338172
68 129.62679782427364
69 131.408724185901
70 133.0872848279711
71 134.5571838169111
72 135.7317668260377
73 136.550761377433
74 136.98566051598186
75 137.04226900211742
76 136.7601845743594
77 136.20926061449748
78 135.48336619117217
79 134.6920008752563
80 133.95051334772793
81 133.369797540168
+81
View File
@@ -0,0 +1,81 @@
open,high,low,close,volume
99,101,98,100,1000
102.57761950472302,104.77731091023225,101.25551066110417,103.4552020666134,1019.8669330795061
106.10612242808222,108.13914959894458,104.61339756308799,106.64642473395035,1038.941834230865
109.26253189460714,110.76487377959927,107.8309272112827,109.33326909627483,1056.4642473395036
111.7365376962194,112.90403177129735,110.1528967845943,111.32039085967226,1071.7356090899523
113.27609348158748,114.45148509543229,111.29955825219574,112.47494986604055,1084.1470984807897
113.7284688053824,115.1642566915892,111.30268842257516,112.73847630878196,1093.2039085967226
113.06855035377954,114.55977666009171,110.64086736017657,112.13209366648874,1098.544972998846
111.40827542637513,112.72390874531129,109.43899848657534,110.75463180551151,1099.9573603041506
108.98459460176909,109.99300155201126,107.76539185209613,108.7737988023383,1097.3847630878195
106.12753789513545,107.73969337995807,104.79904459577605,106.41120008059868,1090.929742682568
103.21387328427625,105.41662717550601,101.71978916733775,103.92254305856751,1080.849640381959
100.61462528040111,103.00209502109563,99.18732582635697,101.57479556705148,1067.546318055115
98.64575078243223,100.78188758933494,97.48620160125755,99.62233840816026,1051.5501371821465
97.53034002152081,99.46748184049008,96.34710045689485,98.28424227586412,1033.4988150155905
97.378063505514,99.16454670333486,95.93821562552817,97.72469882334903,1014.1120008059867
98.18385394545021,99.67344281002588,96.54876504706593,98.0383539116416,1005.837414342758
99.8438650794075,101.15293363552601,97.93278462060415,99.24185317672267,1025.5541102026832
102.1834853863248,103.20029690993537,100.25554360082955,101.27235512444012,1044.2520443294852
104.99031673022002,106.32510161131832,102.65835969292533,103.99314457402363,1061.185789094272
108.04491654708718,109.54022022493461,105.7105413401633,107.20584501801073,1075.680249530793
111.14367593283949,112.56654934841096,109.24526558927202,110.6681390048435,1087.157577241359
114.11098793714572,115.26697281350663,112.95942875877287,114.11541363513378,1095.1602073889517
116.80109288512898,118.47543335247398,115.61005717653698,117.28439764388199,1099.3691003633464
119.09282467975903,121.38046215528227,117.64904116296829,119.93667863849153,1099.616460883584
120.88220148856881,123.36781277048146,119.39438848583472,121.87999976774739,1095.8924274663138
122.07798667229586,124.2878498649492,120.77557026109272,122.98543345374605,1088.3454655720152
122.60397744514097,124.22410945235427,121.57876610123756,123.19889810845086,1077.2764487555987
122.40925186267498,123.88697089091687,121.06827005264091,122.5459890808828,1063.126663787232
121.48461656761053,122.98099977052848,119.63330909790388,121.12969230082183,1046.4602179413757
119.8808727652764,121.29920058454442,117.70285703314954,119.12118485241757,1027.9415498198925
117.72299769788953,118.8665240235534,115.60101790940676,116.74454423507063,1008.3089402817496
115.21439166809358,116.4131695096543,113.05795434620948,114.2567321877702,1011.6549204850494
112.6270381197495,114.07463180365934,110.47704737833695,111.92464106224679,1031.154136351338
110.27641646211617,111.76231568498811,108.51535390119264,110.00125312406458,1049.4113351138608
108.48360243707184,109.99872116521585,107.18792367213928,108.7030424002833,1065.6986598718788
107.530320991091,109.22424173559783,106.49671695482826,108.19063769933508,1079.3667863849153
107.61494922421186,109.90155645208623,106.26786689008574,108.55447411796011,1089.8708095811626
108.81801012516657,111.30403713029216,107.32068773822765,109.80671474335324,1096.7919672031487
111.08434919099572,113.29382811110736,109.67068524069803,111.88016416080967,1099.8543345374605
114.22618875818226,115.76972371414958,113.09073586402833,114.63427081999565,1098.9358246623383
117.94724565362051,119.15370942824079,116.6612183117217,117.86768208634197,1094.0730556679773
121.88395973243564,123.33523703654073,119.88495316810628,121.33623047221137,1085.459890808828
125.65653611891825,127.14038418498515,123.29089632531003,124.77474439137693,1073.4397097874114
128.92069597346688,130.20955349568973,126.63187762484937,127.92073514707224,1058.4917192891762
131.41114890560974,132.45313613345562,129.49585703767033,130.5378442655162,1041.2118485241756
132.96978971477444,134.3228744433646,131.08387196585088,132.43695669444105,1022.2889914100246
133.5549991814736,135.053120145851,131.99497292310176,133.49309388747918,1002.4775425453357
133.2323987581558,135.065460892756,131.8235156308926,133.65657776549278,1017.4326781222982
132.1510588175171,134.08480947785137,131.0237176510951,132.95746831142935,1036.647912925193
130.5116755897077,132.71696973631924,129.29758425495962,131.50287840157117,1054.402111088937
128.53409061924222,130.9222390672229,127.07925728332546,129.46740573130614,1069.9874687593544
126.4306172006658,128.5591966352313,124.94895708842891,127.07753652299444,1082.7826469085653
124.38927906587094,125.87336879788326,123.1073244542458,124.59141418625812,1092.2775421612807
122.56791894474918,123.61827749324543,121.2254215875191,122.27578013601534,1098.093623006649
121.09703354508844,122.45602084147426,119.02315927992295,120.38214657630877,1099.9990206550704
120.08693553049852,121.58571423995242,117.62555095473105,119.12432966418496,1097.9177729151318
119.63399522490424,121.03798192673773,117.25536324735009,118.65934994918358,1091.9328525664675
119.82146372498268,120.94065716085713,117.95421275941922,119.07340619529367,1082.2828594968707
120.7124947130592,121.93415307848436,119.152517136663,120.37417550208815,1069.3525084777123
122.33587608239566,123.94838830624106,120.87761530843784,122.49012753228324,1053.6572918000436
124.66785812762632,126.75625008370868,123.18852214765032,125.27691410373268,1035.8229282236828
127.61552102482923,129.80523536741393,126.34054904004905,128.53026338263376,1016.5604175448309
131.00775897051096,133.06294250948164,129.94904333909741,132.0042268780681,1003.3623047221139
134.59892592769242,136.79793765689536,133.234137558996,135.43314928819893,1023.1509825101539
138.08766685694894,140.0546941334019,136.58837142074304,138.555398697196,1042.016703682664
141.1500141222941,142.5489901806554,139.73776131670974,141.13673737507105,1059.2073514707224
143.48228026040917,144.5932922665057,141.8802335303824,142.99124553647894,1074.037588995245
144.84649927621132,146.0756620034572,142.76876627418082,143.9979290014267,1085.9161814856498
145.1098734724699,146.57143212166807,142.649968595823,144.11152724502116,1094.3695669444105
144.27024859045207,145.7471249168318,141.88968005898082,143.36655638536055,1099.060735569487
142.46200877506277,143.72992039092952,140.60631434563564,141.8742259615024,1099.8026652716362
139.9404686061768,141.00752471999962,138.7454488027266,139.81250491654941,1096.5657776549278
137.04703875358243,138.78071046739933,135.67655244818158,137.41022416199849,1089.4791172140503
134.16122174198705,136.42630679247307,132.66155074344638,134.9266357939324,1078.8252067375315
131.6480122345848,134.02210748888697,130.25415962109273,132.6282548753949,1065.0287840157116
129.80997879551026,131.86785162975886,128.70717960530897,130.76505243955756,1048.6398688853799
128.85205701193928,130.78472862032595,127.6154547134165,129.54812632180318,1030.3118356745701
128.8642014864336,130.59557044803222,127.39947545719488,129.13084441879352,1010.7753652299442
129.82321172551153,131.29749357237068,128.12086294416926,129.59514479102842,1009.1906850227682
1 open high low close volume
2 99 101 98 100 1000
3 102.57761950472302 104.77731091023225 101.25551066110417 103.4552020666134 1019.8669330795061
4 106.10612242808222 108.13914959894458 104.61339756308799 106.64642473395035 1038.941834230865
5 109.26253189460714 110.76487377959927 107.8309272112827 109.33326909627483 1056.4642473395036
6 111.7365376962194 112.90403177129735 110.1528967845943 111.32039085967226 1071.7356090899523
7 113.27609348158748 114.45148509543229 111.29955825219574 112.47494986604055 1084.1470984807897
8 113.7284688053824 115.1642566915892 111.30268842257516 112.73847630878196 1093.2039085967226
9 113.06855035377954 114.55977666009171 110.64086736017657 112.13209366648874 1098.544972998846
10 111.40827542637513 112.72390874531129 109.43899848657534 110.75463180551151 1099.9573603041506
11 108.98459460176909 109.99300155201126 107.76539185209613 108.7737988023383 1097.3847630878195
12 106.12753789513545 107.73969337995807 104.79904459577605 106.41120008059868 1090.929742682568
13 103.21387328427625 105.41662717550601 101.71978916733775 103.92254305856751 1080.849640381959
14 100.61462528040111 103.00209502109563 99.18732582635697 101.57479556705148 1067.546318055115
15 98.64575078243223 100.78188758933494 97.48620160125755 99.62233840816026 1051.5501371821465
16 97.53034002152081 99.46748184049008 96.34710045689485 98.28424227586412 1033.4988150155905
17 97.378063505514 99.16454670333486 95.93821562552817 97.72469882334903 1014.1120008059867
18 98.18385394545021 99.67344281002588 96.54876504706593 98.0383539116416 1005.837414342758
19 99.8438650794075 101.15293363552601 97.93278462060415 99.24185317672267 1025.5541102026832
20 102.1834853863248 103.20029690993537 100.25554360082955 101.27235512444012 1044.2520443294852
21 104.99031673022002 106.32510161131832 102.65835969292533 103.99314457402363 1061.185789094272
22 108.04491654708718 109.54022022493461 105.7105413401633 107.20584501801073 1075.680249530793
23 111.14367593283949 112.56654934841096 109.24526558927202 110.6681390048435 1087.157577241359
24 114.11098793714572 115.26697281350663 112.95942875877287 114.11541363513378 1095.1602073889517
25 116.80109288512898 118.47543335247398 115.61005717653698 117.28439764388199 1099.3691003633464
26 119.09282467975903 121.38046215528227 117.64904116296829 119.93667863849153 1099.616460883584
27 120.88220148856881 123.36781277048146 119.39438848583472 121.87999976774739 1095.8924274663138
28 122.07798667229586 124.2878498649492 120.77557026109272 122.98543345374605 1088.3454655720152
29 122.60397744514097 124.22410945235427 121.57876610123756 123.19889810845086 1077.2764487555987
30 122.40925186267498 123.88697089091687 121.06827005264091 122.5459890808828 1063.126663787232
31 121.48461656761053 122.98099977052848 119.63330909790388 121.12969230082183 1046.4602179413757
32 119.8808727652764 121.29920058454442 117.70285703314954 119.12118485241757 1027.9415498198925
33 117.72299769788953 118.8665240235534 115.60101790940676 116.74454423507063 1008.3089402817496
34 115.21439166809358 116.4131695096543 113.05795434620948 114.2567321877702 1011.6549204850494
35 112.6270381197495 114.07463180365934 110.47704737833695 111.92464106224679 1031.154136351338
36 110.27641646211617 111.76231568498811 108.51535390119264 110.00125312406458 1049.4113351138608
37 108.48360243707184 109.99872116521585 107.18792367213928 108.7030424002833 1065.6986598718788
38 107.530320991091 109.22424173559783 106.49671695482826 108.19063769933508 1079.3667863849153
39 107.61494922421186 109.90155645208623 106.26786689008574 108.55447411796011 1089.8708095811626
40 108.81801012516657 111.30403713029216 107.32068773822765 109.80671474335324 1096.7919672031487
41 111.08434919099572 113.29382811110736 109.67068524069803 111.88016416080967 1099.8543345374605
42 114.22618875818226 115.76972371414958 113.09073586402833 114.63427081999565 1098.9358246623383
43 117.94724565362051 119.15370942824079 116.6612183117217 117.86768208634197 1094.0730556679773
44 121.88395973243564 123.33523703654073 119.88495316810628 121.33623047221137 1085.459890808828
45 125.65653611891825 127.14038418498515 123.29089632531003 124.77474439137693 1073.4397097874114
46 128.92069597346688 130.20955349568973 126.63187762484937 127.92073514707224 1058.4917192891762
47 131.41114890560974 132.45313613345562 129.49585703767033 130.5378442655162 1041.2118485241756
48 132.96978971477444 134.3228744433646 131.08387196585088 132.43695669444105 1022.2889914100246
49 133.5549991814736 135.053120145851 131.99497292310176 133.49309388747918 1002.4775425453357
50 133.2323987581558 135.065460892756 131.8235156308926 133.65657776549278 1017.4326781222982
51 132.1510588175171 134.08480947785137 131.0237176510951 132.95746831142935 1036.647912925193
52 130.5116755897077 132.71696973631924 129.29758425495962 131.50287840157117 1054.402111088937
53 128.53409061924222 130.9222390672229 127.07925728332546 129.46740573130614 1069.9874687593544
54 126.4306172006658 128.5591966352313 124.94895708842891 127.07753652299444 1082.7826469085653
55 124.38927906587094 125.87336879788326 123.1073244542458 124.59141418625812 1092.2775421612807
56 122.56791894474918 123.61827749324543 121.2254215875191 122.27578013601534 1098.093623006649
57 121.09703354508844 122.45602084147426 119.02315927992295 120.38214657630877 1099.9990206550704
58 120.08693553049852 121.58571423995242 117.62555095473105 119.12432966418496 1097.9177729151318
59 119.63399522490424 121.03798192673773 117.25536324735009 118.65934994918358 1091.9328525664675
60 119.82146372498268 120.94065716085713 117.95421275941922 119.07340619529367 1082.2828594968707
61 120.7124947130592 121.93415307848436 119.152517136663 120.37417550208815 1069.3525084777123
62 122.33587608239566 123.94838830624106 120.87761530843784 122.49012753228324 1053.6572918000436
63 124.66785812762632 126.75625008370868 123.18852214765032 125.27691410373268 1035.8229282236828
64 127.61552102482923 129.80523536741393 126.34054904004905 128.53026338263376 1016.5604175448309
65 131.00775897051096 133.06294250948164 129.94904333909741 132.0042268780681 1003.3623047221139
66 134.59892592769242 136.79793765689536 133.234137558996 135.43314928819893 1023.1509825101539
67 138.08766685694894 140.0546941334019 136.58837142074304 138.555398697196 1042.016703682664
68 141.1500141222941 142.5489901806554 139.73776131670974 141.13673737507105 1059.2073514707224
69 143.48228026040917 144.5932922665057 141.8802335303824 142.99124553647894 1074.037588995245
70 144.84649927621132 146.0756620034572 142.76876627418082 143.9979290014267 1085.9161814856498
71 145.1098734724699 146.57143212166807 142.649968595823 144.11152724502116 1094.3695669444105
72 144.27024859045207 145.7471249168318 141.88968005898082 143.36655638536055 1099.060735569487
73 142.46200877506277 143.72992039092952 140.60631434563564 141.8742259615024 1099.8026652716362
74 139.9404686061768 141.00752471999962 138.7454488027266 139.81250491654941 1096.5657776549278
75 137.04703875358243 138.78071046739933 135.67655244818158 137.41022416199849 1089.4791172140503
76 134.16122174198705 136.42630679247307 132.66155074344638 134.9266357939324 1078.8252067375315
77 131.6480122345848 134.02210748888697 130.25415962109273 132.6282548753949 1065.0287840157116
78 129.80997879551026 131.86785162975886 128.70717960530897 130.76505243955756 1048.6398688853799
79 128.85205701193928 130.78472862032595 127.6154547134165 129.54812632180318 1030.3118356745701
80 128.8642014864336 130.59557044803222 127.39947545719488 129.13084441879352 1010.7753652299442
81 129.82321172551153 131.29749357237068 128.12086294416926 129.59514479102842 1009.1906850227682
+81
View File
@@ -0,0 +1,81 @@
macd,signal,histogram
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
nan,nan,nan
3.553825374871522,4.7567646581597245,-1.2029392832882024
2.8208654161048656,4.369584809748753,-1.5487193936438874
2.1109014543067843,3.9178481386603594,-1.806946684353575
1.4897304373886868,3.4322245984060253,-1.9424941610173385
1.0151049910054155,2.9488006769259036,-1.9336956859204881
0.7315731385597957,2.5053551692526823,-1.7737820306928866
0.6664991548332893,2.137583966368804,-1.4710848115355146
0.8276206486027746,1.8755913028155982,-1.0479706542128235
1.2023598043004569,1.74094500311257,-0.5385851988121131
1.7589500704087442,1.744546016571805,0.014404053836939212
2.449277456832604,1.885492304623965,0.563785152208639
3.2131824784813148,2.1510303393954353,1.0621521390858795
3.9838383370451567,2.5175919389253796,1.466246398119777
4.693724820711168,2.9528185152825377,1.7409063054286302
5.280664208546995,3.418387653935429,1.8622765546115656
5.693379944743711,3.8733861120970854,1.8199938326466256
5.896081491642136,4.277925188006096,1.6181563036360398
5.871665770714699,4.596673304547816,1.274992466166883
5.623249186369037,4.801988480912061,0.821260705456976
5.17389335937969,4.876369456605587,0.29752390277410345
4.564549053715282,4.814005376027526,-0.2494563223122439
3.8504019492156516,4.621284690665152,-0.7708827414495003
3.0959466751243525,4.316217087556993,-1.2202704124326402
2.369229123514458,3.926819494748486,-1.5575903712340278
1.735771359392487,3.488609867677286,-1.7528385082847988
1.252721799050505,3.0414322539519296,-1.7887104549014246
0.9637532073126067,2.6258964446240656,-1.6621432373114589
0.8951642651140048,2.2797500087220537,-1.3845857436080489
1.0535329484060725,2.0345065966588574,-0.9809736482527849
1.4251313413431745,1.9126315455957208,-0.48750020425254625
1.9771541634642489,1.9255360691694265,0.051618094294822336
2.6606512771767967,2.072559110770901,0.5880921664058958
3.414902230493496,2.34102773471542,1.073874495778076
4.17284207727586,2.707390603227508,1.4654514740483515
4.867053809684606,3.139323244518928,1.727730565165678
5.4357921236225195,3.5986170203396464,1.8371751032828731
5.828500438890558,4.044593704049829,1.7839067348407287
6.010328361604678,4.437740635560799,1.5725877260438788
5.965246063689932,4.743241721186626,1.2220043425033058
5.697477387222705,4.934088854393842,0.7633885328288628
5.231123664416998,4.9934958163984735,0.23762784801852455
4.608011861752942,4.916399025469367,-0.30838716371642505
3.883959272298,4.709911074835094,-0.8259518025370935
3.123788425025225,4.39268654487312,-1.2688981198478952
2.395537519050208,3.993256739708538,-1.59771922065833
1.764383551803462,3.547482102127523,-1.7830985503240608
1.286820974089835,3.0953498765199856,-1.8085289024301505
1 macd signal histogram
2 nan nan nan
3 nan nan nan
4 nan nan nan
5 nan nan nan
6 nan nan nan
7 nan nan nan
8 nan nan nan
9 nan nan nan
10 nan nan nan
11 nan nan nan
12 nan nan nan
13 nan nan nan
14 nan nan nan
15 nan nan nan
16 nan nan nan
17 nan nan nan
18 nan nan nan
19 nan nan nan
20 nan nan nan
21 nan nan nan
22 nan nan nan
23 nan nan nan
24 nan nan nan
25 nan nan nan
26 nan nan nan
27 nan nan nan
28 nan nan nan
29 nan nan nan
30 nan nan nan
31 nan nan nan
32 nan nan nan
33 nan nan nan
34 nan nan nan
35 3.553825374871522 4.7567646581597245 -1.2029392832882024
36 2.8208654161048656 4.369584809748753 -1.5487193936438874
37 2.1109014543067843 3.9178481386603594 -1.806946684353575
38 1.4897304373886868 3.4322245984060253 -1.9424941610173385
39 1.0151049910054155 2.9488006769259036 -1.9336956859204881
40 0.7315731385597957 2.5053551692526823 -1.7737820306928866
41 0.6664991548332893 2.137583966368804 -1.4710848115355146
42 0.8276206486027746 1.8755913028155982 -1.0479706542128235
43 1.2023598043004569 1.74094500311257 -0.5385851988121131
44 1.7589500704087442 1.744546016571805 0.014404053836939212
45 2.449277456832604 1.885492304623965 0.563785152208639
46 3.2131824784813148 2.1510303393954353 1.0621521390858795
47 3.9838383370451567 2.5175919389253796 1.466246398119777
48 4.693724820711168 2.9528185152825377 1.7409063054286302
49 5.280664208546995 3.418387653935429 1.8622765546115656
50 5.693379944743711 3.8733861120970854 1.8199938326466256
51 5.896081491642136 4.277925188006096 1.6181563036360398
52 5.871665770714699 4.596673304547816 1.274992466166883
53 5.623249186369037 4.801988480912061 0.821260705456976
54 5.17389335937969 4.876369456605587 0.29752390277410345
55 4.564549053715282 4.814005376027526 -0.2494563223122439
56 3.8504019492156516 4.621284690665152 -0.7708827414495003
57 3.0959466751243525 4.316217087556993 -1.2202704124326402
58 2.369229123514458 3.926819494748486 -1.5575903712340278
59 1.735771359392487 3.488609867677286 -1.7528385082847988
60 1.252721799050505 3.0414322539519296 -1.7887104549014246
61 0.9637532073126067 2.6258964446240656 -1.6621432373114589
62 0.8951642651140048 2.2797500087220537 -1.3845857436080489
63 1.0535329484060725 2.0345065966588574 -0.9809736482527849
64 1.4251313413431745 1.9126315455957208 -0.48750020425254625
65 1.9771541634642489 1.9255360691694265 0.051618094294822336
66 2.6606512771767967 2.072559110770901 0.5880921664058958
67 3.414902230493496 2.34102773471542 1.073874495778076
68 4.17284207727586 2.707390603227508 1.4654514740483515
69 4.867053809684606 3.139323244518928 1.727730565165678
70 5.4357921236225195 3.5986170203396464 1.8371751032828731
71 5.828500438890558 4.044593704049829 1.7839067348407287
72 6.010328361604678 4.437740635560799 1.5725877260438788
73 5.965246063689932 4.743241721186626 1.2220043425033058
74 5.697477387222705 4.934088854393842 0.7633885328288628
75 5.231123664416998 4.9934958163984735 0.23762784801852455
76 4.608011861752942 4.916399025469367 -0.30838716371642505
77 3.883959272298 4.709911074835094 -0.8259518025370935
78 3.123788425025225 4.39268654487312 -1.2688981198478952
79 2.395537519050208 3.993256739708538 -1.59771922065833
80 1.764383551803462 3.547482102127523 -1.7830985503240608
81 1.286820974089835 3.0953498765199856 -1.8085289024301505
+81
View File
@@ -0,0 +1,81 @@
rsi
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
46.84518809898699
45.82961265424322
46.5293990131247
49.23903870201344
53.518768674122796
58.56047460456064
63.58342577996474
68.07459111891804
71.80327260156207
74.72559789038102
76.88488357198254
78.34471541432595
79.15131540353094
79.31156608926268
77.35312513119456
73.13439349750769
67.51119167055117
61.48673113238304
55.86675382432369
51.14733221714866
47.57753664027756
45.28036590056008
44.36975889174273
45.212282377402985
48.12434665867438
52.61537254620642
57.83678169397702
62.992663568874654
67.57346293490359
71.3583982125327
74.31265622918312
76.4855340725887
77.9435594091973
78.73329989554925
78.85948376472163
76.76197022138767
72.44443440532005
66.78373698621982
60.77877328002407
55.21662487911296
50.57413251002351
47.087563552178636
44.87458874458458
44.050409895373384
45.01878876311954
48.0601943425273
52.64880490307121
57.92140340103244
63.088714334306665
67.65616719708338
71.41589642993111
74.34074717674663
76.4832369420561
77.91026866443379
78.66702552588708
78.75547116040536
76.51507736151031
72.09088140590961
66.3803507173797
60.378854393296976
54.856911707280055
50.27461841837877
46.857548898064
44.719625963574536
43.978649539628535
45.06927522550655
1 rsi
2 nan
3 nan
4 nan
5 nan
6 nan
7 nan
8 nan
9 nan
10 nan
11 nan
12 nan
13 nan
14 nan
15 nan
16 46.84518809898699
17 45.82961265424322
18 46.5293990131247
19 49.23903870201344
20 53.518768674122796
21 58.56047460456064
22 63.58342577996474
23 68.07459111891804
24 71.80327260156207
25 74.72559789038102
26 76.88488357198254
27 78.34471541432595
28 79.15131540353094
29 79.31156608926268
30 77.35312513119456
31 73.13439349750769
32 67.51119167055117
33 61.48673113238304
34 55.86675382432369
35 51.14733221714866
36 47.57753664027756
37 45.28036590056008
38 44.36975889174273
39 45.212282377402985
40 48.12434665867438
41 52.61537254620642
42 57.83678169397702
43 62.992663568874654
44 67.57346293490359
45 71.3583982125327
46 74.31265622918312
47 76.4855340725887
48 77.9435594091973
49 78.73329989554925
50 78.85948376472163
51 76.76197022138767
52 72.44443440532005
53 66.78373698621982
54 60.77877328002407
55 55.21662487911296
56 50.57413251002351
57 47.087563552178636
58 44.87458874458458
59 44.050409895373384
60 45.01878876311954
61 48.0601943425273
62 52.64880490307121
63 57.92140340103244
64 63.088714334306665
65 67.65616719708338
66 71.41589642993111
67 74.34074717674663
68 76.4832369420561
69 77.91026866443379
70 78.66702552588708
71 78.75547116040536
72 76.51507736151031
73 72.09088140590961
74 66.3803507173797
75 60.378854393296976
76 54.856911707280055
77 50.27461841837877
78 46.857548898064
79 44.719625963574536
80 43.978649539628535
81 45.06927522550655
+81
View File
@@ -0,0 +1,81 @@
sma
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
107.082865308575
106.96031118542241
106.55098952518925
105.93612732359576
105.21531190077062
104.49759506253974
103.89175182739567
103.49656387805487
103.39199568793734
103.63205153291037
104.23995145016349
105.20605706144154
106.48873254066868
108.01806381828972
109.7021037968819
111.4350857115261
113.10687095991703
114.61278745568676
115.86297967414018
116.79043517866376
117.35697064210828
117.55664264968355
117.41627860650068
116.99308032537222
116.36951435923494
115.64594550958222
114.93167153765809
114.33515992096163
113.9543587765253
113.86794744733447
114.12830831094557
114.75684761770661
115.742083334167
117.04067079892921
118.58127457216008
120.2709406179764
122.00339961162967
123.66855966178939
125.16234049131411
126.39597061843133
127.30391704882051
127.84973914282192
128.0293437492481
127.87135083438908
127.43453694566097
126.80258487767678
126.07660853743191
125.36612074013492
124.7792507555816
124.41308544252024
124.34499676870873
124.62573040346784
125.27487275817427
126.27910139046546
127.59337505833837
129.14495712015346
130.83991288220435
132.57150050514548
134.2297059345968
135.71107012897224
136.92793074753726
137.81625276622648
138.34134853563094
138.50097632541122
138.3255405713923
137.87537593786334
137.23535780170852
1 sma
2 nan
3 nan
4 nan
5 nan
6 nan
7 nan
8 nan
9 nan
10 nan
11 nan
12 nan
13 nan
14 nan
15 107.082865308575
16 106.96031118542241
17 106.55098952518925
18 105.93612732359576
19 105.21531190077062
20 104.49759506253974
21 103.89175182739567
22 103.49656387805487
23 103.39199568793734
24 103.63205153291037
25 104.23995145016349
26 105.20605706144154
27 106.48873254066868
28 108.01806381828972
29 109.7021037968819
30 111.4350857115261
31 113.10687095991703
32 114.61278745568676
33 115.86297967414018
34 116.79043517866376
35 117.35697064210828
36 117.55664264968355
37 117.41627860650068
38 116.99308032537222
39 116.36951435923494
40 115.64594550958222
41 114.93167153765809
42 114.33515992096163
43 113.9543587765253
44 113.86794744733447
45 114.12830831094557
46 114.75684761770661
47 115.742083334167
48 117.04067079892921
49 118.58127457216008
50 120.2709406179764
51 122.00339961162967
52 123.66855966178939
53 125.16234049131411
54 126.39597061843133
55 127.30391704882051
56 127.84973914282192
57 128.0293437492481
58 127.87135083438908
59 127.43453694566097
60 126.80258487767678
61 126.07660853743191
62 125.36612074013492
63 124.7792507555816
64 124.41308544252024
65 124.34499676870873
66 124.62573040346784
67 125.27487275817427
68 126.27910139046546
69 127.59337505833837
70 129.14495712015346
71 130.83991288220435
72 132.57150050514548
73 134.2297059345968
74 135.71107012897224
75 136.92793074753726
76 137.81625276622648
77 138.34134853563094
78 138.50097632541122
79 138.3255405713923
80 137.87537593786334
81 137.23535780170852