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
Miha Kralj
6ac30d37e6
feat: add LPF - Ehlers Linear Predictive Filter (TASC Jan 2025)
...
Implements Ehlers' Linear Predictive Filter for dominant cycle detection:
- Roofing filter (HP + SuperSmoother) → AGC → Griffiths adaptive predictor
- DFT spectrum from predictor coefficients → Center of Gravity dominant cycle
- Outputs: DominantCycle, Signal (AGC-normalized), Predict (one-bar-ahead)
Files added:
- lib/cycles/lpf/Lpf.cs (core implementation, sealed class)
- lib/cycles/lpf/Lpf.Quantower.cs (3 LineSeries: Cycle, Signal, Predict)
- lib/cycles/lpf/Lpf.md (canonical template v3 documentation)
- lib/cycles/lpf/lpf.pine (PineScript v6 reference)
- lib/cycles/lpf/tests/Lpf.Tests.cs (38 unit tests)
- lib/cycles/lpf/tests/Lpf.Quantower.Tests.cs (22 adapter tests)
Updated: index files, Python bridge (Exports.cs, _bridge.py, cycles.py)
2026-03-17 20:24:54 -07:00
Miha Kralj
547367790b
docs(pta): rewrite Pta.md to canonical template v3
...
Add tagline, full property table, 3-bullet summary, extended
historical context, mathematical foundation, parameter mapping,
frequency response analysis, phase lag discussion, quality metrics,
validation table, and detailed common pitfalls.
2026-03-17 19:58:21 -07:00
Miha Kralj
aec3a64e4e
feat(dynamics): add PTA - Ehlers Precision Trend Analysis
...
TASC Sep 2024. Dual 2-pole Butterworth highpass bandpass for
near-zero-lag trend extraction. HP(long) - HP(short) preserves
cycles between shortPeriod and longPeriod.
- Core: Pta.cs with O(1) streaming, Span batch, state rollback
- Quantower: PtaIndicator adapter with LineSeries + SetValue
- Tests: 31 lib + 11 Quantower (all passing)
- Pine: pta.pine PineScript v6 reference
- Docs: Pta.md canonical template v3
- Python: Exports.Generated.cs + _bridge.py + dynamics.py
- Indexes: _sidebar.md, lib/_index.md, dynamics/_index.md,
docs/indicators.md, docs/pinescript.md
2026-03-17 17:25:17 -07:00
Miha Kralj
84d12e5706
feat: add USI (Ehlers Ultimate Strength Index) - TASC Nov 2024
2026-03-17 16:44:48 -07:00
Miha Kralj
d3cb9d2513
feat(cycles): add AMFM - Ehlers AM Detector / FM Demodulator
2026-03-17 15:56:55 -07:00
Miha Kralj
e17b00172a
docs: standardize .md template — add PineScript links, blockquotes, bullet summaries
...
- Eeo.md: full rewrite to canonical template (blockquote, table, 3 bullets, paragraph)
- Ac.md: add PineScript row
- Ao.md: add PineScript row
- Fisher04.md: add table, PineScript row, 3 bullets, paragraph
- TtmWave.md: add PineScript row
- Dstoch.md: full rewrite header (blockquote, canonical table, 3 bullets, paragraph)
- Net.md: add blockquote, canonical table, PineScript row, 3 bullets, paragraph
2026-03-17 15:31:58 -07:00
Miha Kralj
f6ea2fb4df
docs: add eeo.pine link to Eeo.md top table
2026-03-17 15:26:32 -07:00
Miha Kralj
7b1326c696
chore: sort lib/_index.md alphabetically, fix rrsi.pine na propagation
2026-03-17 15:14:22 -07:00
Miha Kralj
7d6536f4dd
fix(rrsi): fix zero-output bug in rrsi.pine caused by na propagation
2026-03-17 15:10:30 -07:00
Miha Kralj
8112009b32
feat(filters): add NET - Ehlers Noise Elimination Technology (TASC Dec 2020)
2026-03-17 14:38:31 -07:00
Miha Kralj
f7dcc20f7c
feat: add EEO (Ehlers Elegant Oscillator) - TASC Feb 2022
2026-03-17 14:18:57 -07:00
Miha Kralj
b9e6a70890
feat: add MADH (Ehlers Moving Average Difference with Hann) indicator
2026-03-17 14:02:51 -07:00
Miha Kralj
b4523b5cca
feat: add MADH (Ehlers Moving Average Difference with Hann) indicator
2026-03-17 13:48:34 -07:00
Miha Kralj
4fa29c04b7
feat: add DMH (Ehlers Directional Movement with Hann) indicator
2026-03-17 13:35:03 -07:00
Miha Kralj
4552d8529d
feat: add RSIH (Ehlers Hann-Windowed RSI) indicator
2026-03-17 12:40:55 -07:00
Miha Kralj
7db48e2418
feat(oscillators): add DSO - Ehlers Deviation-Scaled Oscillator
...
Implement DSO (TASC Oct 2018) with SSF 2-pole filter, RMS normalization,
and Fisher Transform (±0.99 clamp). Sealed class, O(1) streaming RMS via
RingBuffer, precomputed SSF coefficients.
New files: Dso.cs, Dso.Quantower.cs, Dso.md, dso.pine,
Dso.Tests.cs (27), Dso.Validation.Tests.cs (7), Dso.Quantower.Tests.cs (11)
Updated: Exports.cs, _bridge.py, oscillators.py, SPEC.md,
_sidebar.md, lib/_index.md, oscillators/_index.md,
docs/indicators.md, docs/pinescript.md
All 19,565 tests pass, 0 warnings.
2026-03-17 11:59:04 -07:00
Miha Kralj
5fc6e27d8e
Rename EACP to ACP across entire codebase
...
- Renamed directory lib/cycles/eacp → lib/cycles/acp
- Renamed class Eacp → Acp, EacpIndicator → AcpIndicator
- Renamed all files: Eacp.cs → Acp.cs, Eacp.Quantower.cs → Acp.Quantower.cs,
eacp.md → acp.md, eacp.pine → acp.pine, and all test files
- Updated display names: EACP → ACP in Quantower Name/ShortName properties
- Updated all documentation surfaces: _sidebar.md, lib/_index.md,
lib/cycles/_index.md, docs/indicators.md, docs/validation.md,
docs/pinescript.md, lib/cycles/cg/cg.md cross-reference
- Updated Python bridge: qtl_eacp → qtl_acp entry point, _bridge.py,
cycles.py wrapper, SPEC.md, test_shapes.py, run_all_exported
- All 83 tests pass (38 AcpTests + 22 AcpValidationTests + 23 AcpIndicatorTests)
- Build: 0 warnings, 0 errors across all projects
2026-03-17 11:35:11 -07:00
Miha Kralj
329b0657bc
Add "Ehlers" prefix to 5 Ehlers indicators: SAM, PMA, ILRS, CTI, RVGI
...
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.
2026-03-17 10:51:24 -07:00
Miha Kralj
75bcc12529
docs(rrsi): rewrite Rrsi.md to match template, rename to Ehlers Rocket RSI
...
- 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
2026-03-17 09:48:32 -07:00
Miha Kralj
db6bb86fe6
feat(rrsi): add PineScript reference implementation
...
Ehlers TASC May 2018 algorithm: Momentum → Super Smoother (2-pole
Butterworth IIR) → Ehlers RSI (summation CU/CD) → Fisher Transform.
Inputs: smoothLength=10, rsiLength=10, source=close.
2026-03-17 09:44:16 -07:00
Miha Kralj
4cc4c1a0c4
feat(rrsi): add validation tests — manual Ehlers algorithm cross-check
...
- Manual step-by-step reference implementation of Ehlers TASC May 2018
- Theory tests across 5 parameter combinations (5/5, 8/10, 10/10, 10/20, 20/10)
- arctanh mathematical identity verification
- Streaming/batch/span consistency validation
- Event-based vs streaming agreement check
- All-outputs-finite verification across 4 parameter sets
- Super Smoother coefficient unity DC gain validation
- 18 new tests, 15981 total passing, 0 warnings
2026-03-17 09:38:18 -07:00
Miha Kralj
eb9e41fc2e
feat: add RRSI (Rocket RSI) — Ehlers TASC May 2018
...
Algorithm: SuperSmoother-filtered momentum → Ehlers RSI → Fisher Transform
- 2-pole Butterworth IIR pre-filter removes noise
- Ehlers RSI (raw summation, not Wilder) outputs [-1,1]
- arctanh produces Gaussian-distributed zero-mean oscillator
Files: Rrsi.cs, Rrsi.Quantower.cs, Rrsi.md, 31+7 tests
Integration: sidebar, indices, Python bridge (Exports, _bridge, oscillators, SPEC)
Build: 0 warnings, 0 errors | Tests: 15,963 passed, 0 failed
2026-03-17 09:25:32 -07:00
Miha Kralj
15f4bb90f3
feat: add 8 new indicators with full integration
...
New indicators:
- HWC (Holt-Winters Channel) — channels, 27 tests
- VWMACD (Volume-Weighted MACD) — momentum, 38 tests
- Squeeze Pro — oscillators, 69 tests
- BW_MFI (Bill Williams MFI) — oscillators
- DSTOCH (Double Stochastic) — oscillators
- ATRSTOP (ATR Trailing Stop) — reversals
- VSTOP (Volatility Stop) — reversals
- Convexity (Beta Convexity) — statistics, 23 tests
Integration:
- Python bridge: Exports.cs, _bridge.py, wrapper modules
- Documentation: _sidebar.md, _index.md pages, SPEC.md
- All analyzer warnings fixed (MA0074, xUnit2013, S2699)
Build: 0 warnings, 0 errors | Tests: 15,933 passed, 0 failed
2026-03-17 08:35:29 -07:00
Miha Kralj
6f0a339c9b
fix: resolve build and test errors
...
- Sar.Quantower.Tests.cs: add missing opening quote on string literal (line 48)
- Exports.cs: rename Correlation.Batch → Correl.Batch (CS0103)
- Ad.Validation.Tests.cs: fix Ooples OutputValues key "Ad" → "Adl"
2026-03-16 12:45:13 -07:00
Miha Kralj
57e69721f5
fix: relax BBB streaming/batch tolerance for cross-platform FP precision
2026-03-15 18:15:47 -07:00
Miha Kralj
e3bd07aa87
feat: add ADF (Augmented Dickey-Fuller) indicator
...
- Core implementation with Cholesky OLS, MacKinnon p-value, AIC lag selection
- Three regression models: NoConstant, Constant, ConstantAndTrend
- NormCdf via Abramowitz & Stegun 7.1.26 erf approximation
- Quantower adapter, Python bridge (NativeAOT export + ctypes + wrapper)
- 69 tests (41 unit + 12 validation + 14 Quantower + 2 consistency)
- Documentation with Schwert table, MacKinnon coefficients, PineScript ref
- All 19,095 tests pass, zero warnings
2026-03-15 17:56:54 -07:00
Miha Kralj
67ad6f0cba
v0.8.7: Replace periodic ResyncInterval with Kahan compensated summation
...
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
2026-03-13 22:01:31 -07:00
Miha Kralj
c75135ab14
v0.8.6: update indicator docs, ndepend tooling, ALMA refactor, gitignore cleanup
2026-03-13 13:46:52 -07:00
Miha Kralj
e3e9555fc1
feat(python): add pure-Python EMA fallback per PYTHON_FALLBACK_SPEC
...
Single-function API: ema(source, period=10, *, alpha=None)
- Bias-compensated EMA matching C# Ema.Batch exactly
- NaN/Inf safe with last-valid substitution
- 65 lines, pseudocode-readable reference implementation
- Co-located ema_test.py (15 tests) + tests/test_ema.py (37 tests)
- All 50 tests pass, 2 cross-validation skipped (no native lib)
2026-03-12 21:02:52 -07:00
Miha Kralj
060649192f
docs: remove C# Implementation Considerations sections, clean up temp scripts, reorganize test files
...
- Remove 'C# Implementation Considerations' sections from 34 indicator .md files
- Delete 29 temp PowerShell scripts (_fix_mojibake.ps1, _hex_scan.ps1, etc.)
- Move test files into tests/ subdirectories for consistent project structure
- Add trader-focused bullet points to indicator documentation
2026-03-12 12:34:16 -07:00
Miha Kralj
8937b0c0fa
fix: CI checkout auth + Wrmse test failure
...
- 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
2026-03-11 20:54:16 -07:00
Miha Kralj
b9783f7c03
docs: sweep all indicator references — fix paths, add missing entries, sort alphabetically
...
_sidebar.md:
- Fix 4 wrong DI/DM paths (minus_di→minusdi, minus_dm→minusdm, plus_di→plusdi, plus_dm→plusdm)
- Sort Dynamics section alphabetically
- Add DECAY and EDECAY to Numerics section
lib/dynamics/_index.md:
- Fix HT_TRENDMODE link (Httrendmode.md→HtTrendmode.md)
- Sort all 25 indicators alphabetically
lib/core/_index.md:
- Sort all 8 indicators alphabetically (HA was out of order)
docs/indicators.md:
- FIR: Replace with all 33 entries sorted
- IIR: Replace with all 36 entries sorted
- Filters: Add SAK (now 37 entries)
- Oscillators: Add 17 missing (BBI, BRAR, COPPOCK, CRSI, CTI, DOSC, ER, ERI, FI, KRI, KST, MSTOCH, PSL, QQE, RVGI, SQUEEZE, TD_SEQ) — now 48 entries
- Dynamics: Sort all 25 entries alphabetically
- Statistics: Add POLYFIT, TRIM, WAVG, WINS — now 35 entries sorted
- Numerics: Add FFT, IFFT — now 31 entries sorted
- Core: Add HA — now 8 entries sorted
Total: 402 indicators across 16 categories, all cross-referenced.
2026-03-11 20:36:36 -07:00
Miha Kralj
33d20f2a18
feat(dynamics): add PlusDI, MinusDI, PlusDM, MinusDM indicators
...
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
2026-03-11 20:21:52 -07:00
Miha Kralj
19f956521d
docs: add PineScript links to all indicator .md files, docsify .pine renderer with comprehensive Prism v6 syntax highlighting
...
- Added PineScript row to property tables in 375 .md files linking to companion .pine files
- Docsify plugin intercepts .pine link clicks, fetches and renders content as syntax-highlighted code blocks
- Comprehensive Prism.languages.pine grammar covering 18 token categories: annotations, types, qualifiers, namespaces, OHLCV builtins, functions, keywords, operators
- Custom CSS tokens using GitHub dark palette for Pine-specific visual differentiation
2026-03-11 15:36:23 -07:00
codefactor-io
567fa89465
[CodeFactor] Apply fixes to commit 4a01f03
2026-03-11 03:35:12 +00:00
Miha Kralj
4a01f03cb4
Merge branch 'dev'
2026-03-10 20:34:18 -07:00
Miha Kralj
7ec79538aa
refactor: move Decay/Edecay from trends_IIR to numerics; update filter signatures
...
- Move lib/trends_IIR/decay/ → lib/numerics/decay/
- Move lib/trends_IIR/edecay/ → lib/numerics/edecay/
- Update Category in Decay.md/Edecay.md from Trends (IIR) to Numerics
- Add DECAY/EDECAY entries to lib/numerics/_index.md and docs/indicators.md
- Update filter signature .md files and .svg assets
- Update trends_IIR signature docs (htit, mama, holt, etc.)
- All 163 tests passing, 0 warnings, 0 errors
2026-03-10 20:33:55 -07:00
Miha Kralj
35a6702b06
fix(docs): correct .md documentation across errors, dynamics, filters, forecasts, momentum, numerics, oscillators, reversals, statistics, trends, volatility, volume
...
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.
2026-03-10 18:38:23 -07:00
Miha Kralj
8906c62dcf
fix(docs): correct warmup values in cycles/channels .md files
...
Cycles:
- ebsw: warmup 1 bar → Math.Max(hpLength, ssfLength) + 3 (default 43)
- homod: warmup 1 bar → maxPeriod * 2 (default 100)
Channels:
- apchannel: warmup 1 bar → ⌈3/alpha⌉ (default 15); params None → alpha; outputs Single → Multiple
- jbands: warmup 1 bar → ⌈20 + 80 × period^0.36⌉
- uchannel: warmup 1 bar → Math.Max(strPeriod, centerPeriod)"
2026-03-10 18:37:19 -07:00
Miha Kralj
031f1b5fe6
feat: add new indicators (Decay, Edecay, MinusDi, MinusDm, PlusDi, PlusDm, Maxindex, Minindex, Sarext) and update pine scripts, core libs, validation tests, and python bindings
2026-03-09 13:45:46 -07:00
Miha Kralj
f192b6d014
merge: bump version to 0.8.4
2026-03-04 08:50:31 -08:00
Miha Kralj
4f22062f78
chore: bump version to 0.8.4
2026-03-04 08:50:29 -08:00
Miha Kralj
6ae79525f6
merge: dev into main - license docs, Python/PineScript guides, API updates
2026-03-03 22:12:25 -08:00
Miha Kralj
f10baa6dfb
docs: add license rationale, Python/PineScript guides, API updates
...
- Add docs/license.md with Apache 2.0 rationale and patent protection analysis
- Add docs/python.md and docs/pinescript.md platform guides
- Expand README license section with disclosure and link to rationale
- Update docs/api.md and docs/architecture.md
- Update Python bindings: helpers, all indicator modules, pyproject.toml
- Add Python tests for Arrow and Polars integration
- Update TValue core type and documentation
- Add fix_length_to_period tooling script
2026-03-03 22:11:35 -08:00
codefactor-io
5957ef065c
[CodeFactor] Apply fixes to commit 7737098
2026-03-03 20:43:16 +00:00