Standardize naming convention so all Ehlers-originated indicators
have "Ehlers" in their display name across all documentation and
code surfaces:
- SAM: Smoothed Adaptive Momentum → Ehlers Smoothed Adaptive Momentum
- PMA: Predictive Moving Average → Ehlers Predictive Moving Average
- ILRS: Integral of LinReg Slope → Ehlers Integral of LinReg Slope
- CTI: Correlation Trend Indicator → Ehlers Correlation Trend Indicator
- RVGI: Relative Vigor Index → Ehlers Relative Vigor Index
Updated across: .md H1 titles, XML doc summaries, Quantower Name
properties, Quantower test assertions, _sidebar.md, lib/_index.md,
category _index.md files, docs/indicators.md, docs/validation.md.
Build: 0 warnings, 0 errors. All tests pass.
- Full template: property table, tagline, key takeaways, historical context,
architecture & physics with code references, mathematical foundation,
interpretation & signal zones, related indicators, validation table,
performance profile, common pitfalls, FAQ, references
- Title changed from "Rocket RSI" to "Ehlers Rocket RSI" across all indexes
- Updated _sidebar.md, lib/_index.md, lib/oscillators/_index.md
- Add mermaid@11 library with dark theme configuration
- Add custom markdown renderer to convert ```mermaid blocks to <div>
- Add doneEach plugin hook to run mermaid after page navigation
- Fix code fence syntax in architecture.md (remove space before 'mermaid')
Comprehensive refactor across all indicators replacing the periodic
ResyncInterval-based drift correction (every 1000 ticks recalculate
from scratch) with Kahan compensated summation for running sums.
Key changes:
- Remove ResyncInterval constants and TickCount fields from all State records
- Add Kahan compensation fields (SumComp, SumSqComp, etc.) to State records
- Replace naive sum += val - removed with Kahan delta pattern
- Remove Resync()/RecalculateSum() methods that did O(N) recalculation
- Update batch/SIMD paths to use Kahan compensation instead of resync loops
- IIR filters (EMA, REMA, RGMA) simplified: inherently self-correcting
- Version bump to 0.8.7
- Build system: README version stamping via Directory.Build.props
- Minor doc/test tolerance adjustments for new numerical characteristics
Affected modules: channels, core, cycles, dynamics, errors, momentum,
oscillators, statistics, trends_FIR, trends_IIR, volatility, volume
Complete rewrite of docs/pinescript.md to include every .pine file
organized by category (core, FIR trends, IIR trends, filters,
oscillators, dynamics, momentum, volatility, volume, channels,
cycles, reversals, forecasts, statistics, numerics, errors).
Previously listed ~120 indicators with many missing categories.
- Publish.yml: Change workflow permissions from {} to contents:read
to fix GITHUB_TOKEN having no scopes for actions/checkout@v4
- Wrmse.cs: Use DateTime.UtcNow instead of DateTime.MinValue in
Update(double,double,double) to match Beta/Covariance pattern
- Bump version to 0.8.5
Complete thin Dx-composition wrapper indicators with full test coverage:
- PlusDi/MinusDi: Directional Indicator wrappers (DiPlus/DiMinus from Dx)
- PlusDm/MinusDm: Directional Movement wrappers (DmPlus/DmMinus from Dx)
- Individual validation tests per indicator directory (TALib, Skender, bounds)
- Combined unit tests (DiDm.Tests.cs) and validation tests (DiDm.Validation.Tests.cs)
- Quantower wrappers + tests for all 4 indicators
- PineScript v6 implementations with compensated RMA
- Normalized .md documentation for all indicators and categories
- 182 tests passing, 0 failures
Replace beforeEach hook with docsify's routes config that intercepts
.pine URL patterns before docsify attempts to fetch them as .md files.
The route handler fetches the actual .pine file and wraps it in a
markdown code fence, giving each .pine file a unique URL hash.
Replace manual click-interception plugin with a clean beforeEach hook
that detects .pine routes and wraps raw content in markdown code fences.
This gives each .pine file its own unique URL (e.g. #/lib/.../atr.pine),
supports direct linking, bookmarks, and browser back/forward navigation.
Deep review of all indicator categories verified .md headers against .cs WarmupPeriod, parameters, inputs, and outputs. Fixes include warmup corrections, parameter documentation, output type accuracy, and Pine Script alignment.
The NativeAOT export had stale parameter names (period, minPeriod,
maxPeriod, useMedian) from an older API. Renamed to match the actual
Eacp.Batch(minPeriod, maxPeriod, avgLength, enhance) signature.
ABI preserved — same 7 params, same types, no Python-side changes needed.
Analysis of full .slnx (800+ files across 5 projects) still times out
even with --no-build. Target lib/quantalib.csproj directly to scope
analysis to the main library (~400 files). Consistent with proven
local inspectcode approach.