feat: Add Absolute Price Oscillator (APO) implementation and documentation

feat: Implement ADL (Accumulation/Distribution Line) indicator
This commit is contained in:
Miha Kralj
2025-12-18 21:32:01 -08:00
parent 35e5571237
commit b5358091ae
32 changed files with 1925 additions and 55 deletions
+10 -5
View File
@@ -1,9 +1,12 @@
- **Core concepts**
- [Architecture](ARCHITECTURE.md)
- [Benchmarks](BENCHMARKS.md)
- [Indicators](INDICATORS.md)
- [Usage Guides](USAGE.md)
- [Integration](INTEGRATION.md)
- [Architecture](architecture.md)
- [API](api.md)
- [Benchmarks](benchmarks.md)
- [Indicators](indicators.md)
- [Usage Guides](usage.md)
- [Integration](integration.md)
- [Validation](validation.md)
- [MA Qualities](ma-qualities.md)
- **Trends**
- [Overview](../lib/trends/_index.md)
@@ -33,6 +36,7 @@
- [Overview](../lib/momentum/_index.md)
- [ADX - Average Directional Index](../lib/momentum/adx/Adx.md)
- [AO - Awesome Oscillator](../lib/momentum/ao/Ao.md)
- [APO - Absolute Price Oscillator](../lib/momentum/apo/Apo.md)
- [AROON - Aroon Oscillator](../lib/momentum/aroon/Aroon.md)
- [CFB - Composite Fractal Behavior](../lib/momentum/cfb/Cfb.md)
- [DMX - Jurik Directional Movement Index](../lib/momentum/dmx/Dmx.md)
@@ -45,6 +49,7 @@
- **Volume**
- [Overview](../lib/volume/_index.md)
- [ADL - Accumulation/Distribution Line](../lib/volume/adl/Adl.md)
- **Channels**
- [Overview](../lib/channels/_index.md)
+2 -2
View File
@@ -13,7 +13,7 @@ Every indicator exposes the following core properties and methods:
### Properties
| Property | Type | Description |
|----------|------|-------------|
| -------- | ---- | ----------- |
| `Name` | `string` | Descriptive name (e.g., `"Sma(14)"`). |
| `Last` | `TValue` | The most recent calculated value (Time + Value). |
| `IsHot` | `bool` | `true` if the indicator has processed enough data to be valid. |
@@ -23,7 +23,7 @@ Every indicator exposes the following core properties and methods:
### Methods
| Method | Description |
|--------|-------------|
| ------ | ----------- |
| `Update` | Updates the indicator with a new value (Streaming). |
| `Batch` | Static method for high-performance bulk calculation (Batch). |
| `Prime` | Initializes state from history without full processing (Priming). |
+11 -4
View File
@@ -7,12 +7,15 @@ QuanTAlib is built on a specific set of architectural decisions designed to maxi
Three design decisions define QuanTAlib's performance characteristics:
### 1. Structure of Arrays (SoA) Memory Layout
We store timestamps and values in separate contiguous arrays rather than interleaving them in objects. This seemingly minor change enables direct SIMD vectorization—CPU processes eight values in a single instruction instead of one at a time. The performance difference is measurable: averaging 10,000 values takes 2.4μs with SIMD versus 18.7μs with scalar operations. That's an 8x improvement just from rearranging memory.
### 2. O(1) Streaming Algorithms
We maintain constant computational complexity per incoming data point regardless of lookback period. A 14-period RSI and a 200-period RSI both process new bars in 0.4μs. Traditional batch recalculation approaches scale linearly with period length, introducing variable latency that makes real-time processing unpredictable. QuanTAlib accepts higher memory overhead (40-60 bytes per indicator instance) to guarantee predictable timing when processing hundreds of symbols simultaneously.
### 3. Explicit Initialization Handling
We return meaningful values from the first bar while exposing confidence through the `IsHot` property. A 14-period SMA calculates results starting at bar 1 using whatever data is available—the math to calculate averages works with limited history, just not at full precision for a period of 14. Other libraries either hide these early values (returning NaN or null) or output numbers without indicating their veracity. QuanTAlib returns usable values immediately and sets `IsHot = true` when the indicator has accumulated enough data to guarantee correctness of results.
## Four Operating Modes
@@ -20,21 +23,25 @@ We return meaningful values from the first bar while exposing confidence through
Trading systems have different needs. Backtesting engines process years of historical data in batch. Real-time systems update indicators bar-by-bar as new data arrives. Event-driven architectures react to indicator changes asynchronously. QuanTAlib provides four modes optimized for these distinct patterns.
### Span Mode: Direct Memory Operations
Operates directly on `Span<double>` without allocating objects. You provide raw arrays, QuanTAlib returns calculated arrays. Zero garbage collection pressure, maximum speed, minimal abstraction. This mode exists for one purpose: processing large datasets as fast as physically possible on current hardware.
**When to use:** Batch processing historical data, backtesting engines, research environments where you're calculating thousands of indicators across years of data.
### Batch Mode: TSeries Objects
Wraps calculations in TSeries objects that maintain timestamps, handle array resizing, and provide time-based indexing. You add price data with timestamps, QuanTAlib returns a time-aligned series with metadata. This is Span mode with a protective wrapper that handles the tedious details.
**When to use:** Historical analysis where you want time alignment without sacrificing too much performance. Research notebooks, strategy prototyping, exploratory analysis.
### Streaming Mode: Real-Time Updates
Processes one bar at a time, maintaining internal state between updates. Call `Update(TValue, isNew)` with each new price, get the current indicator value. The `isNew` parameter distinguishes between new bars and updates to the current bar (handling the common pattern where the last bar's values change as new ticks arrive).
**When to use:** Live trading systems, real-time charting, tick-by-tick analysis. Any scenario where data arrives sequentially and you need immediate results.
### Eventing Mode: Reactive Architectures
Extends streaming mode with full event infrastructure. Indicators raise events when values change, when warmup completes (`IsHot`), or when significant conditions occur. Build reactive chains where one indicator's output triggers another's calculation, creating complex analytical pipelines that respond to market conditions.
**When to use:** Complex trading systems with conditional logic, risk management systems that react to volatility changes, or any architecture where indicators need to communicate state changes rather than just return values.
@@ -60,7 +67,7 @@ QuanTAlib leverages .NET's `System.Runtime.Intrinsics` to access hardware-specif
## Design Philosophy
1. **Correctness First**: We validate against original research papers and established libraries.
2. **Performance by Default**: We choose algorithms and data structures that are naturally fast.
3. **No Hidden Allocations**: Hot paths are allocation-free to prevent GC pauses.
4. **Transparency**: We expose the internal state (like `IsHot`) so you know exactly what the indicator is doing.
1. **Correctness First**: We validate against original research papers and established libraries.
2. **Performance by Default**: We choose algorithms and data structures that are naturally fast.
3. **No Hidden Allocations**: Hot paths are allocation-free to prevent GC pauses.
4. **Transparency**: We expose the internal state (like `IsHot`) so you know exactly what the indicator is doing.
+12 -8
View File
@@ -18,7 +18,7 @@ These results represent what current-generation server CPUs achieve in productio
QuanTAlib's Span mode calculates 500,000 SMA values in 318 microseconds with zero memory allocations. That's 0.64 nanoseconds per value. For context, a single L1 cache access takes approximately 1 nanosecond on modern CPUs — we're calculating moving averages faster than fetching data from the nearest cache level.
| Library | Mean Time | Allocations | Relative Speed |
|---------|-----------|-------------|----------------|
| ------- | --------- | ----------- | -------------- |
| **QuanTAlib (Span)** | **318.3 μs** | **0 B** | **1.00x (baseline)** |
| TA-Lib | 356.4 μs | 34 B | 1.12x slower |
| Tulip | 359.3 μs | 0 B | 1.13x slower |
@@ -30,7 +30,7 @@ QuanTAlib's Span mode calculates 500,000 SMA values in 318 microseconds with zer
QuanTAlib matches C library performance at 711 microseconds — within measurement error of Tulip's 708μs and TA-Lib's 713μs. Pure C# matching heavily optimized C code demonstrates what modern .NET achieves when you align memory layouts with hardware capabilities.
| Library | Mean Time | Allocations | Relative Speed |
|---------|-----------|-------------|----------------|
| ------- | --------- | ----------- | -------------- |
| **QuanTAlib (Span)** | **711.0 μs** | **0 B** | **1.00x** |
| TA-Lib | 712.9 μs | 36 B | 1.00x slower |
| Tulip | 708.1 μs | 0 B | 1.00x faster |
@@ -42,7 +42,7 @@ QuanTAlib matches C library performance at 711 microseconds — within measureme
QuanTAlib's WMA beats both C libraries — 296 microseconds versus Tulip's 372μs and TA-Lib's 360μs. This isn't a measurement error. Pure C# with proper SIMD vectorization outperforms C code that predates AVX-512 optimizations.
| Library | Mean Time | Allocations | Relative Speed |
|---------|-----------|-------------|----------------|
| ------- | --------- | ----------- | -------------- |
| **QuanTAlib (Span)** | **296.0 μs** | **0 B** | **1.00x (baseline)** |
| TA-Lib | 360.0 μs | 34 B | 1.22x slower |
| Tulip | 372.1 μs | 0 B | 1.26x slower |
@@ -54,7 +54,7 @@ QuanTAlib's WMA beats both C libraries — 296 microseconds versus Tulip's 372μ
HMA requires multiple moving average calculations — traditionally expensive. QuanTAlib processes 500,000 bars in 1,008 microseconds. Tulip takes 2,266 microseconds. Skender requires 251,694 microseconds. (TALib doesn't include HMA calculation) That's a 2.25x improvement over optimized C and a 250x improvement over standard .NET implementations.
| Library | Mean Time | Allocations | Relative Speed |
|---------|-----------|-------------|----------------|
| ------- | --------- | ----------- | -------------- |
| **QuanTAlib (Span)** | **1,007.8 μs** | **0 B** | **1.00x (baseline)** |
| TA-Lib | -- | -- | -- |
| Tulip | 2,266.0 μs | 152 B | 2.25x slower |
@@ -66,7 +66,7 @@ HMA requires multiple moving average calculations — traditionally expensive. Q
The benchmarks above show Span mode. Here's how all four modes compare using EMA as representative:
| QuanTAlib Mode | Mean Time | Allocations | Use Case |
|----------------|-----------|-------------|----------|
| -------------- | --------- | ----------- | -------- |
| Span | 711.0 μs | 0 B | Maximum speed, batch processing |
| Streaming | 721.9 μs | 44 B | Real-time updates, minimal overhead |
| Batch (TSeries) | 1,311.7 μs | 8.0 MB | Time-aligned series with metadata |
@@ -77,6 +77,7 @@ Even QuanTAlib's slowest mode (Eventing with complete event infrastructure and 1
## Methodology
We use [BenchmarkDotNet](https://benchmarkdotnet.org/) for all performance testing. This ensures:
- Warmup iterations to stabilize JIT compilation
- Statistical analysis of results (mean, standard deviation)
- Memory allocation tracking
@@ -86,18 +87,21 @@ We use [BenchmarkDotNet](https://benchmarkdotnet.org/) for all performance testi
You can run the benchmarks on your own hardware to verify these results.
1. Clone the repository:
1. Clone the repository:
```bash
git clone https://github.com/mihakralj/QuanTAlib.git
cd QuanTAlib
```
2. Navigate to the performance project:
2. Navigate to the performance project:
```bash
cd perf
```
3. Run the benchmarks:
3. Run the benchmarks:
```bash
dotnet run -c Release
```
+7 -1
View File
@@ -82,7 +82,13 @@
padding-bottom: 0.3em;
}
.markdown-section strong {
color: #e8d888;
font-weight: 700;
}
.markdown-section code {
color: #ffffff;
background-color: rgba(110,118,129,0.4);
border-radius: 6px;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
@@ -103,7 +109,7 @@
}
.markdown-section a {
color: var(--theme-color);
color: #4493f8;
text-decoration: none;
}
+51 -1
View File
@@ -5,7 +5,7 @@ QuanTAlib provides technical indicators organized into mathematical families. Un
## Full Category Table
| Category | What It Measures | Representative Indicators | When You Need It |
|----------|------------------|---------------------------|------------------|
| -------- | ---------------- | ------------------------- | ---------------- |
| [**Trends**](../lib/trends/_index.md) | Direction and strength of price movement through smoothing and filtering | SMA, EMA, WMA, HMA, JMA, KAMA, ALMA, DEMA, TEMA, T3 | Starting point for most analysis. Simpler variants (SMA, EMA) work for trend identification. Exotic ones (Jurik, Ehlers) trade CPU cycles for reduced lag. |
| [**Volatility**](../lib/volatility/_index.md) | Size and variability of price movements | ATR, StdDev, Bollinger Bands, Keltner Channels, Historical Volatility | Position sizing, stop-loss placement, and understanding market regime. ATR tells you how much instruments typically move. |
| [**Momentum**](../lib/momentum/_index.md) | Speed and magnitude of price changes | RSI, Stochastic, CCI, Williams %R, MACD, Momentum, ROC | Identifying overbought/oversold conditions and divergences. RSI oscillates between 0-100 by construction. |
@@ -28,17 +28,67 @@ The categories aren't rigid boundaries—many indicators could fit multiple cate
## Mathematical Families Explanation
### Moving Averages (Trends)
Moving averages are low-pass filters. They remove high-frequency noise (random price fluctuations) to reveal the underlying low-frequency signal (trend).
- **SMA**: Equal weight to all points. Slowest to react.
- **EMA/WMA**: More weight to recent data. Faster reaction.
- **HMA/JMA/ALMA**: Advanced math to reduce lag while maintaining smoothness.
### Oscillators (Momentum)
Oscillators measure the velocity of price changes. They are typically bounded (e.g., 0-100) or centered around zero.
- **RSI**: Ratio of average gains to average losses.
- **MACD**: Difference between two moving averages (convergence/divergence).
### Dispersion (Volatility)
These measure the spread of data points around the mean.
- **StdDev**: Standard statistical measure of variance.
- **ATR**: Volatility measure that accounts for gaps (high-low range).
## Implemented Indicators
### Momentum
- [**ADX**](../lib/momentum/adx/Adx.md) - Average Directional Index
- [**AO**](../lib/momentum/ao/Ao.md) - Awesome Oscillator
- [**AROON**](../lib/momentum/aroon/Aroon.md) - Aroon
- [**CFB**](../lib/momentum/cfb/Cfb.md) - Jurik Composite Fractal Behavior
- [**DMX**](../lib/momentum/dmx/Dmx.md) - Jurik Directional Movement Index
- [**RSX**](../lib/momentum/rsx/Rsx.md) - Jurik Relative Strength Quality Index
- [**VEL**](../lib/momentum/vel/Vel.md) - Jurik Velocity
### Trends
- [**ALMA**](../lib/trends/alma/Alma.md) - Arnaud Legoux MA
- [**CONV**](../lib/trends/conv/Conv.md) - Convolution MA
- [**DEMA**](../lib/trends/dema/Dema.md) - Double Exponential MA
- [**DWMA**](../lib/trends/dwma/Dwma.md) - Double Weighted MA
- [**EMA**](../lib/trends/ema/Ema.md) - Exponential MA
- [**HMA**](../lib/trends/hma/Hma.md) - Hull MA
- [**HTIT**](../lib/trends/htit/Htit.md) - Hilbert Transform Instantaneous Trend
- [**JMA**](../lib/trends/jma/Jma.md) - Jurik MA
- [**KAMA**](../lib/trends/kama/Kama.md) - Kaufman Adaptive MA
- [**LSMA**](../lib/trends/lsma/Lsma.md) - Least Squares MA
- [**MAMA**](../lib/trends/mama/Mama.md) - MESA Adaptive MA
- [**MGDI**](../lib/trends/mgdi/Mgdi.md) - McGinley Dynamic
- [**PWMA**](../lib/trends/pwma/Pwma.md) - Pascal Weighted MA
- [**RMA**](../lib/trends/rma/Rma.md) - wildeR MA
- [**SMA**](../lib/trends/sma/Sma.md) - Simple MA
- [**SUPER**](../lib/trends/super/Super.md) - SuperTrend
- [**T3**](../lib/trends/t3/T3.md) - Tillson T3 MA
- [**TEMA**](../lib/trends/tema/Tema.md) - Triple Exponential MA
- [**TRIMA**](../lib/trends/trima/Trima.md) - Triangular MA
- [**VIDYA**](../lib/trends/vidya/Vidya.md) - Variable Index Dynamic Average
- [**WMA**](../lib/trends/wma/Wma.md) - Weighted MA
### Volatility
- [**ATR**](../lib/volatility/atr/Atr.md) - Average True Range
### Volume
- [**ADL**](../lib/volume/adl/Adl.md) - Accumulation/Distribution Line
+29
View File
@@ -0,0 +1,29 @@
# Four Core Qualities of Superior Moving Average
## Accuracy (preserving large-scale structure)
Moving average should maintain the important underlying structure of price movements (like major trends and cycles) while filtering out all smaller fluctuations; it should faithfully represent the true price trajectory over longer timeframes.
## Timeliness (minimal lag)
Most moving averages lag behind price action - they indicate changes way after they've already happened. A good moving average minimizes this lag, responding quickly to genuine price movements without sacrificing other qualities, providing more actionable signals and earlier entries/exits.
## Minimal overshoot
Overshoot occurs when a highly reactive moving average extends beyond the actual price extremes, creating false impressions of price levels never reached. TEMA, DEMA and HMA are examples of overshooting moving averages; good moving average should avoid this distortion, particularly during price reversals, preventing false triggers when used with threshold-based systems.
## Smoothness (reduced noise)
A quality moving average filters out random price fluctuations (noise) that don't represent meaningful market activity, especially in steady non-volatile periods. This creates a clean, smooth line that clearly shows the underlying price direction without the jagged, erratic movements that could trigger false signals.
---
## The Dynamic Adaptive Moving Average
This study of Dynamic Adaptive Moving Average employs a complex approach to price smoothing that continuously adjusts its behavior based on real-time market conditions. At its core, this indicator uses the ratio between short-term True Range and longer-term ATR to measure relative volatility changes in the market. This volatility assessment drives the automatic adjustment of critical smoothing parameters through calibrated sigmoid functions, allowing the indicator to become more responsive during volatile periods and more stable during consolidation.
Smoothing is achieved with three-stage filtering process:
1. The first stage applies preliminary smoothing using self-adjusted adaptive exponential moving average.
2. The second stage implements a Kalman filter that provides further smoothing while maintaining responsiveness to price spikes.
3. The final stage applies another adaptive filter that balances smoothness and lag reduction.
+2
View File
@@ -104,6 +104,7 @@ source.Add(DateTime.UtcNow, 105.0);
## Common Patterns
### Handling Warmup
Always check `IsHot` or `Count` before using values.
```csharp
@@ -115,6 +116,7 @@ if (rsi.IsHot) {
```
### Combining Indicators
You can feed the output of one indicator into another.
```csharp
+277
View File
@@ -0,0 +1,277 @@
# Validation Across TA Libraries
| Indicator | QuanTAlib | TA-Lib | Tulip | Skender | Ooples |
| :--- | :--- | :---: | :---: | :---: | :---: |
| **Aberration** | Abber | - | - | - | - |
| **Absolute Price Oscillator** | [Apo](../lib/momentum/apo/apo.md) | ✅ | ✅ | - | - |
| **Acceleration Bands** | Accbands | - | - | - | - |
| **Acceleration Oscillator** | Ac | - | - | - | - |
| **Accumulation/Distribution Line** | [Adl](../lib/volume/adl/adl.md) | ✅ | ✅ | ✅ | ✅ |
| **Accumulation/Distribution Oscillator** | Adosc | ADOSC | adosc | ChaikinOsc | - |
| **Adaptive Price Zone** | Apz | - | - | - | - |
| **Andrews' Pitchfork** | Apchannel | - | - | - | - |
| **Archer Moving Averages Trends** | Amat | - | - | - | - |
| **Archer On-Balance Volume** | Aobv | - | - | - | - |
| **Arnaud Legoux Moving Average** | [Alma](../lib/trends/alma/alma.md) | - | - | ✅ | ✅ |
| **Aroon** | [Aroon](../lib/momentum/aroon/aroon.md) | ✅ | aroon | ✅ | - |
| **Aroon Oscillator** | Aroonosc | AROONOSC | aroonosc | - | - |
| **ATR Bands** | Atrbands | - | - | - | - |
| **Autoregressive FIR MA** | Afirma | - | - | - | - |
| **Average Daily Range** | Adr | - | - | - | - |
| **Average Directional Index** | [Adx](../lib/momentum/adx/adx.md) | ✅ | adx | ✅ | - |
| **Average Directional Movement Rating** | Adxr | ADXR | adxr | - | - |
| **Average True Range** | [Atr](../lib/volatility/atr/atr.md) | ✅ | atr | ✅ | - |
| **Average True Range Normalized [0,1]** | Atrn | - | - | - | - |
| **Average True Range Percent** | Atrp | - | - | - | - |
| **Awesome Oscillator** | [Ao](../lib/momentum/ao/ao.md) | - | ✅ | ✅ | ✅ |
| **Balance of Power** | Bop | BOP | bop | Bop | - |
| **Bessel Filter** | Bessel | - | - | - | - |
| **Bessel-Weighted MA** | Bwma | - | - | - | - |
| **Beta Coefficient** | Beta | BETA | - | Beta | - |
| **Bias** | Bias | - | - | - | - |
| **Bilateral Filter** | Bilateral | - | - | - | - |
| **Blackman Window MA** | Blma | - | - | - | - |
| **Bollinger %B** | Bbb | - | - | - | - |
| **Bollinger Band Squeeze** | Bbs | - | - | - | - |
| **Bollinger Band Width** | Bbw | - | - | - | - |
| **Bollinger Band Width Normalized** | Bbwn | - | - | - | - |
| **Bollinger Band Width Percentile** | Bbwp | - | - | - | - |
| **Bollinger Bands** | Bbands | BBANDS | bbands | BollingerBands | - |
| **Butterworth Filter** | Butter | - | - | - | - |
| **Camarilla Pivot Points** | Pivotcam | - | - | - | - |
| **Chaikin Money Flow** | Cmf | - | - | Cmf | - |
| **Chaikin Volatility** | Cvi | - | cvi | - | - |
| **Chande Forecast Oscillator** | Cfo | - | - | - | - |
| **Chande Momentum Oscillator** | Cmo | CMO | cmo | Cmo | - |
| **Chebyshev Type I Filter** | Cheby1 | - | - | - | - |
| **Chebyshev Type II Filter** | Cheby2 | - | - | - | - |
| **Choppiness Index** | Chop | - | - | Chop | - |
| **Close-to-Close Volatility** | Ccv | - | - | - | - |
| **Cointegration** | Cointegration | - | - | - | - |
| **Commodity Channel Index** | Cci | CCI | cci | Cci | - |
| **Composite Fractal Behavior** | [Cfb](../lib/momentum/cfb/cfb.md) | - | - | - | - |
| **Conditional Volatility** | Cv | - | - | - | - |
| **Convolution Moving Average** | [Conv](../lib/trends/conv/conv.md) | ✅ | ✅ | ✅ | ✅ |
| **Correlation** | Correlation | CORREL | - | Correlation | - |
| **Covariance** | Covariance | - | - | - | - |
| **Cumulative Mean (Average)** | Cummean | - | - | - | - |
| **Decay Min-Max Channel** | Decaychannel | - | - | - | - |
| **DeMark Pivot Points** | Pivotdem | - | - | - | - |
| **Detrended Price Oscillator** | Dpo | - | dpo | Dpo | - |
| **Detrended Synthetic Price** | Dsp | - | - | - | - |
| **Deviation-Scaled MA** | Dsma | - | - | - | - |
| **Directional Movement Index** | Dx | DX | dx | - | - |
| **Directional Movement Index (Jurik)** | [Dmx](../lib/momentum/dmx/dmx.md) | - | - | - | - |
| **Dirty Data Detection** | Dirty | - | - | - | - |
| **Donchian Channels** | Dchannel | - | - | Donchian | - |
| **Double Exponential Moving Average** | [Dema](../lib/trends/dema/dema.md) | ✅ | ✅ | ✅ | ✅ |
| **Double Weighted Moving Average** | [Dwma](../lib/trends/dwma/dwma.md) | - | - | - | - |
| **Ease of Movement** | Eome | - | - | - | - |
| **Ehlers Autocorrelation Periodogram** | Eacp | - | - | - | - |
| **Ehlers Bandpass Filter** | Bpf | - | - | - | - |
| **Ehlers Center of Gravity** | Cg | - | - | - | - |
| **Ehlers Even Better Sinewave** | Ebsw | - | - | - | - |
| **Ehlers Fractal Adaptive MA** | Frama | - | - | - | - |
| **Ehlers Highpass Filter** | Hpf | - | - | - | - |
| **Ehlers Phasor Analysis** | Phasor | - | - | - | - |
| **Ehlers Sine Wave** | Sine | - | - | - | - |
| **Ehlers SSF-Based Detrended Synthetic Price** | Ssfdsp | - | - | - | - |
| **Ehlers Super Smooth Filter** | Ssf | - | - | - | - |
| **Ehlers Ultrasmooth Filter** | Usf | - | - | - | - |
| **Elliptic (Cauer) Filter** | Elliptic | - | - | - | - |
| **Endpoint Moving Average** | Epma | - | - | Epma | - |
| **Exponential Moving Average** | [Ema](../lib/trends/ema/ema.md) | ✅ | ✅ | ✅ | ✅ |
| **Exponential Transformation** | Exp | - | - | - | - |
| **Exponential Weighted MA Volatility** | Ewma | - | - | - | - |
| **Extended Traditional Pivots** | Pivotext | - | - | - | - |
| **Fibonacci Pivot Points** | Pivotfib | - | - | - | - |
| **Fisher Transform** | Fisher | - | fisher | FisherTransform | - |
| **Force Index** | Efi | - | - | ForceIndex | - |
| **Fractal Chaos Bands** | Fcb | - | - | Fcb | - |
| **Garman-Klass Volatility** | Gkv | - | - | - | - |
| **Gaussian Filter** | Gauss | - | - | - | - |
| **Gaussian-Weighted MA** | Gwma | - | - | - | - |
| **Geometric Mean** | Geomean | - | - | - | - |
| **Granger Causality Test** | Granger | - | - | - | - |
| **Hamming Window MA** | Hamma | - | - | - | - |
| **Hann FIR Filter** | Hann | - | - | - | - |
| **Hanning Window MA** | Hanma | - | - | - | - |
| **Harmonic Mean** | Harmean | - | - | - | - |
| **High-Low Volatility** | Hlv | - | - | - | - |
| **Highest value** | Highest | - | - | - | - |
| **Hilbert Transform Dominant Cycle Period** | Ht_dcperiod | HT_DCPERIOD | - | - | - |
| **Hilbert Transform Dominant Cycle Phase** | Ht_dcphase | HT_DCPHASE | - | - | - |
| **Hilbert Transform Instantaneous Trend** | [Htit](../lib/trends/htit/htit.md) | ✅ | - | ✅ | ✅ |
| **Hilbert Transform Phasor** | Ht_phasor | HT_PHASOR | - | - | - |
| **Hilbert Transform Sine Wave** | Ht_sine | HT_SINE | msw | - | - |
| **Hilbert Transform Trend Mode** | Ht_trendmode | HT_TRENDMODE | - | - | - |
| **Historical Volatility** | Hv | - | - | - | - |
| **Hodrick-Prescott Filter** | Hp | - | - | - | - |
| **Holt Weighted MA** | Hwma | - | - | - | - |
| **Homodyne Discriminator Dominant Cycle** | Homod | - | - | - | - |
| **Huber Loss** | Huber | - | - | - | - |
| **Hull Exponential MA** | Hema | - | - | - | - |
| **Hull Moving Average** | [Hma](../lib/trends/hma/hma.md) | - | ✅ | ✅ | - |
| **Hurst Exponent** | Hurst | - | - | Hurst | - |
| **Ichimoku Cloud** | Ichimoku | - | - | Ichimoku | - |
| **Inertia** | Inertia | - | - | - | - |
| **Interquartile Range** | Iqr | - | - | - | - |
| **Intraday Intensity Index** | Iii | - | - | - | - |
| **Intraday Momentum Index** | Imi | - | - | - | - |
| **Jarque-Bera Test** | Jb | - | - | - | - |
| **Jurik Moving Average** | [Jma](../lib/trends/jma/jma.md) | - | - | - | - |
| **Jurik Volatility** | Jvolty | - | - | - | - |
| **Jurik Volatility Bands** | Jbands | - | - | - | - |
| **Jurik Volatility Normalized [0,1]** | Jvoltyn | - | - | - | - |
| **Kalman Filter** | Kf | - | - | - | - |
| **Kaufman Adaptive Moving Average** | [Kama](../lib/trends/kama/kama.md) | KAMA | kama | ✅ | ✅ |
| **KDJ Indicator** | Kdj | - | - | - | - |
| **Keltner Channel** | Kchannel | - | - | Keltner | - |
| **Kendall Rank Correlation** | Kendall | - | - | - | - |
| **Klinger Volume Oscillator** | Kvo | - | kvo | Kvo | - |
| **Kurtosis** | Kurtosis | - | - | - | - |
| **Least Squares Moving Average** | [Lsma](../lib/trends/lsma/lsma.md) | LINEARREG | - | ✅ | - |
| **Linear Regression** | Linreg | LINEARREG | linreg | Slope | - |
| **Linear Transformation** | Linear | - | - | - | - |
| **Linear Trend MA** | Ltma | - | - | - | - |
| **LOESS/LOWESS Smoothing** | Loess | - | - | - | - |
| **Logarithmic Transformation** | Log | - | - | - | - |
| **Logistic Function** | Sigmoid | - | - | - | - |
| **Lowest value** | Lowest | - | - | - | - |
| **Lunar Phase** | Lunar | - | - | - | - |
| **Mass Index** | Mass | - | mass | - | - |
| **McGinley Dynamic** | [Mgdi](../lib/trends/mgdi/mgdi.md) | - | - | ✅ | ✅ |
| **Mean Absolute Error** | Mae | - | - | - | - |
| **Mean Absolute Percentage Difference** | Mapd | - | - | - | - |
| **Mean Absolute Percentage Error** | Mape | - | - | - | - |
| **Mean Absolute Scaled Error** | Mase | - | - | - | - |
| **Mean Error** | Me | - | - | - | - |
| **Mean Percentage Error** | Mpe | - | - | - | - |
| **Mean Squared Error** | Mse | - | - | - | - |
| **Mean Squared Logarithmic Error** | Msle | - | - | - | - |
| **Median (Statistical)** | Median | - | - | - | - |
| **MESA Adaptive Moving Average** | [Mama](../lib/trends/mama/mama.md) | MAMA | - | ✅ | ✅ |
| **Min-Max Channel** | Mmchannel | - | - | - | - |
| **Min-Max Scaling (Normalization)** | Normalize | - | - | - | - |
| **Mode (Most Frequent)** | Mode | - | - | - | - |
| **Modified MA** | Mma | - | - | - | - |
| **Momentum** | Mom | MOM | mom | - | - |
| **Momentum change; 2nd derivative** | Accel | - | - | - | - |
| **Money Flow Index** | Mfi | MFI | mfi | Mfi | - |
| **Moon Phase** | Moon | - | - | - | - |
| **Moving Average Convergence/Divergence** | Macd | MACD | macd | Macd | - |
| **Moving Average Envelopes** | Maenv | - | - | MaEnvelopes | - |
| **Negative Volume Index** | Nvi | - | nvi | - | - |
| **Normalized Average True Range** | Natr | NATR | natr | - | - |
| **Normalized Shannon Entropy** | Entropy | - | - | - | - |
| **Notch Filter** | Notch | - | - | - | - |
| **On Balance Volume** | Obv | OBV | obv | Obv | - |
| **Parabolic SAR** | Psar | SAR | psar | ParabolicSar | - |
| **Parkinson Volatility** | Pv | - | - | - | - |
| **Pascal Weighted Moving Average** | [Pwma](../lib/trends/pwma/pwma.md) | - | - | - | ✅ |
| **Percentage Change** | Change | - | - | - | - |
| **Percentage Price Oscillator** | Ppo | PPO | ppo | - | - |
| **Percentage Volume Oscillator** | Pvo | - | - | Pvo | - |
| **Percentile** | Percentile | - | - | - | - |
| **Pivot Points** | Pivot | - | - | PivotPoints | - |
| **Positive Volume Index** | Pvi | - | pvi | - | - |
| **Pretty Good Oscillator** | Pgo | - | - | - | - |
| **Price Channel** | Pchannel | - | - | - | - |
| **Price Momentum Oscillator** | Pmo | - | - | Pmo | - |
| **Price Relative Strength** | Prs | - | - | Prs | - |
| **Price Volume Divergence** | Pvd | - | - | - | - |
| **Price Volume Rank** | Pvr | - | - | - | - |
| **Price Volume Trend** | Pvt | - | - | - | - |
| **Qstick Indicator** | Qstick | - | - | - | - |
| **Quadruple Exponential MA** | Qema | - | - | - | - |
| **Quantile** | Quantile | - | - | - | - |
| **Rate of acceleration; 3rd derivative** | Jolt | - | - | - | - |
| **Rate of Change** | Roc | ROC | roc | Roc | - |
| **Rate of change; 1st derivative** | Slope | - | - | - | - |
| **Rate of Change Percentage** | Rocp | ROCP | - | - | - |
| **Rate of Change Ratio** | Rocr | ROCR | rocr | - | - |
| **Realized Volatility** | Rv | - | - | - | - |
| **Rectified Linear Unit** | Relu | - | - | - | - |
| **Recursive Gaussian MA** | Rgma | - | - | - | - |
| **Regression Channels** | Regchannel | - | - | - | - |
| **Regularized Exponential MA** | Rema | - | - | - | - |
| **Relative Absolute Error** | Rae | - | - | - | - |
| **Relative Squared Error** | Rse | - | - | - | - |
| **Relative Strength Index** | Rsi | RSI | rsi | Rsi | - |
| **Relative Strength Quality Index** | [Rsx](../lib/momentum/rsx/rsx.md) | - | - | - | - |
| **Relative Volatility Index** | Rvi | - | - | - | - |
| **Renko** | - | - | - | Renko | - |
| **Rogers-Satchell Volatility** | Rsv | - | - | - | - |
| **Root Mean Squared Error** | Rmse | - | - | - | - |
| **Root Mean Squared Logarithmic Error** | Rmsle | - | - | - | - |
| **R-Squared** | Rsquared | - | - | - | - |
| **Savitzky-Golay Filter** | Sgf | - | - | - | - |
| **Savitzky-Golay MA** | Sgma | - | - | - | - |
| **Schaff Trend Cycle** | Stc | - | - | Stc | - |
| **Simple Moving Average** | [Sma](../lib/trends/sma/sma.md) | ✅ | ✅ | ✅ | ✅ |
| **Sine-weighted MA** | Sinema | - | - | - | - |
| **Skewness** | Skew | - | - | - | - |
| **Smoothed Moving Average** | [Rma](../lib/trends/rma/rma.md) | - | wilders | ✅ | ✅ |
| **Solar Activity Cycle** | Solar | - | - | - | - |
| **Spearman Rank Correlation** | Spearman | - | - | - | - |
| **Square Root Transformation** | Sqrt | - | - | - | - |
| **Standard Deviation** | Stddev | STDDEV | stddev | StdDev | - |
| **Standard Deviation Channel** | Sdchannel | - | - | - | - |
| **Standardization (Z-score)** | Standardize | - | - | - | - |
| **Starc Bands** | Starc | - | - | - | - |
| **Stochastic Fast** | Stochf | STOCHF | - | - | - |
| **Stochastic Momentum Index** | Smi | - | - | Smi | - |
| **Stochastic Oscillator** | Stoch | STOCH | stoch | Stoch | - |
| **Stochastic RSI** | Stochrsi | STOCHRSI | stochrsi | StochRsi | - |
| **Stoller Average Range Channel** | Starchannel | - | - | - | - |
| **Super Trend Bands** | Stbands | - | - | - | - |
| **SuperTrend** | [Super](../lib/trends/super/super.md) | - | - | ✅ | - |
| **Swing High/Low Detection** | Swings | - | - | - | - |
| **Symmetric Mean Absolute Percentage Error** | Smape | - | - | - | - |
| **T3 Moving Average** | [T3](../lib/trends/t3/t3.md) | ✅ | - | ✅ | ✅ |
| **Theil Index** | Theil | - | - | - | - |
| **Time Series Forecast** | Tsf | TSF | tsf | - | - |
| **Time Weighted Average Price** | Twap | - | - | - | - |
| **Trade Volume Index** | Tvi | - | - | - | - |
| **Triangular Moving Average** | [Trima](../lib/trends/trima/trima.md) | ✅ | ✅ | ✅ | - |
| **Triple Exponential Average** | Trix | TRIX | trix | Trix | - |
| **Triple Exponential Moving Average** | [Tema](../lib/trends/tema/tema.md) | ✅ | ✅ | ✅ | - |
| **True Range** | Tr | TRANGE | tr | Tr | - |
| **True Strength Index** | Tsi | - | - | Tsi | - |
| **TTM Trend** | Ttm | - | - | - | - |
| **Two-Argument Arctangent** | Atan2 | - | - | - | - |
| **Ulcer Index** | Ui | - | - | UlcerIndex | - |
| **Ultimate Bands** | Ubands | - | - | - | - |
| **Ultimate Channel** | Uchannel | - | - | - | - |
| **Ultimate Oscillator** | Ultosc | ULTOSC | ultosc | Ultimate | - |
| **Variable Index Dynamic Average** | [Vidya](../lib/trends/vidya/vidya.md) | - | vidya | - | - |
| **Variance** | Variance | VAR | var | - | - |
| **Velocity (Jurik)** | [Vel](../lib/momentum/vel/vel.md) | - | - | - | - |
| **Volatility Adjusted Moving Average** | Vama | - | - | - | - |
| **Volatility of Volatility** | Vov | - | - | - | - |
| **Volatility Ratio** | Vr | - | - | - | - |
| **Volume Accumulation** | Va | - | - | - | - |
| **Volume Force** | Vf | - | - | - | - |
| **Volume Oscillator** | Vo | - | vosc | - | - |
| **Volume Rate of Change** | Vroc | - | - | - | - |
| **Volume Weighted Accumulation/Distribution** | Vwad | - | - | - | - |
| **Volume Weighted Average Price** | Vwap | - | - | Vwap | - |
| **Volume Weighted Moving Average** | Vwma | - | vwma | Vwma | - |
| **Vortex Indicator** | Vortex | - | - | Vortex | - |
| **VWAP Bands** | Vwapbands | - | - | - | - |
| **VWAP with Standard Deviation Bands** | Vwapsd | - | - | - | - |
| **Weighted Moving Average** | [Wma](../lib/trends/wma/wma.md) | ✅ | ✅ | ✅ | ✅ |
| **Wiener Filter** | Wiener | - | - | - | - |
| **Williams %R** | Willr | WILLR | willr | WilliamsR | - |
| **Williams Accumulation/Distribution** | Wad | - | wad | - | - |
| **Williams Alligator** | Alligator | - | - | Alligator | - |
| **Williams Fractal** | Fractals | - | - | Fractal | - |
| **Woodie's Pivot Points** | Pivotwood | - | - | - | - |
| **Yang-Zhang Volatility** | Yzv | - | - | - | - |
| **Yang-Zhang Volatility Adjusted MA** | Yzvama | - | - | - | - |
| **Zero-Lag Double Exponential MA** | Zldema | - | - | - | - |
| **Zero-Lag Exponential Moving Average** | Zlema | - | zlema | - | - |
| **Zero-Lag Triple Exponential MA** | Zltema | - | - | - | - |
| **ZigZag** | - | - | - | ZigZag | - |
| **Z-score standardization** | Zscore | - | - | - | - |
| **Z-Test** | Ztest | - | - | - | - |