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.
This commit is contained in:
Miha Kralj
2026-03-17 11:59:04 -07:00
parent 5fc6e27d8e
commit 7db48e2418
16 changed files with 1468 additions and 0 deletions
+1
View File
@@ -210,6 +210,7 @@ Numbers that bounce between limits. Overbought, oversold, divergence. You know t
| DECO | Ehlers Decycler Oscillator | [deco.pine](../lib/oscillators/deco/deco.pine) |
| DEM | DeMarker Oscillator | [dem.pine](../lib/oscillators/dem/dem.pine) |
| DOSC | Derivative Oscillator | [dosc.pine](../lib/oscillators/dosc/dosc.pine) |
| DSO | Ehlers Deviation-Scaled Oscillator | [dso.pine](../lib/oscillators/dso/dso.pine) |
| DPO | Detrended Price Oscillator | [dpo.pine](../lib/oscillators/dpo/dpo.pine) |
| DYMI | Dynamic Momentum Index | [dymi.pine](../lib/oscillators/dymi/dymi.pine) |
| ER | Efficiency Ratio | [er.pine](../lib/oscillators/er/er.pine) |