Commit Graph
112 Commits
Author SHA1 Message Date
Exocet92 5e69e232a6 bench: read the licence tier through license_info()
The sweep harness and ci_activate.py read the tier with the public
mbt.license_info(), and the parity-only check uses the published
Community limit of 256 combinations per sweep. Checked locally: a
licensed run times the grid, an unlicensed one is skipped, and
parity-only still runs below the limit and is skipped above it.
2026-09-27 02:46:40 +02:00
Exocet92 26a66347a1 docs(readme): reword the introduction 2026-09-26 03:33:58 +00:00
github-actions[bot] 431cbbe5a4 bench: publish results from run 35590549822 [skip ci] 2026-09-21 11:12:14 +00:00
github-actions[bot] f87d71d174 bench: publish results from run 34834573701 [skip ci] 2026-09-14 11:12:57 +00:00
github-actions[bot] 44b55e8654 bench: publish results from run 34619689266 [skip ci] 2026-09-11 16:19:33 +00:00
github-actions[bot] 49529ed84f release: v0.26.0 v0.26.0 2026-09-11 15:25:30 +00:00
github-actions[bot] ae93cacff1 bench: publish results from run 34055376975 [skip ci] 2026-09-06 20:05:18 +00:00
github-actions[bot] 26dc0b01e6 release: v0.25.0 v0.25.0 2026-09-06 19:35:30 +00:00
github-actions[bot] 79d0889193 bench: publish results from run 34001977209 [skip ci] 2026-09-06 01:12:19 +00:00
github-actions[bot] 89079277bd release: v0.24.0 v0.24.0 2026-09-06 00:42:04 +00:00
github-actions[bot] 3257dd6fde bench: publish results from run 33819887722 [skip ci] 2026-09-04 00:28:23 +00:00
github-actions[bot] 2ee9f29c36 release: v0.23.0 v0.23.0 2026-09-03 23:59:01 +00:00
github-actions[bot] 9b02cf9360 bench: publish results from run 33655385165 [skip ci] 2026-09-02 16:50:40 +00:00
github-actions[bot] 5253b70c35 release: v0.22.0 v0.22.0 2026-09-02 16:30:51 +00:00
github-actions[bot] 1c8eeaee0d bench: publish results from run 33387852938 [skip ci] 2026-08-31 12:07:17 +00:00
github-actions[bot] 7701e66a77 bench: publish results from run 33129027473 [skip ci] 2026-08-28 00:30:01 +00:00
Jimmy7892 3272e2ff33 bench: pin plotly, the hole in the lock
plotly 7.0.0 landed on PyPI and removed the mapbox trace types that
vectorbt 0.28.4's template still references, so 'import vectorbt' died
before a single bar ran. plotly was the one transitive dependency the
lock did not cover; it does now, on 6.9.0, the last 6.x line. The
version printout includes it so the results stay comparable.
2026-08-28 01:56:03 +02:00
Jimmy7892 fc59a6a077 docs: drop the em dash 2026-08-28 01:43:57 +02:00
Jimmy7892 ff1eea2085 examples: 25 runs without the Pro diagnostic 2026-08-28 01:40:06 +02:00
Jimmy7892 f3c37f9839 examples: 13 runs on the free tier 2026-08-28 01:36:29 +02:00
Jimmy7892 3f81861329 release: v0.21.0 v0.21.0 2026-08-28 01:32:13 +02:00
Exocet92 1c92dbf862 ci: collect the benchmark harness's rendering tests
The root testpaths points at python/tests, so nothing collected
benchmarks/vs_vectorbt/test_report.py, which arrived with #13. A light
job (pytest alone, no wheel) runs them on every push and pull request.
Authored upstream; the release sync will keep carrying this copy.
2026-08-27 17:22:46 +02:00
Exocet92 fd40e34ba5 bench: pin the annex population with a test
A documented point whose timing was never published appears nowhere in
the report, so a measured size for it would be an explanation with
nothing to explain. Fails against the parent of the previous commit.
2026-08-27 17:22:41 +02:00
Exocet92 0fc6d74235 bench: divergence notes cover the annex table, not every documented row
render() fed `documented` to _divergence_note, so a documented row
without a published timing would have got a measured-size bullet under
a table it does not appear in. The note explains the timings published
above it, so it takes `timed`. Follow-up to #13, which made the note
per-row and left the population as it found it.
2026-08-27 17:22:33 +02:00
Zorion ArrillagaandExocet92 18484e25f6 bench: give every documented divergence its measured size
README.md publishes a documented verdict as "the timing, in an annex, with
the cause and its measured size". render() printed the size for the first
documented row and broke out of the loop, so the run at 93ad928 published
three bracket_sl_tp timings under one measured line.

