2026-01-18 19:02:03 -08:00
# Validation Across TA Libraries
> "Trust, but verify." — Russian proverb (applicable to both Cold War diplomacy and technical indicator libraries)
Every indicator implementation makes implicit claims about correctness. QuanTAlib validates these claims by comparing outputs against established libraries: TA-Lib, Tulip, Skender.Stock.Indicators, and OoplesFinance. Where implementations diverge, the differences get documented.
## Reading the Matrix
| Symbol | Meaning |
| :----: | :------ |
| ✔️ | Validated: outputs match within floating-point tolerance (1e-9) |
| ⚠️ | Partial match: minor discrepancies documented in indicator notes |
| ❔ | Implementation exists but not validated |
| - | No implementation in that library |
**Tolerance rationale:** Financial data uses double precision. Differences below 1e-9 stem from floating-point arithmetic order, not algorithmic divergence.
## Validation Philosophy
Three levels of confidence:
**Level 1: Cross-Library Agreement**
Multiple independent implementations produce identical results. Highest confidence. Most mainstream indicators (SMA, EMA, RSI, MACD) fall here.
**Level 2: Original Source Agreement**
No cross-library validation available, but implementation matches original research paper or patent description. JMA, various proprietary indicators fall here.
**Level 3: Mathematical Correctness Only**
No external reference exists. Implementation verified through unit tests, edge case handling, and mathematical properties (e.g., filter stability, energy preservation). Novel or obscure indicators fall here.
## Technical Indicators
| Indicator | QuanTAlib | TA-Lib | Tulip | Skender | Ooples |
| :-------- | :-------- | :----: | :---: | :-----: | :----: |
| **Aberration Bands** | [Abber ](../lib/channels/abber/abber.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Absolute Price Oscillator** | [Apo ](../lib/oscillators/apo/Apo.md ) | [✔️ ](../lib/oscillators/apo/Apo.md#validation ) | [✔️ ](../lib/oscillators/apo/Apo.md#validation ) | - | [✔️ ](../lib/oscillators/apo/Apo.md#validation ) |
| **Acceleration Bands** | [AccBands ](../lib/channels/accbands/accbands.md ) | [✔️ ](../lib/channels/accbands/accbands.md#validation ) | - | - | - |
| **Acceleration Oscillator** | [Ac ](../lib/oscillators/ac/Ac.md ) | - | - | - | - |
| **Accumulation/Distribution Line** | [Adl ](../lib/volume/adl/adl.md ) | [✔️ ](../lib/volume/adl/adl.md#validation ) | [✔️ ](../lib/volume/adl/adl.md#validation ) | [✔️ ](../lib/volume/adl/adl.md#validation ) | [✔️ ](../lib/volume/adl/adl.md#validation ) |
| **Accumulation/Distribution Oscillator** | [Adosc ](../lib/volume/adosc/adosc.md ) | [✔️ ](../lib/volume/adosc/adosc.md#validation ) | [✔️ ](../lib/volume/adosc/adosc.md#validation ) | [✔️ ](../lib/volume/adosc/adosc.md#validation ) | [✔️ ](../lib/volume/adosc/adosc.md#validation ) |
| **Accumulation Swing Index** | [Asi ](../lib/momentum/asi/Asi.md ) | - | - | - | - |
| **Adaptive Price Zone** | [Apz ](../lib/channels/apz/apz.md ) | - | - | - | - |
| **Andrews' Pitchfork** | [Apchannel ](../lib/channels/apchannel/apchannel.md ) | - | - | [✔️ ](../lib/channels/apchannel/apchannel.md#validation ) | - |
| **Archer Moving Averages Trends** | [Amat ](../lib/dynamics/amat/Amat.md ) | - | - | [✔️ ](../lib/dynamics/amat/Amat.md#validation ) | [✔️ ](../lib/dynamics/amat/Amat.md#validation ) |
2026-01-28 08:56:41 -08:00
| **Archer On-Balance Volume** | [Aobv ](../lib/volume/aobv/Aobv.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Arnaud Legoux Moving Average** | [Alma ](../lib/trends_FIR/alma/Alma.md ) | - | - | [✔️ ](../lib/trends_FIR/alma/Alma.md#validation ) | [✔️ ](../lib/trends_FIR/alma/Alma.md#validation ) |
| **Aroon** | [Aroon ](../lib/dynamics/aroon/Aroon.md ) | [✔️ ](../lib/dynamics/aroon/Aroon.md#validation ) | [✔️ ](../lib/dynamics/aroon/Aroon.md#validation ) | [✔️ ](../lib/dynamics/aroon/Aroon.md#validation ) | - |
| **Aroon Oscillator** | [AroonOsc ](../lib/dynamics/aroonosc/AroonOsc.md ) | [✔️ ](../lib/dynamics/aroonosc/AroonOsc.md#validation ) | [✔️ ](../lib/dynamics/aroonosc/AroonOsc.md#validation ) | [✔️ ](../lib/dynamics/aroonosc/AroonOsc.md#validation ) | - |
| **ATR Bands** | [Atrbands ](../lib/channels/atrbands/atrbands.md ) | [✔️ ](../lib/channels/atrbands/atrbands.md#validation ) | - | [✔️ ](../lib/channels/atrbands/atrbands.md#validation ) | - |
2026-01-18 19:02:03 -08:00
| **Adaptive FIR Moving Average** | [Afirma ](../lib/forecasts/afirma/Afirma.md ) | - | - | - | - |
2026-02-18 19:08:15 -08:00
| **Ehlers Adaptive Laguerre Filter** | [ALaguerre ](../lib/filters/alaguerre/ALaguerre.md ) | - | - | - | - |
2026-02-23 17:27:35 -08:00
| **Ehlers Automatic Gain Control** | [Agc ](../lib/filters/agc/Agc.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Average Daily Range** | [Adr ](../lib/volatility/adr/Adr.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Average Directional Index** | [Adx ](../lib/dynamics/adx/Adx.md ) | [✔️ ](../lib/dynamics/adx/Adx.md#validation ) | [✔️ ](../lib/dynamics/adx/Adx.md#validation ) | [✔️ ](../lib/dynamics/adx/Adx.md#validation ) | [✔️ ](../lib/dynamics/adx/Adx.md#validation ) |
| **Average Directional Movement Rating** | [Adxr ](../lib/dynamics/adxr/Adxr.md ) | [✔️ ](../lib/dynamics/adxr/Adxr.md#validation ) | [✔️ ](../lib/dynamics/adxr/Adxr.md#validation ) | - | - |
| **Average True Range** | [Atr ](../lib/volatility/atr/atr.md ) | [✔️ ](../lib/volatility/atr/atr.md#validation ) | [✔️ ](../lib/volatility/atr/atr.md#validation ) | [✔️ ](../lib/volatility/atr/atr.md#validation ) | [✔️ ](../lib/volatility/atr/atr.md#validation ) |
| **Average True Range Normalized [0,1]** | [Atrn ](../lib/volatility/atrn/Atrn.md ) | - | - | [✔️ ](../lib/volatility/atrn/Atrn.md#validation ) | - |
| **Average Price** | [Avgprice ](../lib/core/avgprice/Avgprice.md ) | [✔️ ](../lib/core/avgprice/Avgprice.md#validation ) | - | - | - |
| **Awesome Oscillator** | [Ao ](../lib/oscillators/ao/Ao.md ) | - | [✔️ ](../lib/oscillators/ao/Ao.md#validation ) | [✔️ ](../lib/oscillators/ao/Ao.md#validation ) | [✔️ ](../lib/oscillators/ao/Ao.md#validation ) |
| **Balance of Power** | [Bop ](../lib/momentum/bop/Bop.md ) | [✔️ ](../lib/momentum/bop/Bop.md#validation ) | [✔️ ](../lib/momentum/bop/Bop.md#validation ) | [✔️ ](../lib/momentum/bop/Bop.md#validation ) | [✔️ ](../lib/momentum/bop/Bop.md#validation ) |
2026-02-18 11:55:48 -08:00
| **Baxter-King Band-Pass Filter** | [BaxterKing ](../lib/filters/baxterking/BaxterKing.md ) | - | - | - | - |
| **Christiano-Fitzgerald Filter** | [Cfitz ](../lib/filters/cfitz/Cfitz.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Bollinger Bands** | [Bbands ](../lib/channels/bbands/Bbands.md ) | [✔️ ](../lib/channels/bbands/Bbands.md#validation ) | [✔️ ](../lib/channels/bbands/Bbands.md#validation ) | [✔️ ](../lib/channels/bbands/Bbands.md#validation ) | [✔️ ](../lib/channels/bbands/Bbands.md#validation ) |
2026-02-23 17:27:35 -08:00
| **Bessel Filter** | [Bessel ](../lib/filters/bessel/Bessel.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Bessel-Weighted MA** | [Bwma ](../lib/trends_FIR/bwma/Bwma.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Beta Coefficient** | [Beta ](../lib/statistics/beta/Beta.md ) | [⚠️ ](../lib/statistics/beta/Beta.md#validation "TALib uses different return-series formula; diverges after warmup" ) | - | [✔️ ](../lib/statistics/beta/Beta.md#validation ) | - |
2026-02-26 09:59:44 -08:00
| **Beta Distribution** | [Betadist ](../lib/numerics/betadist/Betadist.md ) | - | - | - | - |
| **Binomial Distribution** | [Binomdist ](../lib/numerics/binomdist/Binomdist.md ) | - | - | - | - |
| **Exponential Distribution** | [Expdist ](../lib/numerics/expdist/Expdist.md ) | - | - | - | - |
| **F-Distribution** | [Fdist ](../lib/numerics/fdist/Fdist.md ) | - | - | - | - |
| **Gamma Distribution** | [Gammadist ](../lib/numerics/gammadist/Gammadist.md ) | - | - | - | - |
| **Log-Normal Distribution** | [Lognormdist ](../lib/numerics/lognormdist/Lognormdist.md ) | - | - | - | - |
| **Normal Distribution** | [Normdist ](../lib/numerics/normdist/Normdist.md ) | - | - | - | - |
| **Poisson Distribution** | [Poissondist ](../lib/numerics/poissondist/Poissondist.md ) | - | - | - | - |
| **Student's t-Distribution** | [Tdist ](../lib/numerics/tdist/Tdist.md ) | - | - | - | - |
| **Weibull Distribution** | [Weibulldist ](../lib/numerics/weibulldist/Weibulldist.md ) | - | - | - | - |
| **Continuous Wavelet Transform** | [Cwt ](../lib/numerics/cwt/Cwt.md ) | - | - | - | - |
| **Discrete Wavelet Transform** | [Dwt ](../lib/numerics/dwt/Dwt.md ) | - | - | - | - |
2026-02-23 17:27:35 -08:00
| **Bias** | [Bias ](../lib/momentum/bias/Bias.md ) | - | - | - | - |
| **Bilateral Filter** | [Bilateral ](../lib/filters/bilateral/Bilateral.md ) | - | - | - | - |
| **Blackman Window MA** | [Blma ](../lib/trends_FIR/blma/Blma.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Bollinger %B** | [Bbb ](../lib/oscillators/bbb/Bbb.md ) | - | - | [✔️ ](../lib/oscillators/bbb/Bbb.md#validation ) | [⚠️ ](../lib/oscillators/bbb/Bbb.md#validation "structural test only; Ooples uses different %B band formula" ) |
| **Bollinger Band Squeeze** | [Bbs ](../lib/oscillators/bbs/Bbs.md ) | - | - | [✔️ ](../lib/oscillators/bbs/Bbs.md#validation ) | [⚠️ ](../lib/oscillators/bbs/Bbs.md#validation "structural test only; Ooples measures different squeeze ratio" ) |
| **Bollinger Band Width** | [Bbw ](../lib/volatility/bbw/Bbw.md ) | - | - | [✔️ ](../lib/volatility/bbw/Bbw.md#validation ) | [⚠️ ](../lib/volatility/bbw/Bbw.md#validation "structural test only; Ooples measures absolute width not ratio" ) |
| **Bollinger Band Width Normalized** | [Bbwn ](../lib/volatility/bbwn/Bbwn.md ) | - | - | - | - |
| **Bollinger Band Width Percentile** | [Bbwp ](../lib/volatility/bbwp/Bbwp.md ) | - | - | - | - |
| **Ehlers 2-Pole Butterworth Filter** | [Butter2 ](../lib/filters/butter2/Butter2.md ) | - | - | - | [✔️ ](../lib/filters/butter2/Butter2.md#validation ) |
2026-02-20 18:44:56 -08:00
| **Ehlers 3-Pole Butterworth Filter** | [Butter3 ](../lib/filters/butter3/Butter3.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Camarilla Pivot Points** | [Pivotcam ](../lib/reversals/pivotcam/Pivotcam.md ) | - | - | - | - |
| **Chandelier Exit** | [Chandelier ](../lib/reversals/chandelier/Chandelier.md ) | - | - | [✔️ ](../lib/reversals/chandelier/Chandelier.md#validation ) | - |
2026-02-13 21:44:45 -08:00
| **Chande Kroll Stop** | [Ckstop ](../lib/reversals/ckstop/Ckstop.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Chaikin Money Flow** | [Cmf ](../lib/volume/cmf/Cmf.md ) | - | - | [✔️ ](../lib/volume/cmf/Cmf.md#validation ) | [⚠️ ](../lib/volume/cmf/Cmf.md#validation "structural test only; Ooples uses different lookback period" ) |
| **Chaikin Volatility** | [Cvi ](../lib/volatility/cvi/Cvi.md ) | - | [⚠️ ](../lib/volatility/cvi/Cvi.md#validation "Tulip implements Chande VIDA; QuanTAlib implements Chaikin volatility" ) | - | [⚠️ ](../lib/volatility/cvi/Cvi.md#validation "Ooples implements Chande VIDA; QuanTAlib implements Chaikin volatility" ) |
| **Chande Forecast Oscillator** | [Cfo ](../lib/oscillators/cfo/Cfo.md ) | - | - | [✔️ ](../lib/oscillators/cfo/Cfo.md#validation ) | - |
| **Chande Momentum Oscillator** | [Cmo ](../lib/momentum/cmo/Cmo.md ) | [⚠️ ](../lib/momentum/cmo/Cmo.md#validation "TALib uses Wilder smoothing; QuanTAlib uses simple sum" ) | [✔️ ](../lib/momentum/cmo/Cmo.md#validation ) | [✔️ ](../lib/momentum/cmo/Cmo.md#validation ) | [✔️ ](../lib/momentum/cmo/Cmo.md#validation ) |
| **Chebyshev Type I Filter** | [Cheby1 ](../lib/filters/cheby1/Cheby1.md ) | - | - | - | - |
| **Chebyshev Type II Filter** | [Cheby2 ](../lib/filters/cheby2/Cheby2.md ) | - | - | - | - |
| **Choppiness Index** | [Chop ](../lib/dynamics/chop/Chop.md ) | - | - | [✔️ ](../lib/dynamics/chop/Chop.md#validation ) | [⚠️ ](../lib/dynamics/chop/Chop.md#validation "structural test only; Ooples uses different ATR normalization" ) |
| **Close-to-Close Volatility** | [Ccv ](../lib/volatility/ccv/Ccv.md ) | - | - | - | - |
| **Cointegration** | [Cointegration ](../lib/statistics/cointegration/Cointegration.md ) | - | - | - | - |
| **Commodity Channel Index** | [Cci ](../lib/momentum/cci/Cci.md ) | [✔️ ](../lib/momentum/cci/Cci.md#validation ) | [✔️ ](../lib/momentum/cci/Cci.md#validation ) | [✔️ ](../lib/momentum/cci/Cci.md#validation ) | - |
2026-02-23 17:27:35 -08:00
| **Composite Fractal Behavior** | [Cfb ](../lib/momentum/cfb/Cfb.md ) | - | - | - | - |
2026-02-01 17:48:16 -08:00
| **Conditional Volatility** | [Cv ](../lib/volatility/cv/Cv.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Convolution Moving Average** | [Conv ](../lib/trends_FIR/conv/Conv.md ) | [✔️ ](../lib/trends_FIR/conv/Conv.md#validation ) | [✔️ ](../lib/trends_FIR/conv/Conv.md#validation ) | [✔️ ](../lib/trends_FIR/conv/Conv.md#validation ) | [✔️ ](../lib/trends_FIR/conv/Conv.md#validation ) |
2026-02-20 18:44:56 -08:00
| **Coral Trend Filter** | [Coral ](../lib/trends_IIR/coral/Coral.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Correlation** | [Correlation ](../lib/statistics/correlation/Correlation.md ) | [✔️ ](../lib/statistics/correlation/Correlation.md#validation ) | - | [✔️ ](../lib/statistics/correlation/Correlation.md#validation ) | - |
2026-01-18 19:02:03 -08:00
| **Cumulative Moving Average** | [Cma ](../lib/statistics/cma/Cma.md ) | - | - | - | - |
2026-01-21 14:41:31 -05:00
| **Decay Min-Max Channel** | [Decaychannel ](../lib/channels/decaychannel/decaychannel.md ) | - | - | - | - |
2026-02-18 19:08:15 -08:00
| **Ehlers Decycler** | [Decycler ](../lib/trends_IIR/decycler/Decycler.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **DeMark Pivot Points** | [Pivotdem ](../lib/reversals/pivotdem/Pivotdem.md ) | - | - | - | - |
| **DeMarker Oscillator** | [Dem ](../lib/oscillators/dem/Dem.md ) | - | - | - | [⚠️ ](../lib/oscillators/dem/Dem.md#validation "structural test only; Ooples DeMarker uses different smoothing" ) |
| **Detrended Price Oscillator** | [Dpo ](../lib/oscillators/dpo/Dpo.md ) | - | [⚠️ ](../lib/oscillators/dpo/Dpo.md#validation "Tulip shifts n/2+1 bars; QuanTAlib shifts period/2 bars" ) | - | [⚠️ ](../lib/oscillators/dpo/Dpo.md#validation "structural test only; period alignment differs from Ooples" ) |
| **Ehlers Detrended Synthetic Price** | [Dsp ](../lib/cycles/dsp/Dsp.md ) | - | - | - | [⚠️ ](../lib/cycles/dsp/Dsp.md#validation "structural test only; Ooples DSP uses different detrending" ) |
| **Deviation-Scaled MA** | [Dsma ](../lib/trends_IIR/dsma/Dsma.md ) | - | - | - | [⚠️ ](../lib/trends_IIR/dsma/Dsma.md#validation "structural test only; Ooples uses different deviation scaling" ) |
| **Directional Movement Index** | [Dx ](../lib/dynamics/dx/Dx.md ) | [✔️ ](../lib/dynamics/dx/Dx.md#validation ) | [✔️ ](../lib/dynamics/dx/Dx.md#validation ) | [✔️ ](../lib/dynamics/dx/Dx.md#validation ) | [✔️ ](../lib/dynamics/dx/Dx.md#validation ) |
2026-02-23 17:27:35 -08:00
| **Directional Movement Index (Jurik)** | [Dmx ](../lib/dynamics/dmx/Dmx.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Dirty Data Detection** | Dirty | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Donchian Channels** | [Dchannel ](../lib/channels/dchannel/Dchannel.md ) | - | - | [✔️ ](../lib/channels/dchannel/Dchannel.md#validation ) | [⚠️ ](../lib/channels/dchannel/Dchannel.md#validation "structural test only; Ooples Donchian uses different channel width" ) |
| **Double Exponential Moving Average** | [Dema ](../lib/trends_IIR/dema/Dema.md ) | [✔️ ](../lib/trends_IIR/dema/Dema.md#validation ) | [✔️ ](../lib/trends_IIR/dema/Dema.md#validation ) | [✔️ ](../lib/trends_IIR/dema/Dema.md#validation ) | [✔️ ](../lib/trends_IIR/dema/Dema.md#validation ) |
| **Double Weighted Moving Average** | [Dwma ](../lib/trends_FIR/dwma/Dwma.md ) | [✔️ ](../lib/trends_FIR/dwma/Dwma.md#validation ) | [✔️ ](../lib/trends_FIR/dwma/Dwma.md#validation ) | [✔️ ](../lib/trends_FIR/dwma/Dwma.md#validation ) | - |
| **Dynamic Momentum Index** | [Dymoi ](../lib/oscillators/dymoi/Dymoi.md ) | - | - | - | [⚠️ ](../lib/oscillators/dymoi/Dymoi.md#validation "structural test only; Ooples uses different dynamic period logic" ) |
| **Ease of Movement** | [Eom ](../lib/volume/eom/Eom.md ) | - | [✔️ ](../lib/volume/eom/Eom.md#validation ) | - | - |
2026-02-04 11:43:59 -08:00
| **Ehlers Autocorrelation Periodogram** | [Eacp ](../lib/cycles/eacp/eacp.md ) | - | - | - | - |
2026-02-16 21:26:44 -08:00
| **BandPass Filter** | [Bpf ](../lib/filters/bpf/Bpf.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Ehlers Center of Gravity** | [Cg ](../lib/cycles/cg/Cg.md ) | - | - | - | [⚠️ ](../lib/cycles/cg/Cg.md#validation "structural test only; Ooples CG uses different weighting scheme" ) |
2026-02-21 20:45:38 -08:00
| **Ehlers Correlation Cycle** | [Ccor ](../lib/cycles/ccor/Ccor.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Ehlers Cyber Cycle** | [Ccyc ](../lib/cycles/ccyc/Ccyc.md ) | - | - | - | [⚠️ ](../lib/cycles/ccyc/Ccyc.md#validation "structural test only; Ooples Cyber Cycle uses different alpha" ) |
2026-02-18 11:55:48 -08:00
| **Ehlers Distance Coefficient Filter** | [Edcf ](../lib/filters/edcf/Edcf.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Ehlers Even Better Sinewave** | [Ebsw ](../lib/cycles/ebsw/ebsw.md ) | - | - | - | [⚠️ ](../lib/cycles/ebsw/ebsw.md#validation "structural test only; Ooples EBSW uses different pole filter" ) |
| **Ehlers Fractal Adaptive MA** | [Frama ](../lib/trends_IIR/frama/Frama.md ) | - | - | - | [⚠️ ](../lib/trends_IIR/frama/Frama.md#validation "structural test only; Ooples FRAMA uses different fractal calc" ) |
| **Ehlers Highpass Filter** | [Hpf ](../lib/filters/hpf/Hpf.md ) | - | - | - | [⚠️ ](../lib/filters/hpf/Hpf.md#validation "structural test only; Ooples HPF uses different cutoff mapping" ) |
| **Ehlers Phasor Analysis** | [Phasor ](../lib/cycles/ht_phasor/HtPhasor.md ) | - | - | - | - |
| **Ehlers Sine Wave** | [HtSine ](../lib/cycles/ht_sine/HtSine.md ) | [✔️ ](../lib/cycles/ht_sine/HtSine.md#validation ) | - | - | - |
| **Ehlers SSF-Based Detrended Synthetic Price** | [Ssfdsp ](../lib/cycles/ssfdsp/Ssfdsp.md ) | - | - | - | - |
| **Ehlers 2-Pole Super Smooth Filter** | [Ssf2 ](../lib/filters/ssf2/Ssf2.md ) | - | - | - | [✔️ ](../lib/filters/ssf2/Ssf2.md#validation ) |
2026-02-20 18:44:56 -08:00
| **Ehlers 3-Pole Super Smooth Filter** | [Ssf3 ](../lib/filters/ssf3/Ssf3.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Ehlers Ultrasmooth Filter** | [Usf ](../lib/filters/usf/Usf.md ) | - | - | - | - |
| **Elliptic (Cauer) Filter** | [Elliptic ](../lib/filters/elliptic/Elliptic.md ) | - | - | - | - |
| **Exponential Moving Average** | [Ema ](../lib/trends_IIR/ema/Ema.md ) | [✔️ ](../lib/trends_IIR/ema/Ema.md#validation ) | [✔️ ](../lib/trends_IIR/ema/Ema.md#validation ) | [✔️ ](../lib/trends_IIR/ema/Ema.md#validation ) | [✔️ ](../lib/trends_IIR/ema/Ema.md#validation ) |
| **Exponential Transformation** | [Exptrans ](../lib/numerics/exptrans/Exptrans.md ) | - | - | - | - |
| **Exponential Weighted MA Volatility** | [Ewma ](../lib/volatility/ewma/Ewma.md ) | - | - | - | - |
2026-02-26 09:59:44 -08:00
| **Elder's Thermometer** | [Etherm ](../lib/volatility/etherm/Etherm.md ) | - | - | - | - |
2026-02-16 21:26:44 -08:00
| **Extended Traditional Pivots** | [Pivotext ](../lib/reversals/pivotext/Pivotext.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Fibonacci Pivot Points** | [Pivotfib ](../lib/reversals/pivotfib/Pivotfib.md ) | - | - | - | - |
| **Ehlers Fisher Transform** | [Fisher ](../lib/oscillators/fisher/Fisher.md ) | - | [⚠️ ](../lib/oscillators/fisher/Fisher.md#validation "Tulip Fisher uses close-based input; QuanTAlib uses Ehlers HL2+EMA" ) | - | [⚠️ ](../lib/oscillators/fisher/Fisher.md#validation "Ooples Fisher is HL2-based Ehlers variant; different inputs and alpha" ) |
| **Force Index** | [Efi ](../lib/volume/efi/Efi.md ) | - | - | [✔️ ](../lib/volume/efi/Efi.md#validation ) | [✔️ ](../lib/volume/efi/Efi.md#validation ) |
| **Fractal Chaos Bands** | [Fcb ](../lib/channels/fcb/fcb.md ) | - | - | [✔️ ](../lib/channels/fcb/fcb.md#validation ) | [⚠️ ](../lib/channels/fcb/fcb.md#validation "structural test only; Ooples FCB uses different fractal width" ) |
2026-02-01 17:48:16 -08:00
| **Garman-Klass Volatility** | [Gkv ](../lib/volatility/gkv/Gkv.md ) | - | - | - | - |
2026-02-26 09:59:44 -08:00
| **Gator Oscillator** | [Gator ](../lib/oscillators/gator/Gator.md ) | - | - | - | - |
| **Gann High-Low Activator** | [Ghla ](../lib/dynamics/ghla/Ghla.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Gaussian Filter** | [Gauss ](../lib/filters/gauss/Gauss.md ) | - | - | - | [⚠️ ](../lib/filters/gauss/Gauss.md#validation "structural test only; Ooples Gaussian uses different sigma mapping" ) |
| **Gaussian-Weighted MA** | [Gwma ](../lib/trends_FIR/gwma/Gwma.md ) | - | - | - | - |
2026-02-15 21:59:03 -08:00
| **Geometric Mean** | [Geomean ](../lib/statistics/geomean/Geomean.md ) | - | - | - | - |
| **Harmonic Mean** | [Harmean ](../lib/statistics/harmean/Harmean.md ) | - | - | - | - |
| **Granger Causality Test** | [Granger ](../lib/statistics/granger/Granger.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Hamming Window MA** | [Hamma ](../lib/trends_FIR/hamma/Hamma.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Hann FIR Filter** | [Hann ](../lib/filters/hann/Hann.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Hanning Window MA** | [Hanma ](../lib/trends_FIR/hanma/Hanma.md ) | - | - | - | - |
2026-02-01 17:48:16 -08:00
| **High-Low Volatility (Parkinson)** | [Hlv ](../lib/volatility/hlv/Hlv.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Highest value** | [Highest ](../lib/numerics/highest/Highest.md ) | [✔️ ](../lib/numerics/highest/Highest.md#validation ) | [✔️ ](../lib/numerics/highest/Highest.md#validation ) | - | - |
| **Ehlers Hilbert Transform Dominant Cycle Period** | [HtDcPeriod ](../lib/cycles/ht_dcperiod/HtDcperiod.md ) | [✔️ ](../lib/cycles/ht_dcperiod/HtDcperiod.md#validation ) | - | - | - |
| **Ehlers Hilbert Transform Dominant Cycle Phase** | [HtDcPhase ](../lib/cycles/ht_dcphase/HtDcphase.md ) | [✔️ ](../lib/cycles/ht_dcphase/HtDcphase.md#validation ) | - | - | - |
| **Ehlers Hilbert Transform Instantaneous Trend** | [Htit ](../lib/trends_IIR/htit/Htit.md ) | [✔️ ](../lib/trends_IIR/htit/Htit.md#validation ) | - | [✔️ ](../lib/trends_IIR/htit/Htit.md#validation ) | [✔️ ](../lib/trends_IIR/htit/Htit.md#validation ) |
| **Ehlers Hilbert Transform Phasor Components** | [HtPhasor ](../lib/cycles/ht_phasor/HtPhasor.md ) | [✔️ ](../lib/cycles/ht_phasor/HtPhasor.md#validation ) | - | - | - |
| **Ehlers Hilbert Transform SineWave** | [HtSine ](../lib/cycles/ht_sine/HtSine.md ) | [✔️ ](../lib/cycles/ht_sine/HtSine.md#validation ) | - | - | - |
| **Ehlers Hilbert Transform Trend vs Cycle Mode** | [Ht_trendmode ](../lib/dynamics/ht_trendmode/HtTrendmode.md ) | [✔️ ](../lib/dynamics/ht_trendmode/HtTrendmode.md#validation ) | - | - | - |
| **Historical Volatility (Close-to-Close)** | [Hv ](../lib/volatility/hv/Hv.md ) | - | - | [✔️ ](../lib/volatility/hv/Hv.md#validation ) | - |
2026-01-18 19:02:03 -08:00
| **Hodrick-Prescott Filter** | [Hp ](../lib/filters/hp/Hp.md ) | - | - | - | - |
2026-02-20 18:44:56 -08:00
| **Holt Exponential Smoothing** | [Holt ](../lib/trends_IIR/holt/Holt.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Holt Weighted MA** | [Hwma ](../lib/trends_IIR/hwma/Hwma.md ) | - | - | - | - |
| **Ehlers Homodyne Discriminator** | [Homod ](../lib/cycles/homod/homod.md ) | - | - | - | [⚠️ ](../lib/cycles/homod/homod.md#validation "structural test only; Ooples Homodyne uses different discriminator" ) |
| **Huber Loss** | [Huber ](../lib/errors/huber/Huber.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Hull Exponential MA** | [Hema ](../lib/trends_IIR/hema/Hema.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Hull Moving Average** | [Hma ](../lib/trends_FIR/hma/Hma.md ) | - | [✔️ ](../lib/trends_FIR/hma/Hma.md#validation ) | [✔️ ](../lib/trends_FIR/hma/Hma.md#validation ) | [⚠️ ](../lib/trends_FIR/hma/Hma.md#external-library-discrepancies ) |
| **Hurst Exponent** | [Hurst ](../lib/statistics/hurst/Hurst.md ) | - | - | - | - |
| **Ichimoku Cloud** | [Ichimoku ](../lib/dynamics/ichimoku/Ichimoku.md ) | - | - | [✔️ ](../lib/dynamics/ichimoku/Ichimoku.md#validation ) | [⚠️ ](../lib/dynamics/ichimoku/Ichimoku.md#validation "structural test only; Ooples cloud calc uses different shift period" ) |
2026-02-13 21:44:45 -08:00
| **Impulse (Elder)** | [Impulse ](../lib/dynamics/impulse/Impulse.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Inertia** | [Inertia ](../lib/oscillators/inertia/Inertia.md ) | - | - | - | [⚠️ ](../lib/oscillators/inertia/Inertia.md#validation "structural test only; Ooples Inertia uses different regression length" ) |
| **Interquartile Range** | [Iqr ](../lib/statistics/iqr/Iqr.md ) | - | - | - | - |
2026-01-28 08:56:41 -08:00
| **Intraday Intensity Index** | [Iii ](../lib/volume/iii/Iii.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Intraday Momentum Index** | Imi | - | - | - | - |
2026-02-16 16:54:36 -08:00
| **Jarque-Bera Test** | [Jb ](../lib/statistics/jb/Jb.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Jurik Moving Average** | [Jma ](../lib/trends_IIR/jma/Jma.md ) | - | - | - | [⚠️ ](../lib/trends_IIR/jma/Jma.md#validation "structural test only; Ooples JMA uses different phase parameter" ) |
2026-02-02 13:42:47 -08:00
| **Jurik Volatility** | [Jvolty ](../lib/volatility/jvolty/Jvolty.md ) | - | - | - | - |
2026-01-21 14:41:31 -05:00
| **Jurik Adaptive Envelope Bands** | [Jbands ](../lib/channels/jbands/Jbands.md ) | - | - | - | - |
2026-02-02 13:42:47 -08:00
| **Jurik Volatility Normalized [0,100]** | [Jvoltyn ](../lib/volatility/jvoltyn/Jvoltyn.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Kalman Filter** | [Kalman ](../lib/filters/kalman/Kalman.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Kaufman Adaptive Moving Average** | [Kama ](../lib/trends_IIR/kama/Kama.md ) | [✔️ ](../lib/trends_IIR/kama/Kama.md#validation ) | [✔️ ](../lib/trends_IIR/kama/Kama.md#validation ) | [✔️ ](../lib/trends_IIR/kama/Kama.md#validation ) | [✔️ ](../lib/trends_IIR/kama/Kama.md#validation ) |
2026-02-12 14:29:54 -08:00
| **KDJ Indicator** | [Kdj ](../lib/oscillators/kdj/Kdj.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Keltner Channel** | [Kchannel ](../lib/channels/kchannel/kchannel.md ) | - | - | [✔️ ](../lib/channels/kchannel/kchannel.md#validation ) | [⚠️ ](../lib/channels/kchannel/kchannel.md#validation "structural test only; Ooples Keltner uses different ATR multiplier" ) |
2026-02-16 16:54:36 -08:00
| **Kendall Rank Correlation** | [Kendall ](../lib/statistics/kendall/Kendall.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Klinger Volume Oscillator** | [Kvo ](../lib/volume/kvo/Kvo.md ) | - | [✔️ ](../lib/volume/kvo/Kvo.md#validation ) | [✔️ ](../lib/volume/kvo/Kvo.md#validation ) | [⚠️ ](../lib/volume/kvo/Kvo.md#validation "structural test only; Ooples KVO uses different volume weighting" ) |
2026-02-16 16:54:36 -08:00
| **Kurtosis** | [Kurtosis ](../lib/statistics/kurtosis/Kurtosis.md ) | - | - | - | [✔️ ](../lib/statistics/kurtosis/Kurtosis.md#validation ) |
2026-02-18 19:08:15 -08:00
| **Ehlers Laguerre Filter** | [Laguerre ](../lib/filters/laguerre/Laguerre.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Ehlers Laguerre RSI** | [Lrsi ](../lib/oscillators/lrsi/Lrsi.md ) | - | - | - | [⚠️ ](../lib/oscillators/lrsi/Lrsi.md#validation "structural test only; Ooples Laguerre RSI uses different gamma" ) |
2026-02-18 11:55:48 -08:00
| **Least Mean Squares** | [Lms ](../lib/filters/lms/Lms.md ) | - | - | - | - |
| **Recursive Least Squares** | [Rls ](../lib/filters/rls/Rls.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Least Squares Moving Average** | [Lsma ](../lib/trends_FIR/lsma/Lsma.md ) | - | - | [✔️ ](../lib/trends_FIR/lsma/Lsma.md#validation ) | [⚠️ ](../lib/trends_FIR/lsma/Lsma.md#validation "structural test only; Ooples LSMA uses different regression offset" ) |
| **Linear Regression** | [LinReg ](../lib/statistics/linreg/LinReg.md ) | - | - | [✔️ ](../lib/statistics/linreg/LinReg.md#validation ) | [⚠️ ](../lib/statistics/linreg/LinReg.md#validation ) |
| **Linear Transformation** | [Lineartrans ](../lib/numerics/lineartrans/Lineartrans.md ) | - | - | - | - |
| **Linear Trend MA** | [Ltma ](../lib/trends_IIR/ltma/Ltma.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **LOESS/LOWESS Smoothing** | [Loess ](../lib/filters/loess/Loess.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Logarithmic Transformation** | [Logtrans ](../lib/numerics/logtrans/Logtrans.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Logistic Function** | [Sigmoid ](../lib/numerics/sigmoid/Sigmoid.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Lowest value** | [Lowest ](../lib/numerics/lowest/Lowest.md ) | [✔️ ](../lib/numerics/lowest/Lowest.md#validation ) | [✔️ ](../lib/numerics/lowest/Lowest.md#validation ) | - | - |
| **Lunar Phase** | [Lunar ](../lib/cycles/lunar/Lunar.md ) | - | - | - | - |
| **Market Facilitation Index** | [Marketfi ](../lib/oscillators/marketfi/Marketfi.md ) | - | [✔️ ](../lib/oscillators/marketfi/Marketfi.md#validation ) | - | - |
| **Mass Index** | [Massi ](../lib/volatility/massi/Massi.md ) | - | [⚠️ ](../lib/volatility/massi/Massi.md#validation "structural test only; Tulip Mass Index uses single EMA period vs dual" ) | [⚠️ ](../lib/volatility/massi/Massi.md#validation "structural test only; Skender Mass Index uses different EMA seeding" ) | [⚠️ ](../lib/volatility/massi/Massi.md#validation "structural test only; Ooples Mass Index uses different EMA seeding" ) |
| **McGinley Dynamic** | [Mgdi ](../lib/trends_IIR/mgdi/Mgdi.md ) | - | - | [✔️ ](../lib/trends_IIR/mgdi/Mgdi.md#validation ) | [✔️ ](../lib/trends_IIR/mgdi/Mgdi.md#validation ) |
| **Mean Absolute Error** | [Mae ](../lib/errors/mae/Mae.md ) | - | - | - | - |
| **Mean Absolute Percentage Difference** | [Mapd ](../lib/errors/mapd/Mapd.md ) | - | - | - | - |
| **Mean Absolute Percentage Error** | [Mape ](../lib/errors/mape/Mape.md ) | - | - | - | - |
| **Mean Absolute Scaled Error** | [Mase ](../lib/errors/mase/Mase.md ) | - | - | - | - |
| **Mean Error** | [Me ](../lib/errors/me/Me.md ) | - | - | - | - |
| **Mean Percentage Error** | [Mpe ](../lib/errors/mpe/Mpe.md ) | - | - | - | - |
| **Mean Squared Error** | [Mse ](../lib/errors/mse/Mse.md ) | - | - | - | - |
| **Mean Squared Logarithmic Error** | [Msle ](../lib/errors/msle/Msle.md ) | - | - | - | - |
| **Ehlers MESA Adaptive Moving Average** | [Mama ](../lib/trends_IIR/mama/Mama.md ) | [⚠️ ](../lib/trends_IIR/mama/Mama.md#validation "TALib uses Atan half-quadrant approximation; QuanTAlib uses Atan2 full-quadrant" ) | - | [✔️ ](../lib/trends_IIR/mama/Mama.md#validation ) | [✔️ ](../lib/trends_IIR/mama/Mama.md#validation ) |
| **Median Price** | [Medprice ](../lib/core/medprice/Medprice.md ) | [✔️ ](../lib/core/medprice/Medprice.md#validation ) | - | - | - |
| **Mid Price** | [Midprice ](../lib/core/midprice/Midprice.md ) | [✔️ ](../lib/core/midprice/Midprice.md#validation ) | - | - | - |
| **Midpoint** | [Midpoint ](../lib/core/midpoint/Midpoint.md ) | [✔️ ](../lib/core/midpoint/Midpoint.md#validation ) | - | - | - |
| **Min-Max Channel** | [Mmchannel ](../lib/channels/mmchannel/mmchannel.md ) | - | - | [✔️ ](../lib/channels/mmchannel/mmchannel.md#validation ) | - |
2026-01-18 19:02:03 -08:00
| **Min-Max Scaling (Normalization)** | [Normalize ](../lib/numerics/normalize/Normalize.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Mode (Most Frequent)** | [Mode ](../lib/statistics/mode/Mode.md ) | - | - | - | - |
2026-02-23 17:27:35 -08:00
| **Modular Filter** | [Modf ](../lib/filters/modf/Modf.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Modified MA** | [Mma ](../lib/trends_IIR/mma/Mma.md ) | - | - | - | - |
2026-02-21 20:45:38 -08:00
| **Natural Moving Average** | [Nma ](../lib/trends_IIR/nma/Nma.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Momentum** | [Mom ](../lib/momentum/mom/Mom.md ) | [✔️ ](../lib/momentum/mom/Mom.md#validation ) | [✔️ ](../lib/momentum/mom/Mom.md#validation ) | [✔️ ](../lib/momentum/mom/Mom.md#validation ) | [⚠️ ](../lib/momentum/mom/Mom.md#validation "Ooples Mom = n-bar change multiplied by 100 vs absolute change" ) |
| **Momentum change; 2nd derivative** | [Accel ](../lib/numerics/accel/Accel.md ) | - | - | - | - |
| **Money Flow Index** | [Mfi ](../lib/volume/mfi/Mfi.md ) | [✔️ ](../lib/volume/mfi/Mfi.md#validation ) | - | [✔️ ](../lib/volume/mfi/Mfi.md#validation ) | [✔️ ](../lib/volume/mfi/Mfi.md#validation ) |
2026-01-18 19:02:03 -08:00
| **Moon Phase** | Moon | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Moving Average Convergence/Divergence** | [Macd ](../lib/momentum/macd/Macd.md ) | [✔️ ](../lib/momentum/macd/Macd.md#validation ) | [✔️ ](../lib/momentum/macd/Macd.md#validation ) | [✔️ ](../lib/momentum/macd/Macd.md#validation ) | [✔️ ](../lib/momentum/macd/Macd.md#validation ) |
| **Moving Average Envelopes** | [Maenv ](../lib/channels/maenv/maenv.md ) | - | - | [✔️ ](../lib/channels/maenv/maenv.md#validation ) | [⚠️ ](../lib/channels/maenv/maenv.md#validation "structural test only; Ooples MA Envelopes uses different percentage band" ) |
| **Negative Volume Index** | [Nvi ](../lib/volume/nvi/Nvi.md ) | - | [✔️ ](../lib/volume/nvi/Nvi.md#validation ) | - | - |
| **Normalized Average True Range** | [Natr ](../lib/volatility/natr/Natr.md ) | [✔️ ](../lib/volatility/natr/Natr.md#validation ) | [✔️ ](../lib/volatility/natr/Natr.md#validation ) | [✔️ ](../lib/volatility/natr/Natr.md#validation ) | [✔️ ](../lib/volatility/natr/Natr.md#validation ) |
| **Normalized Shannon Entropy** | [Entropy ](../lib/statistics/entropy/Entropy.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Notch Filter** | [Notch ](../lib/filters/notch/Notch.md ) | - | - | - | - |
2026-02-23 17:27:35 -08:00
| **Nadaraya-Watson Estimator** | [Nw ](../lib/filters/nw/Nw.md ) | - | - | - | - |
2026-02-18 11:55:48 -08:00
| **One Euro Filter** | [OneEuro ](../lib/filters/oneeuro/OneEuro.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **On Balance Volume** | [Obv ](../lib/volume/obv/Obv.md ) | [⚠️ ](../lib/volume/obv/Obv.md#validation ) | [✔️ ](../lib/volume/obv/Obv.md#validation ) | [✔️ ](../lib/volume/obv/Obv.md#validation ) | [⚠️ ](../lib/volume/obv/Obv.md#validation ) |
| **Parabolic SAR** | [Psar ](../lib/reversals/psar/Psar.md ) | [✔️ ](../lib/reversals/psar/Psar.md#validation ) | - | [✔️ ](../lib/reversals/psar/Psar.md#validation ) | [⚠️ ](../lib/reversals/psar/Psar.md#validation "minor SAR initialization differences prevent numeric match" ) |
| **Pascal Weighted Moving Average** | [Pwma ](../lib/trends_FIR/pwma/Pwma.md ) | - | - | - | [✔️ ](../lib/trends_FIR/pwma/Pwma.md#validation ) |
| **Percentage Change** | [Change ](../lib/numerics/change/Change.md ) | - | [✔️ ](../lib/numerics/change/Change.md#validation ) | - | - |
| **Percentage Price Oscillator** | [Ppo ](../lib/momentum/ppo/Ppo.md ) | [✔️ ](../lib/momentum/ppo/Ppo.md#validation ) | [✔️ ](../lib/momentum/ppo/Ppo.md#validation ) | - | [✔️ ](../lib/momentum/ppo/Ppo.md#validation ) |
| **Percentage Volume Oscillator** | [Pvo ](../lib/volume/pvo/Pvo.md ) | - | - | - | [⚠️ ](../lib/volume/pvo/Pvo.md#validation "structural test only; Ooples PVO uses different EMA periods" ) |
| **Percentile** | [Percentile ](../lib/statistics/percentile/Percentile.md ) | - | - | - | - |
2026-02-26 09:59:44 -08:00
| **Polarized Fractal Efficiency** | [Pfe ](../lib/dynamics/pfe/Pfe.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Pivot Points** | [Pivot ](../lib/reversals/pivot/Pivot.md ) | - | - | - | - |
| **Pivot Points (Camarilla)** | [Pivotcam ](../lib/reversals/pivotcam/Pivotcam.md ) | - | - | - | - |
| **Pivot Points (DeMark)** | [Pivotdem ](../lib/reversals/pivotdem/Pivotdem.md ) | - | - | - | - |
| **Pivot Points (Extended)** | [Pivotext ](../lib/reversals/pivotext/Pivotext.md ) | - | - | - | - |
| **Pivot Points (Fibonacci)** | [Pivotfib ](../lib/reversals/pivotfib/Pivotfib.md ) | - | - | - | - |
| **Positive Volume Index** | [Pvi ](../lib/volume/pvi/Pvi.md ) | - | [✔️ ](../lib/volume/pvi/Pvi.md#validation ) | - | - |
| **Pretty Good Oscillator** | [Pgo ](../lib/oscillators/pgo/Pgo.md ) | - | - | - | [⚠️ ](../lib/oscillators/pgo/Pgo.md#validation "structural test only; Ooples PGO uses different ATR normalization" ) |
| **Price Channel** | [Pchannel ](../lib/channels/pchannel/pchannel.md ) | - | - | [✔️ ](../lib/channels/pchannel/pchannel.md#validation ) | - |
| **Price Momentum Oscillator** | [Pmo ](../lib/momentum/pmo/Pmo.md ) | - | - | [✔️ ](../lib/momentum/pmo/Pmo.md#validation ) | [✔️ ](../lib/momentum/pmo/Pmo.md#validation ) |
| **Price Relative Strength** | [Prs ](../lib/momentum/prs/Prs.md ) | - | - | [✔️ ](../lib/momentum/prs/Prs.md#validation ) | - |
2026-01-28 17:54:43 -08:00
| **Price Volume Divergence** | [Pvd ](../lib/volume/pvd/Pvd.md ) | - | - | - | - |
2026-02-16 21:26:44 -08:00
| **Price Volume Rank** | [Pvr ](../lib/volume/pvr/Pvr.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Price Volume Trend** | [Pvt ](../lib/volume/pvt/Pvt.md ) | - | - | - | [✔️ ](../lib/volume/pvt/Pvt.md#validation ) |
| **Qstick Indicator** | [Qstick ](../lib/dynamics/qstick/Qstick.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Quad Exponential MA** | [Qema ](../lib/trends_IIR/qema/Qema.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Quantile** | [Quantile ](../lib/statistics/quantile/Quantile.md ) | - | - | - | - |
2026-02-26 09:59:44 -08:00
| **Range Action Verification Index** | [Ravi ](../lib/dynamics/ravi/Ravi.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Rate of acceleration; 3rd derivative** | [Jerk ](../lib/numerics/jerk/Jerk.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Rate of Change** | [Roc ](../lib/momentum/roc/Roc.md ) | [✔️ ](../lib/momentum/roc/Roc.md#validation ) | [✔️ ](../lib/momentum/roc/Roc.md#validation ) | [✔️ ](../lib/momentum/roc/Roc.md#validation ) | [⚠️ ](../lib/momentum/roc/Roc.md#validation "Ooples ROC returns percentage; QuanTAlib ROC returns absolute change" ) |
| **Rate of change; 1st derivative** | [Slope ](../lib/statistics/linreg/LinReg.md ) | - | - | [✔️ ](../lib/statistics/linreg/LinReg.md#validation ) | - |
| **Rate of Change Percentage** | [Rocp ](../lib/momentum/rocp/Rocp.md ) | [✔️ ](../lib/momentum/rocp/Rocp.md#validation ) | - | - | - |
| **Rate of Change Ratio** | [Rocr ](../lib/momentum/rocr/Rocr.md ) | [✔️ ](../lib/momentum/rocr/Rocr.md#validation ) | [✔️ ](../lib/momentum/rocr/Rocr.md#validation ) | - | - |
2026-02-02 13:42:47 -08:00
| **Realized Volatility** | [Rv ](../lib/volatility/rv/Rv.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Rectified Linear Unit** | [Relu ](../lib/numerics/relu/Relu.md ) | - | - | - | - |
| **Recursive Gaussian MA** | [Rgma ](../lib/trends_IIR/rgma/Rgma.md ) | - | - | - | - |
2026-02-23 17:27:35 -08:00
| **Ehlers Recursive Median Filter** | [Rmed ](../lib/filters/rmed/Rmed.md ) | - | - | - | - |
2026-01-21 14:41:31 -05:00
| **Regression Channels** | [Regchannel ](../lib/channels/regchannel/regchannel.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Regularized Exponential MA** | [Rema ](../lib/trends_IIR/rema/Rema.md ) | - | - | - | [⚠️ ](../lib/trends_IIR/rema/Rema.md#validation "structural test only; Ooples REMA uses different regularization lambda" ) |
| **Relative Absolute Error** | [Rae ](../lib/errors/rae/Rae.md ) | - | - | - | - |
| **Relative Squared Error** | [Rse ](../lib/errors/rse/Rse.md ) | - | - | - | - |
| **Relative Strength Index** | [Rsi ](../lib/momentum/rsi/Rsi.md ) | [✔️ ](../lib/momentum/rsi/Rsi.md#validation ) | [✔️ ](../lib/momentum/rsi/Rsi.md#validation ) | [✔️ ](../lib/momentum/rsi/Rsi.md#validation ) | [✔️ ](../lib/momentum/rsi/Rsi.md#validation ) |
| **Relative Strength Quality Index** | [Rsx ](../lib/momentum/rsx/Rsx.md ) | - | - | - | [⚠️ ](../lib/momentum/rsx/Rsx.md#validation "structural test only; Ooples RSX uses different smoothing constants" ) |
| **Relative Volatility Index** | [Rvi ](../lib/volatility/rvi/Rvi.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Renko** | - | - | - | ✔️ | - |
2026-02-26 22:02:52 -08:00
| **Rogers-Satchell Volatility** | [Rsv ](../lib/volatility/rsv/Rsv.md ) | - | - | - | - |
| **Ehlers Roofing Filter** | [Roofing ](../lib/filters/roofing/Roofing.md ) | - | - | - | [✔️ ](../lib/filters/roofing/Roofing.md#validation ) |
| **Root Mean Squared Error** | [Rmse ](../lib/errors/rmse/Rmse.md ) | - | - | - | - |
| **Root Mean Squared Logarithmic Error** | [Rmsle ](../lib/errors/rmsle/Rmsle.md ) | - | - | - | - |
| **R-Squared** | [RSquared ](../lib/statistics/linreg/LinReg.md ) | - | - | [✔️ ](../lib/statistics/linreg/LinReg.md#validation ) | - |
2026-01-18 19:02:03 -08:00
| **Savitzky-Golay Filter** | [Sgf ](../lib/filters/sgf/Sgf.md ) | - | - | - | - |
| **Savitzky-Golay MA** | [Sgma ](../lib/trends_FIR/sgma/Sgma.md ) | - | - | - | - |
2026-02-21 20:45:38 -08:00
| **Smoothed Adaptive Momentum** | [Sam ](../lib/momentum/sam/Sam.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Schaff Trend Cycle** | [Stc ](../lib/oscillators/stc/stc.md ) | - | - | [✔️ ](../lib/oscillators/stc/stc.md#validation ) | [⚠️ ](../lib/oscillators/stc/stc.md#validation "structural test only; Ooples STC uses different stochastic smoothing" ) |
| **Simple Moving Average** | [Sma ](../lib/trends_FIR/sma/Sma.md ) | [✔️ ](../lib/trends_FIR/sma/Sma.md#validation ) | [✔️ ](../lib/trends_FIR/sma/Sma.md#validation ) | [✔️ ](../lib/trends_FIR/sma/Sma.md#validation ) | [✔️ ](../lib/trends_FIR/sma/Sma.md#validation ) |
2026-01-18 19:02:03 -08:00
| **Sine-weighted MA** | [Sinema ](../lib/trends_FIR/sinema/Sinema.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Smoothed Moving Average** | [Rma ](../lib/trends_IIR/rma/Rma.md ) | - | - | [✔️ ](../lib/trends_IIR/rma/Rma.md#validation ) | [✔️ ](../lib/trends_IIR/rma/Rma.md#validation ) |
| **Solar Activity Cycle** | [Solar ](../lib/cycles/solar/Solar.md ) | - | - | - | - |
| **Spearman Rank Correlation** | [Spearman ](../lib/statistics/spearman/Spearman.md ) | - | - | - | [⚠️ ](../lib/statistics/spearman/Spearman.md#validation "structural test only; Ooples Spearman uses different rank-tie handling" ) |
2026-02-18 19:08:15 -08:00
| **Ehlers Super Passband Filter** | [Spbf ](../lib/filters/spbf/Spbf.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Square Root Transformation** | [Sqrttrans ](../lib/numerics/sqrttrans/Sqrttrans.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Standard Deviation Channel** | [Sdchannel ](../lib/channels/sdchannel/sdchannel.md ) | - | - | - | [⚠️ ](../lib/channels/sdchannel/sdchannel.md#validation "structural test only; Ooples SD Channel uses different multiplier" ) |
| **Standardization (Z-score)** | [Zscore ](../lib/statistics/zscore/Zscore.md ) | - | - | - | [⚠️ ](../lib/statistics/zscore/Zscore.md#validation "structural test only; Ooples Z-Score uses population vs sample stddev" ) |
2026-01-18 19:02:03 -08:00
| **Starc Bands** | Starc | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Stochastic Fast** | [Stochf ](../lib/oscillators/stochf/Stochf.md ) | [✔️ ](../lib/oscillators/stochf/Stochf.md#validation ) | - | [✔️ ](../lib/oscillators/stochf/Stochf.md#validation ) | [⚠️ ](../lib/oscillators/stochf/Stochf.md#validation "structural test only; Ooples StochFast uses different smoothing period" ) |
| **Stochastic Momentum Index** | [Smi ](../lib/oscillators/smi/Smi.md ) | - | - | - | [⚠️ ](../lib/oscillators/smi/Smi.md#validation "structural test only; Ooples SMI uses different double-smoothing" ) |
| **Stochastic Oscillator** | [Stoch ](../lib/oscillators/stoch/Stoch.md ) | [✔️ ](../lib/oscillators/stoch/Stoch.md#validation ) | - | [✔️ ](../lib/oscillators/stoch/Stoch.md#validation ) | - |
| **Stochastic RSI** | [Stochrsi ](../lib/oscillators/stochrsi/Stochrsi.md ) | [✔️ ](../lib/oscillators/stochrsi/Stochrsi.md#validation ) | - | [✔️ ](../lib/oscillators/stochrsi/Stochrsi.md#validation ) | [✔️ ](../lib/oscillators/stochrsi/Stochrsi.md#validation ) |
| **Stoller Average Range Channel** | [Starchannel ](../lib/channels/starchannel/starchannel.md ) | - | - | [✔️ ](../lib/channels/starchannel/starchannel.md#validation ) | [⚠️ ](../lib/channels/starchannel/starchannel.md#validation "structural test only; Ooples STARC uses different ATR multiplier" ) |
2026-01-24 19:07:52 -08:00
| **Super Trend Bands** | [Stbands ](../lib/channels/stbands/Stbands.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **SuperTrend** | [Super ](../lib/dynamics/super/Super.md ) | - | - | [✔️ ](../lib/dynamics/super/Super.md#validation ) | - |
| **Swing High/Low Detection** | [Swings ](../lib/reversals/swings/Swings.md ) | - | - | - | - |
| **Symmetric Mean Absolute Percentage Error** | [Smape ](../lib/errors/smape/Smape.md ) | - | - | - | - |
| **T3 Moving Average** | [T3 ](../lib/trends_IIR/t3/T3.md ) | [✔️ ](../lib/trends_IIR/t3/T3.md#validation ) | - | [✔️ ](../lib/trends_IIR/t3/T3.md#validation ) | [✔️ ](../lib/trends_IIR/t3/T3.md#validation ) |
| **Theil Index** | [Theil ](../lib/statistics/theil/Theil.md ) | - | - | - | - |
| **Time Series Forecast** | [Tsf ](../lib/trends_FIR/tsf/Tsf.md ) | [✔️ ](../lib/trends_FIR/tsf/Tsf.md#validation ) | [✔️ ](../lib/trends_FIR/tsf/Tsf.md#validation ) | [✔️ ](../lib/trends_FIR/tsf/Tsf.md#validation ) | [⚠️ ](../lib/trends_FIR/tsf/Tsf.md#validation "bar alignment differs; Ooples default period=500 shifts output" ) |
| **Time Weighted Average Price** | [Twap ](../lib/volume/twap/Twap.md ) | - | - | - | - |
| **Trade Volume Index** | [Tvi ](../lib/volume/tvi/Tvi.md ) | - | - | - | [⚠️ ](../lib/volume/tvi/Tvi.md#validation "structural test only; Ooples TVI uses different tick threshold" ) |
| **Triangular Moving Average** | [Trima ](../lib/trends_FIR/trima/Trima.md ) | [✔️ ](../lib/trends_FIR/trima/Trima.md#validation ) | [✔️ ](../lib/trends_FIR/trima/Trima.md#validation ) | [✔️ ](../lib/trends_FIR/trima/Trima.md#validation ) | [⚠️ ](../lib/trends_FIR/trima/Trima.md#validation "structural test only; Ooples TRIMA uses different triangle weighting" ) |
| **Triple Exponential Average** | [Trix ](../lib/oscillators/trix/Trix.md ) | [✔️ ](../lib/oscillators/trix/Trix.md#validation ) | [✔️ ](../lib/oscillators/trix/Trix.md#validation ) | [✔️ ](../lib/oscillators/trix/Trix.md#validation ) | [⚠️ ](../lib/oscillators/trix/Trix.md#validation "structural test only; Ooples TRIX uses different signal smoothing" ) |
| **Triple Exponential Moving Average** | [Tema ](../lib/trends_IIR/tema/Tema.md ) | [✔️ ](../lib/trends_IIR/tema/Tema.md#validation ) | [✔️ ](../lib/trends_IIR/tema/Tema.md#validation ) | [✔️ ](../lib/trends_IIR/tema/Tema.md#validation ) | [⚠️ ](../lib/trends_IIR/tema/Tema.md#validation "diverges for large periods; Ooples uses different EMA initialization" ) |
2026-02-21 20:45:38 -08:00
| **Trend Regularity Adaptive MA** | [Trama ](../lib/trends_IIR/trama/Trama.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **True Range** | [Tr ](../lib/volatility/tr/Tr.md ) | [✔️ ](../lib/volatility/tr/Tr.md#validation ) | [✔️ ](../lib/volatility/tr/Tr.md#validation ) | - | - |
| **True Strength Index** | [Tsi ](../lib/momentum/tsi/Tsi.md ) | - | - | [✔️ ](../lib/momentum/tsi/Tsi.md#validation ) | [✔️ ](../lib/momentum/tsi/Tsi.md#validation ) |
| **Typical Price** | [Typprice ](../lib/core/typprice/Typprice.md ) | [✔️ ](../lib/core/typprice/Typprice.md#validation ) | - | - | - |
| **TTM Trend** | [Ttm ](../lib/dynamics/ttm_trend/TtmTrend.md ) | - | - | - | - |
2026-02-16 21:26:44 -08:00
| **TTM Scalper Alert** | [TtmScalper ](../lib/reversals/ttm_scalper/TtmScalper.md ) | - | - | - | - |
2026-02-12 19:43:09 -08:00
| **TTM Wave** | [TtmWave ](../lib/oscillators/ttm_wave/TtmWave.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Two-Argument Arctangent** | Atan2 | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Ulcer Index** | [Ui ](../lib/volatility/ui/Ui.md ) | - | - | - | [⚠️ ](../lib/volatility/ui/Ui.md#validation "structural test only; Ooples Ulcer Index uses different drawdown calc" ) |
2026-02-18 19:08:15 -08:00
| **Ehlers Ultimate Bands** | [Ubands ](../lib/channels/ubands/Ubands.md ) | - | - | - | - |
| **Ehlers Ultimate Channel** | [Uchannel ](../lib/channels/uchannel/Uchannel.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Ultimate Oscillator** | [Ultosc ](../lib/oscillators/ultosc/Ultosc.md ) | [✔️ ](../lib/oscillators/ultosc/Ultosc.md#validation ) | [✔️ ](../lib/oscillators/ultosc/Ultosc.md#validation ) | [✔️ ](../lib/oscillators/ultosc/Ultosc.md#validation ) | [✔️ ](../lib/oscillators/ultosc/Ultosc.md#validation ) |
| **Variable Index Dynamic Average** | [Vidya ](../lib/trends_IIR/vidya/Vidya.md ) | - | - | - | - |
2026-02-23 17:27:35 -08:00
| **Velocity (Jurik)** | [Vel ](../lib/momentum/vel/Vel.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Volatility Adjusted Moving Average** | [Vama ](../lib/trends_IIR/vama/Vama.md ) | - | - | - | - |
2026-02-02 13:42:47 -08:00
| **Volatility of Volatility** | [Vov ](../lib/volatility/vov/Vov.md ) | - | - | - | - |
2026-02-02 19:47:21 -08:00
| **Volatility Ratio** | [Vr ](../lib/volatility/vr/Vr.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Volume Accumulation** | [Va ](../lib/volume/va/Va.md ) | - | - | - | - |
| **Volume Force** | [Vf ](../lib/volume/vf/Vf.md ) | - | - | - | - |
| **Volume Oscillator** | [Vo ](../lib/volume/vo/Vo.md ) | - | [✔️ ](../lib/volume/vo/Vo.md#validation ) | - | - |
| **Volume Rate of Change** | [Vroc ](../lib/volume/vroc/Vroc.md ) | - | - | - | - |
2026-01-31 11:21:09 -08:00
| **Volume Weighted Accumulation/Distribution** | [Vwad ](../lib/volume/vwad/Vwad.md ) | - | - | - | - |
2026-02-16 21:26:44 -08:00
| **Volume Weighted Average Price** | [Vwap ](../lib/volume/vwap/Vwap.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Volume Weighted Moving Average** | [Vwma ](../lib/volume/vwma/Vwma.md ) | - | - | [✔️ ](../lib/volume/vwma/Vwma.md#validation ) | [✔️ ](../lib/volume/vwma/Vwma.md#validation ) |
| **Vertical Horizontal Filter** | [Vhf ](../lib/dynamics/vhf/Vhf.md ) | - | - | [⚠️ ](../lib/dynamics/vhf/Vhf.md#validation "Tulip window = n+1 bars; QuanTAlib window = n bars (~5% divergence )") | - |
| **Vortex Indicator** | [Vortex ](../lib/dynamics/vortex/Vortex.md ) | - | - | [✔️ ](../lib/dynamics/vortex/Vortex.md#validation ) | [⚠️ ](../lib/dynamics/vortex/Vortex.md#validation "structural test only; Ooples Vortex uses different ATR normalization" ) |
| **Ehlers Voss Predictive Filter** | [Voss ](../lib/filters/voss/Voss.md ) | - | - | - | [✔️ ](../lib/filters/voss/Voss.md#validation ) |
2026-01-24 19:07:52 -08:00
| **VWAP Bands** | [Vwapbands ](../lib/channels/vwapbands/Vwapbands.md ) | - | - | - | - |
| **VWAP with Standard Deviation Bands** | [Vwapsd ](../lib/channels/vwapsd/Vwapsd.md ) | - | - | - | - |
2026-02-18 11:55:48 -08:00
| **Wavelet Denoising Filter** | [Wavelet ](../lib/filters/wavelet/Wavelet.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Weighted Moving Average** | [Wma ](../lib/trends_FIR/wma/Wma.md ) | [✔️ ](../lib/trends_FIR/wma/Wma.md#validation ) | [✔️ ](../lib/trends_FIR/wma/Wma.md#validation ) | [✔️ ](../lib/trends_FIR/wma/Wma.md#validation ) | - |
| **Wiener Filter** | [Wiener ](../lib/filters/wiener/Wiener.md ) | - | - | - | - |
| **Williams %R** | [Willr ](../lib/oscillators/willr/Willr.md ) | [✔️ ](../lib/oscillators/willr/Willr.md#validation ) | [✔️ ](../lib/oscillators/willr/Willr.md#validation ) | [✔️ ](../lib/oscillators/willr/Willr.md#validation ) | [⚠️ ](../lib/oscillators/willr/Willr.md#validation "structural test only; Ooples %R uses different lookback period" ) |
| **Weighted Close Price** | [Wclprice ](../lib/core/wclprice/Wclprice.md ) | [✔️ ](../lib/core/wclprice/Wclprice.md#validation ) | - | - | - |
| **Williams Accumulation/Distribution** | [Wad ](../lib/volume/wad/Wad.md ) | - | [✔️ ](../lib/volume/wad/Wad.md#validation ) | - | [⚠️ ](../lib/volume/wad/Wad.md#validation ) |
| **Williams Alligator** | [Alligator ](../lib/dynamics/alligator/Alligator.md ) | - | - | [✔️ ](../lib/dynamics/alligator/Alligator.md#validation ) | [⚠️ ](../lib/dynamics/alligator/Alligator.md#validation "structural test only; Ooples Alligator uses different SMMA seeding" ) |
| **Williams Fractal** | [Fractals ](../lib/reversals/fractals/Fractals.md ) | - | - | [✔️ ](../lib/reversals/fractals/Fractals.md#validation ) | - |
| **Woodie's Pivot Points** | [Pivotwood ](../lib/reversals/pivotwood/Pivotwood.md ) | - | - | - | - |
| **Yang-Zhang Volatility** | [Yzv ](../lib/volatility/yzv/Yzv.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Yang-Zhang Volatility Adjusted MA** | [Yzvama ](../lib/trends_IIR/yzvama/Yzvama.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Zero-Lag Double Exponential MA** | [Zldema ](../lib/trends_IIR/zldema/Zldema.md ) | - | - | - | - |
| **Zero-Lag Exponential Moving Average** | [Zlema ](../lib/trends_IIR/zlema/Zlema.md ) | - | - | [⚠️ ](../lib/trends_IIR/zlema/Zlema.md#validation "structural test only; Tulip ZLEMA period alignment differs" ) | - |
| **Zero-Lag Triple Exponential MA** | [Zltema ](../lib/trends_IIR/zltema/Zltema.md ) | - | - | - | [⚠️ ](../lib/trends_IIR/zltema/Zltema.md#validation "structural test only; Ooples ZLTEMA uses different lag compensation" ) |
2026-01-18 19:02:03 -08:00
| **ZigZag** | - | - | - | ✔️ | - |
2026-02-26 22:02:52 -08:00
| **Z-score standardization** | [Zscore ](../lib/statistics/zscore/Zscore.md ) | - | - | - | [✔️ ](../lib/statistics/zscore/Zscore.md#validation ) |
| **Z-Test** | [Ztest ](../lib/statistics/ztest/Ztest.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
## Statistical Indicators
| Indicator | QuanTAlib | MathNet | TA-Lib | Tulip | Skender |
| :-------- | :-------- | :-----: | :----: | :---: | :-----: |
2026-02-02 19:47:21 -08:00
| **Autocorrelation Function** | [Acf ](../lib/statistics/acf/Acf.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
| **Covariance** | [Covariance ](../lib/statistics/covariance/Covariance.md ) | - | - | - | - |
2026-02-13 21:44:45 -08:00
| **Entropy (Shannon)** | [Entropy ](../lib/statistics/entropy/Entropy.md ) | - | - | - | - |
2026-02-16 21:26:44 -08:00
| **Geometric Mean** | [Geomean ](../lib/statistics/geomean/Geomean.md ) | - | - | - | - |
| **Harmonic Mean** | [Harmean ](../lib/statistics/harmean/Harmean.md ) | - | - | - | - |
2026-02-15 21:59:03 -08:00
| **Hurst Exponent** | [Hurst ](../lib/statistics/hurst/Hurst.md ) | - | - | - | - |
| **Interquartile Range** | [Iqr ](../lib/statistics/iqr/Iqr.md ) | - | - | - | - |
2026-02-13 21:44:45 -08:00
| **Granger Causality** | [Granger ](../lib/statistics/granger/Granger.md ) | - | - | - | - |
2026-02-16 16:54:36 -08:00
| **Jarque-Bera Test** | [Jb ](../lib/statistics/jb/Jb.md ) | - | - | - | - |
| **Kendall Rank Correlation** | [Kendall ](../lib/statistics/kendall/Kendall.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Median (Statistical)** | [Median ](../lib/statistics/median/Median.md ) | [✔️ ](../lib/statistics/median/Median.md#validation ) | - | - | - |
2026-02-16 16:54:36 -08:00
| **Mode** | [Mode ](../lib/statistics/mode/Mode.md ) | - | - | - | - |
| **Percentile** | [Percentile ](../lib/statistics/percentile/Percentile.md ) | - | - | - | - |
| **Quantile** | [Quantile ](../lib/statistics/quantile/Quantile.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Skewness** | [Skew ](../lib/statistics/skew/Skew.md ) | [✔️ ](../lib/statistics/skew/Skew.md#validation ) | - | - | - |
2026-02-16 16:54:36 -08:00
| **Spearman Rank Correlation** | [Spearman ](../lib/statistics/spearman/Spearman.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Standard Deviation** | [StdDev ](../lib/statistics/stddev/StdDev.md ) | [✔️ ](../lib/statistics/stddev/StdDev.md#validation ) | [✔️ ](../lib/statistics/stddev/StdDev.md#validation ) | [✔️ ](../lib/statistics/stddev/StdDev.md#validation ) | [✔️ ](../lib/statistics/stddev/StdDev.md#validation ) |
| **Sum (Rolling)** | [Sum ](../lib/statistics/sum/Sum.md ) | - | [✔️ ](../lib/statistics/sum/Sum.md#validation ) | [✔️ ](../lib/statistics/sum/Sum.md#validation ) | - |
2026-02-16 16:54:36 -08:00
| **Theil T Index** | [Theil ](../lib/statistics/theil/Theil.md ) | - | - | - | - |
2026-02-02 19:47:21 -08:00
| **Partial Autocorrelation Function** | [Pacf ](../lib/statistics/pacf/Pacf.md ) | - | - | - | - |
2026-02-26 22:02:52 -08:00
| **Variance** | [Variance ](../lib/statistics/variance/Variance.md ) | [✔️ ](../lib/statistics/variance/Variance.md#validation ) | [✔️ ](../lib/statistics/variance/Variance.md#validation ) | [✔️ ](../lib/statistics/variance/Variance.md#validation ) | [✔️ ](../lib/statistics/variance/Variance.md#validation ) |
| **Mean Absolute Deviation** | [MeanDev ](../lib/statistics/meandev/MeanDev.md ) | - | - | [✔️ ](../lib/statistics/meandev/MeanDev.md#validation ) | - |
| **Standard Error of Regression** | [Stderr ](../lib/statistics/stderr/Stderr.md ) | - | - | [⚠️ ](../lib/statistics/stderr/Stderr.md#validation "Tulip stderr = StdDev/sqrt(n ) (SE of mean); QuanTAlib = sqrt(SSR/(n-2)) (SE of OLS regression)") | - |
2026-02-16 16:54:36 -08:00
| **Z-Score** | [Zscore ](../lib/statistics/zscore/Zscore.md ) | - | - | - | - |
| **Z-Test** | [Ztest ](../lib/statistics/ztest/Ztest.md ) | - | - | - | - |
2026-01-18 19:02:03 -08:00
## Error Metrics
| Indicator | QuanTAlib | MathNet | Notes |
| :-------- | :-------- | :-----: | :---- |
| **Mean Absolute Error** | [Mae ](../lib/errors/mae/Mae.md ) | ✔️ | Validated via `Distance.MAE()` |
| **Mean Squared Error** | [Mse ](../lib/errors/mse/Mse.md ) | ✔️ | Validated via `Distance.MSE()` |
| **Root Mean Squared Error** | [Rmse ](../lib/errors/rmse/Rmse.md ) | ✔️ | Validated via `sqrt(Distance.MSE())` |
| **R-Squared** | [Rsquared ](../lib/errors/rsquared/Rsquared.md ) | - | Uses streaming-optimized TSS calculation |
| **Huber Loss** | [Huber ](../lib/errors/huber/Huber.md ) | - | No external validation available |
| **Pseudo-Huber Loss** | [PseudoHuber ](../lib/errors/pseudohuber/PseudoHuber.md ) | - | No external validation available |
| **Log-Cosh Loss** | [LogCosh ](../lib/errors/logcosh/LogCosh.md ) | - | No external validation available |
2026-02-23 17:27:35 -08:00
| **Tukey Loss** | [Tukey ](../lib/errors/tukeybiweight/TukeyBiweight.md ) | - | No external validation available |
| **Quantile Loss** | [Quantile ](../lib/errors/quantileloss/QuantileLoss.md ) | - | No external validation available |
2026-01-18 19:02:03 -08:00
| **MAPE** | [Mape ](../lib/errors/mape/Mape.md ) | - | No external validation available |
| **SMAPE** | [Smape ](../lib/errors/smape/Smape.md ) | - | No external validation available |
| **MAAPE** | [Maape ](../lib/errors/maape/Maape.md ) | - | No external validation available |
| **MASE** | [Mase ](../lib/errors/mase/Mase.md ) | - | No external validation available |
| **MSLE** | [Msle ](../lib/errors/msle/Msle.md ) | - | No external validation available |
| **RMSLE** | [Rmsle ](../lib/errors/rmsle/Rmsle.md ) | - | No external validation available |
| **Theil U** | [TheilU ](../lib/errors/theilu/TheilU.md ) | - | No external validation available |
| **Mean Error** | [Me ](../lib/errors/me/Me.md ) | - | No external validation available |
| **MPE** | [Mpe ](../lib/errors/mpe/Mpe.md ) | - | No external validation available |
| **RSE** | [Rse ](../lib/errors/rse/Rse.md ) | - | No external validation available |
| **RAE** | [Rae ](../lib/errors/rae/Rae.md ) | - | No external validation available |
| **MRAE** | [Mrae ](../lib/errors/mrae/Mrae.md ) | - | No external validation available |
| **MdAE** | [MdAE ](../lib/errors/mdae/MdAE.md ) | - | No external validation available |
| **MdAPE** | [MdAPE ](../lib/errors/mdape/MdAPE.md ) | - | No external validation available |
| **MAPD** | [Mapd ](../lib/errors/mapd/Mapd.md ) | - | No external validation available |
| **WMAPE** | [Wmape ](../lib/errors/wmape/Wmape.md ) | - | No external validation available |
| **WRMSE** | [Wrmse ](../lib/errors/wrmse/Wrmse.md ) | - | Validated via internal RMSE equivalence (uniform weights) |
## Validation Libraries
| Library | Language | License | Notes |
| :------ | :------- | :------ | :---- |
| [TA-Lib ](https://ta-lib.org/ ) | C (via .NET wrapper) | BSD | Industry standard. C implementation, battle-tested. |
| [Tulip ](https://tulipindicators.org/ ) | C (via .NET wrapper) | LGPL | Lightweight, well-documented. |
| [Skender.Stock.Indicators ](https://dotnet.stockindicators.dev/ ) | C# | MIT | Pure .NET. Active development. |
| [OoplesFinance ](https://github.com/ooples/OoplesFinance.StockIndicators ) | C# | Apache 2.0 | Large indicator collection. Validation coverage varies. |
| [MathNet.Numerics ](https://numerics.mathdotnet.com/ ) | C# | MIT | Statistical functions, not TA-specific. |
## Running Validation Tests
```bash
# All validation tests
dotnet test lib/QuanTAlib.Tests.csproj --filter "Category=Validation"
# Specific library comparison
dotnet test lib/QuanTAlib.Tests.csproj --filter "FullyQualifiedName~TalibValidation"
dotnet test lib/QuanTAlib.Tests.csproj --filter "FullyQualifiedName~SkenderValidation"
# Single indicator validation
dotnet test lib/QuanTAlib.Tests.csproj --filter "FullyQualifiedName~EmaValidation"
```
## Discrepancy Investigation
When validation fails:
1. **Check parameter mapping.** TA-Lib uses 0-based indexing for some parameters. Skender uses 1-based.
2. **Check warmup handling.** Different libraries handle the first N values differently.
3. **Check smoothing assumptions.** Some libraries use SMA for initial EMA seed. Others use the first value.
4. **Check edge cases.** NaN handling, zero division, and boundary conditions vary.
Discrepancies get documented in the indicator's markdown file under a "Validation Notes" section. The goal is not to match every library exactly. The goal is to understand why differences exist and document them.
## References
- [TA-Lib Documentation ](https://ta-lib.org/d_api/d_api.html )
- [Skender.Stock.Indicators Wiki ](https://dotnet.stockindicators.dev/guide/ )
2026-01-21 14:41:31 -05:00
- [Tulip Indicators Reference ](https://tulipindicators.org/list )