Aktualisiert

ml_dsp Ehlers DSP smoothing toolkit

284
ml_dsp is a small, dependency-free library of digital-signal-processing filters for Pine v6, built around John Ehlers' filter designs. It exists to solve one recurring problem: EMA and SMA reject noise only by adding lag, so a smoother oscillator or score line always turns late. The filters here reject the same bar-to-bar noise with far less phase delay, so smoothed lines keep their timing.

Everything is exported for reuse via import, and every function takes a series float source and a simple int length, so they slot in wherever you currently call ta.ema(src, len) or ta.sma(src, len).

What's inside
superSmoother(src, period) — Ehlers' 2-pole SuperSmoother low-pass. A direct replacement for ta.ema with substantially less lag for comparable smoothing. Good general-purpose smoother for price, oscillators, and score lines.
ultimateSmoother(src, period) — Ehlers' UltimateSmoother (all-pass minus high-pass). Near-zero lag in the passband — the best default when you want to de-jitter an oscillator or signal line without pushing its turns later. This is the smoother most oscillators should use in place of a display EMA.
highPass(src, period) — Ehlers' 2-pole high-pass filter. Removes the slow trend and leaves the cyclic component — a detrender / cycle extractor for building oscillators, or for isolating short-term deviation from a drifting series.
hann(src, length) — Hann-window FIR smoother. A cosine-tapered moving average with a clean frequency response and minimal ringing; a smooth alternative to SMA when you want gentle, artefact-free smoothing.
rms(src, length) — root-mean-square amplitude of a series over a window. The natural amplitude scale for normalization.
rmsNorm(src, length) — the source divided by its own RMS, giving an approximately unit-amplitude series. A robust alternative to min/max or fixed-range scaling when you need a portable amplitude across symbols and regimes.
How to use

Import the library, then call the filter you need:

//version=6
indicator("Example — UltimateSmoother RSI", overlay = false)
import Market_Logic_India/ml_dsp/1 as dsp

length = input.int(14, "RSI length")
smooth = input.int(6, "Smoothing")

raw = ta.rsi(close, length)
smooth_rsi = dsp.ultimateSmoother(raw, smooth) // lag-minimal vs ta.ema(raw, smooth)

plot(raw, "RSI", color = color.new(color.gray, 60))
plot(smooth_rsi, "UltimateSmoother", color = color.new(#2ecc9b, 0))

Swap ultimateSmoother for superSmoother or hann depending on how aggressive you want the smoothing, or use highPass to detrend and rmsNorm to put a series onto a portable amplitude scale.

Notes
Non-repainting: all filters use only closed historical bars (src, src[1], src[2], and their own feedback). No request.*, no future references. The last bar updates intrabar like any indicator, and settles on close.
Warm-up: the recursive filters (SuperSmoother, UltimateSmoother, High-Pass) seed on the first few bars and converge within a handful of bars; treat the very start of history as warm-up.
Types: pass a simple int length (a plain input or constant), not a series int.
Concept credits

The SuperSmoother, UltimateSmoother, and 2-pole High-Pass filter designs are the work of John F. Ehlers (see his books and articles on cycle analysis and DSP for trading). The Hann-window smoother and RMS normalization are standard signal-processing techniques. This library is an original Pine v6 implementation of those public techniques, packaged for reuse; it is not affiliated with, nor endorsed by, the originators.

License

Mozilla Public License 2.0 — as required for TradingView libraries (open source). You are free to import and build on it.
Versionshinweise
v2

Added:
olsBeta(y, x, len)
  Parameters:
    y (float)
    x (float)
    len (simple int)

olsAlpha(y, x, len)
  Parameters:
    y (float)
    x (float)
    len (simple int)

olsR2(y, x, len)
  Parameters:
    y (float)
    x (float)
    len (simple int)

olsResid(y, x, len)
  Parameters:
    y (float)
    x (float)
    len (simple int)

olsResidZ(y, x, len)
  Parameters:
    y (float)
    x (float)
    len (simple int)
Versionshinweise
v3 update note
Adds a regression & KDE toolkit for profiles and fair-value: logReg (log-regression fair value — correct for %-scaled NIFTY), polyReg (degree 1–4 curved fair value via normal equations), binomialSmooth (discrete-Gaussian FIR), epanechnikov (KDE kernel), silvermanBW (Silverman auto-bandwidth). All v1/v2 functions unchanged; import bumps to /3.

v3

Added:
logReg(src, len)
  Parameters:
    src (float)
    len (simple int)

polyReg(src, len, degree)
  Parameters:
    src (float)
    len (simple int)
    degree (simple int)

binomialSmooth(src, length)
  Parameters:
    src (float)
    length (simple int)

epanechnikov(u)
  Parameters:
    u (float)

silvermanBW(sd, n)
  Parameters:
    sd (float)
    n (simple int)

Haftungsausschluss

Die Informationen und Veröffentlichungen sind nicht als Finanz-, Anlage-, Handels- oder andere Arten von Ratschlägen oder Empfehlungen gedacht, die von TradingView bereitgestellt oder gebilligt werden, und stellen diese nicht dar. Lesen Sie mehr in den Nutzungsbedingungen.