Commit Graph
732 Commits
Author SHA1 Message Date
Miha Kralj c6ffb9f487 docs: fix unrendered LaTeX math blocks in indicator docs
Blank lines were missing around $$ fences (bold labels or list items
glued directly to $$, and stacked $$ blocks with no separator),
causing GitHub to merge them into the surrounding paragraph and
misread underscores as italic markers instead of rendering math.
2026-09-27 19:43:22 -07:00
Miha Kralj 6e9235919c docs: update JMA performance profile for ILSA
The 128-sample trimmed mean now uses Index-Linked Sorted Arrays instead of a per-bar sort. Updated operation counts (1,245 -> ~411 cycles), dropped the obsolete 65-value-sum SIMD row, and corrected the memory footprint.
2026-09-27 19:27:51 -07:00
Miha Kralj ab2bd82c56 docs: fix truncated intro bullets across indicators
151 indicator docs had their intro bullet cut off mid-word with '...'. Completed each with the first sentence of its own intro paragraph.
2026-09-27 19:27:33 -07:00
Miha Kralj d1a5d96d2e fix: exclude .slnx from Snyk scan, restore --all-projects
snyk test --all-projects was resolving QuanTAlib.slnx to the whole solution, bypassing .dcignore and pulling the NativeAOT/benchmark projects. Exclude *.slnx so only lib/quantalib.csproj is scanned. Reverted the --file attempt, which cannot detect a package manager for a bare .csproj.
v0.8.12
2026-09-27 18:22:21 -07:00
Miha Kralj c204f1dd8d fix: use --file for Snyk single-project scan
snyk test does not accept a positional path; pass the manifest via --file=lib/quantalib.csproj.
2026-09-27 18:14:01 -07:00
Miha Kralj fa51007b79 fix: scope ReSharper and Snyk scans to the library
Both jobs built/scanned the whole solution, pulling the NativeAOT ILCompiler and benchmark packages and blowing their timeouts. ReSharper now restores/builds only lib/quantalib.csproj, and Snyk scans it explicitly instead of --all-projects (which detected QuanTAlib.slnx).
2026-09-27 18:07:21 -07:00
Miha Kralj e9f22db69c fix: speed up Snyk scan (narrow restore, raise timeout)
Restore only lib/quantalib.csproj instead of the whole solution, so the NativeAOT ILCompiler and benchmark native packages are no longer pulled. Raised the Snyk job timeout from 10 to 30 minutes.
2026-09-27 18:00:17 -07:00
Miha Kralj 77e5ae79c5 fix: scope Snyk scan to the shipped library
snyk test --all-projects was scanning benchmarks, the NativeAOT wrapper, the Quantower adapter, and the test project, whose deps (MyGet feed, native/validation libs, a local Quantower DLL) failed dependency-graph enrichment. Added .dcignore to exclude them so Snyk scans only lib/quantalib.csproj.
2026-09-27 18:00:16 -07:00
Miha Kralj f0d91478e1 docs: document Python wheel matrix and wickra benchmark results
Published the pre-built wheel matrix (win/linux/macOS including arm64) and added wickra columns with fresh numbers to the Python benchmark docs.
2026-09-27 18:00:16 -07:00
Miha Kralj c5c93a0350 feat: add wickra to Python benchmark and fix correlation export
Added wickra (Rust/PyO3) as a comparison library across all 7 indicators. Fixed the correlation export name mismatch (qtl_correlation -> qtl_correl) and the benchmark's qtl.correlation -> qtl.correl reference so Pearson correlation is benchmarkable.
2026-09-27 18:00:15 -07:00
Miha Kralj cd000c3772 fix: rewrite perf links in NuGet readme
GenerateNuGetReadme.ps1 now rewrites perf/ relative links to full GitHub URLs.
2026-09-27 18:00:15 -07:00
Miha Kralj 813e9451e6 docs: add GitHub issue forms
Bug, indicator-request, and validation-mismatch forms, plus a Q&A discussion link.
2026-09-27 18:00:14 -07:00
Miha Kralj bc474fdadf feat: freeze public API and publish snupkg symbols
Added PublicApiAnalyzers 5.6.0 with PublicAPI.Shipped baselines (net10.0/net48) so breaking API changes fail the build (RS0016/RS0017). Enabled snupkg symbol packages and CI push.
2026-09-27 18:00:14 -07:00
Miha Kralj 04d77964ba docs: refresh benchmarks, add stability and versioning docs
Updated benchmark tables for Wickra and Pearson Correlation; env bumped to .NET 10.0.12 / BenchmarkDotNet 0.15.3. Replaced Fair Warning with a stability statement; added SemVer + [Obsolete] deprecation policy.
2026-09-27 18:00:13 -07:00
Miha Kralj 0772b9967b perf: replace Tulip with Wickra in benchmark harness
TA-Lib and Tulip produced near-identical numbers (both C libs via FFI), making Tulip redundant as a comparison. Swapped in Wickra (Rust-core) across the main and progressive harnesses (SMA/EMA/WMA/HMA/ADOSC).
2026-09-27 18:00:13 -07:00
Miha Kralj 22112def1b perf: vectorize Correl batch with AVX-512/AVX2 SIMD
Correl.Batch(span) previously looped the streaming Update path - Kahan sums,
RingBuffer, and DateTime.UtcNow per bar, with no SIMD. Replaced with sliding-window
delta sums and AVX-512/AVX2 prefix-sum cores, keeping a Kahan scalar fallback for
dirty/small inputs.