The line that printed is the 100,000-bar point, where raptorbt sits 0.92% of
capital from the reference. The two without one are 1,000,000 bars, where it
sits 10.07% away and crosses from below the reference to above it, and
10,000,000 bars, where the round-trip delta is 93,295.

_divergence_note now takes the rows rather than a row, and states the cause
once underneath them. The lines become bullets: three consecutive lines are
one paragraph in CommonMark, and every other multi-fact block in this file
is already a list.
2026-08-27 16:57:10 +02:00
Exocet92 8126c84120 docs: add contributing guide
Names which paths are maintained on this mirror and which are
overwritten by the release sync, and states that contributions are
accepted under Apache 2.0 without the Commons Clause.
2026-08-27 16:48:29 +02:00
github-actions[bot] 1bb9c141f2 release: v0.20.1 v0.20.1 2026-08-27 00:29:42 +00:00
Exocet92 37219891bf docs: add issue templates 2026-08-25 19:59:42 +02:00
Exocet92 bcf0e32e4e docs: add issue templates 2026-08-25 19:59:41 +02:00
Exocet92 7334047744 docs: add security policy 2026-08-25 19:59:34 +02:00
github-actions[bot] eef2dfa21d bench: publish results from run 32874226193 [skip ci] 2026-08-25 17:18:55 +00:00
github-actions[bot] 4f921d4a5c tests: skip the one detector call in the baked-parameter suite
The other two tests in the file run plain backtests on daily data and
still measure the leak on a Community wheel; only the detect_lookahead
call is Pro-gated, so the guard is per-test.
2026-08-25 19:13:47 +02:00
github-actions[bot] f27e3efbb8 tests: skip the Pro-gated suites on a Community wheel
This CI runs the mirrored suite against the PyPI wheel without a licence.
Twelve tests exercised paths Community gates: walk-forward optimization
raises LicenseError before any geometry is read, and the look-ahead
detector both needs Pro and counts sub-daily bars that the Community
daily floor reduces to four. Same module-level guard the sweep tests
already carry, with the reason named.
2026-08-25 19:10:28 +02:00
github-actions[bot] 93ad928510 release: v0.20.0 v0.20.0 2026-08-25 18:49:00 +02:00
Exocet92 e4c400cd79 docs: correct three claims in the correctness section 2026-08-25 17:30:14 +02:00
Exocet92 3e4a6921e5 docs: describe the parity tests as they actually are 2026-08-25 17:26:15 +02:00
Exocet92 c933c06140 chore: trim the generated header to what a user needs 2026-08-25 17:22:06 +02:00
Exocet92 85f67dff16 chore: restore the PyPI-attribution Discord invite 2026-08-25 17:03:55 +02:00
Exocet92 7f654da331 chore: regenerate pyproject.toml from the engine (it had drifted) 2026-08-25 17:01:24 +02:00
Exocet92 a1c0f6f0dd docs: write out the execution rules so they can be checked 2026-08-25 16:58:25 +02:00
Exocet92 618a39f0b5 docs: state what is verified, and what is not 2026-08-25 16:51:29 +02:00
Exocet92 3656a80d17 docs: sync README from the engine (63 indicators, tier table, benchmark run #13) 2026-08-25 16:03:51 +02:00
github-actions[bot] 029d54e7d1 bench: publish results from run 32713305381 [skip ci] 2026-08-24 10:15:18 +00:00
github-actions[bot] 8208a3310e release: v0.19.1 v0.19.1 2026-08-24 09:46:05 +00:00
github-actions[bot] 56b7cccaae bench: publish results from run 32695243410 [skip ci] 2026-08-24 06:24:44 +00:00
github-actions[bot] 7ac9831d9a bench: publish results from run 32642616670 [skip ci] 2026-08-23 14:01:18 +00:00
github-actions[bot] 44f8ed1a91 release: v0.19.0 v0.19.0 2026-08-23 13:31:37 +00:00
Jimmy7892 a5f51e2fde docs: put Discord on its own line, and stop shipping a badge that says "missing"
Seven badges on one wrapped line buried the only one meant to be clicked. Discord
now sits alone above the rest, in the large style, and the second line keeps four
informational ones: PyPI, Python, Rust, benchmarks. Dropped the licence badge,
which repeated the LICENSE link already in the footer.

The pyversions badge was rendering "missing" in red, and it was right to. Every
published wheel carries NO `Programming Language :: Python :: 3.x` classifier:
crates/bt-python/pyproject.toml, the file maturin actually builds from, has no
`classifiers` field at all. The public pyproject.toml has one, but it does not
build anything, so its list never reached PyPI. `requires-python = ">=3.9"` is a
separate field and does not populate classifiers.

Replaced with a static "python 3.9+" badge, since PyPI cannot answer the question
for 0.18.0 whatever we ask it. The engine-side fix travels separately; once a
wheel ships with classifiers, PyPI's sidebar will list the versions too and this
can go back to being dynamic.
2026-08-22 05:05:00 +02:00
Jimmy7892 873524dae6 docs: normalise the speed figures on the published benchmark, document tf().apply and choice
The performance table was still quoting run #11 (manifoldbt 0.17.3), while the
site publishes run #13 (0.18.0) from the same workflow. Same shape, different
numbers, and the headline claim disagreed with the site by a few percent:
10M bars with the metric suite is 329 ms against 102.38 s, a factor of 311,
not 317 ms / 97.46 s / 308. Every row now comes from run 32469701489, the one
data/benchmark.json is synced from.

Added the stop-loss/take-profit bracket row, where raptorbt is level with us
(x1.0). It belongs next to the five-asset row for the same reason that one is
there: deciding which of the stop and the target triggers first is a sequential
intra-bar walk in both engines, so there is nothing left to vectorise. Publishing
only the workloads we win looks better and reads worse.

Qualified the backtrader figure. It is measured on a developer machine with a
different script, not on the CI runner, so quoting it beside a CI table implied a
comparability it does not have. It also no longer appears in the headline bullet:
the site makes no numeric backtrader claim, and the two engines are not doing the
same work.

Documented the two additions that were reachable but undocumented:
- tf("1h").apply(expr) evaluates on that timeframe's own grid, so periods count
  in ITS bars. The note warns about sma(tf("1h").close, 20), which looks
  equivalent and is not: it counts simulation bars over a step-held series, so
  on a 1m run it is a 20-minute smoothing of an hourly staircase.
- choice(name, {branch: expr}) makes a selector a grid axis.

Every snippet in these two sections was executed verbatim against the 0.19.0rc1
wheel before committing, including the warning, which was checked to actually
differ rather than asserted.

Header badges: PyPI version and Python versions (both live), Rust core, CUDA,
benchmarks-in-CI linking the workflow, and the licence.
2026-08-22 04:53:20 +02:00
github-actions[bot] 0b93aed93b bench: publish results from run 32469701489 [skip ci] 2026-08-21 10:05:52 +00:00