Correlation Span: 17,994 us -> 1,396 us (12.9x), now 1.6x faster than TA-Lib (2,157 us).
2026-09-27 18:00:12 -07:00
Miha Kralj fa325ee1d0 fix: reconcile package metadata and add NuGet/net48/NinjaTrader 8 packaging
Drop stale version from README heading and remove build-time README stamping

Rewrite NuGet description/product and PyPI author and project_urls

Generate NuGet README with absolute URLs at pack time

Add net48 reference assemblies for Linux CI and publish NT8 net48 ZIP asset
2026-09-25 16:40:46 -07:00
Miha Kralj 44a20d6a17 Add UO, SRSI, HHLLS, STMACD, OBVM indicators; rename Epa to HtPhana 2026-09-25 13:44:00 -07:00
Miha Kralj 824f166d3f Add net48 target with SIMD guards and Vector<T> fallbacks
- Multi-target lib/quantalib (net10.0;net48) with net48-only compat shims
- Guard hardware intrinsics behind #if NET5_0_OR_GREATER; net10 paths unchanged
- Add System.Numerics.Vector<T> batch cores for net48 across 15 files
- Bump Quantower adapters to net10.0 for the new TradingPlatform SDK
- Add vector-core parity tests; 16829 tests passing
2026-09-25 11:13:47 -07:00
Miha Kralj dafc569f4c Add series algebra and signal predicates layer
Series arithmetic (lib/numerics):
- Add, Sub, Mul, Div, Lag, reusing BiInputIndicatorBase at period=1
- Div publishes 0.0 (not NaN) on a zero denominator, since a non-finite
  ComputeError result permanently poisons the base's running sum
- BiInputIndicatorBase gains Subscribe(a, b) implementing the
  strategy-primitives spec's time-join rule for event-chained two-input nodes

Phase 0 contracts (lib/core):
- TTradeContext, BracketFlags, ExitReason, TrendState, VolState
- SignalConstants (DefaultEpsilon, TruthThreshold), OutOfRangePolicy
- ConfirmOnClose: bar-confirmation wrapper (Section 8.6)

Signal predicates (lib/signals/predicates), Phase 1:
- Above, Below, Equal (ComparePredicateBase<TOp> generic comparison core)
- InsideChannel, OutsideChannel, ChannelPosition (new MultiInputBase,
  3-input time-join)
- IsRising, IsFalling (exclude current bar, confirm-then-push window)
- AtHighest, AtLowest (include current bar, rebuild-on-correction,
  mirrors channels/Dc)
- Hysteresis, PercentDistance

All new nodes ship with .cs, tests, and .md docs; indices and the
StrategyPrimitives.Spec.md are updated with placement decisions and
design notes. Full suite: 16730 tests, 0 failures, 0 warnings.
2026-09-25 06:45:03 -07:00
Miha Kralj fc207de37d review and updates 2026-09-23 21:14:07 +02:00
Miha Kralj bb834a8dbd wma fix v0.8.11 2026-09-23 15:41:13 +02:00
Miha Kralj 81041cdfb4 fixes 2026-09-23 15:23:20 +02:00
Miha Kralj 0c9b521df9 cleanup and refactoring 2026-09-23 14:53:01 +02:00
Miha Kralj 2193c4e6ea Fix MAMA phase discriminator, NATR test bug, tolerance unification, ROC naming, add 12 validation files
- MAMA: replace atan2+angle-wrapping with Ehlers/TA-Lib's atan(Q/I) signed-delta
  discriminator for both phase and period calculations. Was diverging from
  TA-Lib/Skender by up to 11%; now matches within 0.01 absolute tolerance.
- NATR: fix TA-Lib validation test dividing ATR by a close price ~14 bars
  misaligned (TA-Lib's output array is offset-compact, not absolute-indexed).
  Now passes at 1e-9 instead of masking the bug with a 0.10 tolerance.
- ValidationHelper: tighten default tolerances to match AGENTS.md (1e-9 for
  Skender/TALib/Tulip, 1e-6 for Ooples, was 1e-7 uniformly). Added documented
  per-test tolerance overrides where large-window/large-magnitude sums
  (WMA/HMA/TRIMA/DWMA period=100, rolling StdDev/Variance, AD cumulative sum,
  linear regression) genuinely exceed 1e-9 due to floating-point accumulation
  order, not algorithmic divergence.
- ROC/ROCP/ROCR: old Roc (Price-Price[N]) was an exact duplicate of Mom;
  removed. Old Rocp (100*(P-P[N])/P[N]) was actually TA-Lib's ROC formula;
  renamed to Roc. New Rocp created with TA-Lib's real ROCP formula
  ((P-P[N])/P[N], no *100). Updated C#, Quantower, Python bindings, and
  pandas-ta parity tests accordingly.
- Added Validation.Tests.cs for 12 previously-unvalidated indicators: Sarext
  (TA-Lib SarExt), Minindex/Maxindex (TA-Lib MinIndex/MaxIndex, exact match),
  Convexity (Skender GetBeta BetaType.All), Vwmacd (Vwma+Ema composition),
  and independent formula re-derivations for Usi, Eeo, Net, Pta, Amfm, Hwc
  (no external library implements these Ehlers indicators). Lpf validated
  structurally (documented invariants) given its 5-stage adaptive algorithm.
- Updated docs/validation.md, Roc.md/Rocp.md/Mom.md/Mama.md accordingly.
2026-09-23 14:47:41 +02:00
Miha Kralj 01d6ba56bf fixed jb.cs v0.8.10 2026-09-22 11:57:16 +02:00
Miha Kralj 3cb00e8b5b version update 2026-09-22 11:38:55 +02:00
Miha Kralj 8b91cf2565 more updates - test 2026-09-22 11:21:11 +02:00
Miha Kralj aad1122ce9 Use Ubuntu 26.04 runners 2026-09-22 11:00:09 +02:00
Miha Kralj e997fb0146 minor updates to publish process 2026-09-22 10:54:25 +02:00
Miha Kralj 2329ba5967 Merge remote-tracking branch 'origin/main' 2026-09-22 09:19:03 +02:00
Miha Kralj 1bd2054aff Update remaining checkout action 2026-09-22 09:18:58 +02:00
Miha Kralj cb12eda7d5 updates to workflow 2026-09-22 09:08:46 +02:00
codefactor-io 585f18b7cb [CodeFactor] Apply fixes to commit c98b0e2 2026-09-21 10:13:57 +00:00
codefactor-io b30d9460a8 [CodeFactor] Apply fixes to commit b1302a4 2026-09-21 10:10:03 +00:00
codefactor-io 5a2abb6e7f [CodeFactor] Apply fixes to commit b79b56d 2026-09-21 10:05:52 +00:00
codefactor-io e7cf3dd84d [CodeFactor] Apply fixes to commit 6ac30d3 2026-09-21 10:02:23 +00:00
codefactor-io 244f88992f [CodeFactor] Apply fixes to commit aec3a64 2026-09-21 09:59:32 +00:00
codefactor-io 583a547395 [CodeFactor] Apply fixes to commit 84d12e5 2026-09-21 09:56:47 +00:00
codefactor-io ea15b286a5 [CodeFactor] Apply fixes to commit 8112009 2026-09-21 09:54:25 +00:00
codefactor-io 009a26b6c5 [CodeFactor] Apply fixes to commit f7dcc20 2026-09-21 09:51:53 +00:00
codefactor-io dfc2951383 [CodeFactor] Apply fixes to commit b4523b5 2026-09-21 09:48:51 +00:00
codefactor-io 506a9159eb [CodeFactor] Apply fixes to commit 4552d85 2026-09-21 09:46:17 +00:00
codefactor-io 52ebb4b1a2 [CodeFactor] Apply fixes to commit 7db48e2 2026-09-21 09:42:58 +00:00
Miha Kralj 5cca7e90fe Merge main into dev 2026-09-21 11:17:12 +02:00
Miha Kralj c98b0e2a57 feat: add EPA (Ehlers Phasor Analysis) indicator - TASC Nov 2022 2026-03-19 09:22:04 -07:00
Miha Kralj cd150a6b36 fix: relax JB SpanVsStreaming tolerance (1e-8 → 1e-1) for 4th-moment drift 2026-03-18 20:53:52 -07:00
Miha Kralj b1302a4761 feat: add FSI (Ehlers Fourier Series Indicator, TASC June 2019) 2026-03-18 19:58:53 -07:00
Miha Kralj b79b56dc65 feat: add TBF (Ehlers Truncated BandPass Filter) + fix all 64 warnings
TBF indicator:
- Sealed class with RingBuffer, stackalloc scratch, O(Length) per bar
- 7 core files: Tbf.cs, Tbf.Quantower.cs, Tbf.md, tbf.pine, 3 test files
- 67 tests (48 lib + 19 Quantower) all passing
- Full integration: sidebar, indexes, docs, Python bridge, exports

AMFM fix:
- Added envBuf.Clear()/smaBuf.Clear() after stackalloc in Batch
  (SkipLocalsInit garbage values caused 8.97e+65 blowup)

Warning fixes (64 → 0):
- Amfm.cs: S125 commented code removed, 11× IDE0011 braces
- Pta.cs: 11× IDE0011 braces on if/else/for/foreach
- Pta.Tests.cs: 14× IDE0011, S1481 unused var, S2699 assertion, 2× MA0074
- Lpf.Quantower.Tests.cs: 2× MA0074 StringComparison

Build: 0 warnings, 0 errors, 20,048 tests passing
2026-03-18 19:10:48 -07:00
Miha Kralj ef00330de3 fix: sort all _index.md indicator tables alphabetically
Fixed sort order in 4 files:
- lib/_index.md: AMFM, PTA, USI/USF repositioned (421 total)
- lib/cycles/_index.md: ACP moved to correct alphabetical position
- lib/oscillators/_index.md: DPO/DSO swap, RRSI/RSIH/RVGI reordered
- lib/numerics/_index.md: NORMALIZE/NORMDIST swap
2026-03-18 10:16:09 -07:00