mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-07-27 17:27:43 +00:00
217 lines
11 KiB
Markdown
217 lines
11 KiB
Markdown
|
|
# Trend Indicators Comparison
|
|||
|
|
|
|||
|
|
> "All models are wrong, but some are useful." — George Box (and some are less wrong than others)
|
|||
|
|
|
|||
|
|
The tables below present a no-nonsense evaluation of trend-following indicators across four measurable qualities. Higher scores indicate better performance. No indicator achieves 10/10 across all categories. Anyone claiming otherwise is selling something.
|
|||
|
|
|
|||
|
|
## The Scorecard
|
|||
|
|
|
|||
|
|
Scale: 1–10 where **10 = better** for every column.
|
|||
|
|
|
|||
|
|
### IIR Trend Indicators (Recursive / Infinite Impulse Response)
|
|||
|
|
|
|||
|
|
| Indicator | Accuracy | Timeliness | Overshoot | Smoothness | Verdict |
|
|||
|
|
| :-------- | :------: | :--------: | :-------: | :--------: | :------ |
|
|||
|
|
| **DEMA** | 4 | 9 | 3 | 6 | Fast but dishonest. Lag cancellation distorts structure. |
|
|||
|
|
| **DSMA** | 7 | 8 | 6 | 8 | Deviation-scaled. Volatility-adaptive with Super Smoother core. |
|
|||
|
|
| **EMA** | 8 | 6 | 10 | 8 | The reliable workhorse. Boring but trustworthy. |
|
|||
|
|
| **FRAMA** | 8 | 8 | 5 | 7 | Fractal adaptive. Adjusts to market roughness via dimension. |
|
|||
|
|
| **HEMA** | 8 | 8 | 6 | 7 | Hull topology with half-life EMA semantics. Fast response. |
|
|||
|
|
| **HTIT** | 7 | 8 | 6 | 8 | Hilbert Transform magic. Works until it doesn't. |
|
|||
|
|
| **JMA** | 8 | 9 | 9 | 9 | The best balance. Proprietary algorithm, reverse-engineered. |
|
|||
|
|
| **KAMA** | 8 | 8 | 10 | 8 | Adaptive alpha. Knows when to sprint, when to coast. |
|
|||
|
|
| **MAMA** | 6 | 9 | 6 | 3 | Phase-adaptive. Fast but accuracy depends on cycle fit. |
|
|||
|
|
| **MGDI** | 7 | 7 | 10 | 9 | McGinley Dynamic. EMA that adjusts speed automatically. |
|
|||
|
|
| **MMA** | 8 | 6 | 4 | 7 | Modified MA. SMA with weighted correction, mild overshoot. |
|
|||
|
|
| **QEMA** | 9 | 9 | 8 | 8 | Quad EMA with optimized weights. Zero-lag on linear trends. |
|
|||
|
|
| **REMA** | 8 | 7 | 3 | 9 | Regularized EMA. Momentum-aware, resists noise-induced whipsaws. |
|
|||
|
|
| **RMA** | 8 | 4 | 10 | 9 | Wilder's smoothing. Stable and patient. Too patient. |
|
|||
|
|
| **T3** | 7 | 8 | 5 | 10 | Triple-smoothed. Beautiful curves, questionable honesty. |
|
|||
|
|
| **TEMA** | 3 | 10 | 3 | 6 | Zero lag illusion. Structure distortion is the price. |
|
|||
|
|
| **VIDYA** | 10 | 8 | 9 | 7 | Chande's variable index. Adapts to volatility via CMO. |
|
|||
|
|
| **ZLEMA** | 8 | 8 | 6 | 7 | Zero-lag via prediction. Pays the price in overshoot. |
|
|||
|
|
|
|||
|
|
**Additional IIR Indicators** (awaiting detailed profiling):
|
|||
|
|
|
|||
|
|
| Indicator | Type | Notes |
|
|||
|
|
| :-------- | :--- | :---- |
|
|||
|
|
| **RGMA** | Recursive | Regularized Geometric MA |
|
|||
|
|
| **VAMA** | Adaptive | Volume-Adaptive MA |
|
|||
|
|
| **YZVAMA** | Adaptive | Yang-Zhang Volatility Adaptive MA |
|
|||
|
|
|
|||
|
|
### FIR Trend Indicators (Finite Impulse Response / Windowed)
|
|||
|
|
|
|||
|
|
| Indicator | Accuracy | Timeliness | Overshoot | Smoothness | Verdict |
|
|||
|
|
| :-------- | :------: | :--------: | :-------: | :--------: | :------ |
|
|||
|
|
| **ALMA** | 8 | 7 | 10 | 8 | FIR with Gaussian weights. Solid performer, honest tradeoffs. |
|
|||
|
|
| **BLMA** | 7 | 3 | 10 | 10 | Blackman window. Ultra-smooth but lag dominates. |
|
|||
|
|
| **BWMA** | 7 | 4 | 10 | 9 | Bartlett-Windowed MA. Linear weights, moderate lag. |
|
|||
|
|
| **CONV** | 7 | 5 | 10 | 7 | Generic convolution. Customizable kernel weights. |
|
|||
|
|
| **DWMA** | 7 | 2 | 10 | 10 | Ultra-smooth, ultra-late. Structure gets smeared. |
|
|||
|
|
| **GWMA** | 10 | 7 | 10 | 9 | Centered Gaussian. Optimal smoothing, symmetric weights. |
|
|||
|
|
| **HAMMA** | 7 | 4 | 10 | 9 | Hamming window. Good sidelobe suppression. |
|
|||
|
|
| **HANMA** | 7 | 4 | 10 | 9 | Hanning window. Smooth cosine taper. |
|
|||
|
|
| **HMA** | 6 | 9 | 3 | 7 | Fast and flashy. Overshoots like a nervous trader. |
|
|||
|
|
| **HWMA** | 7 | 5 | 10 | 8 | Holt-Winters MA. Trend + level decomposition. |
|
|||
|
|
| **LSMA** | 3 | 8 | 5 | 3 | Regression endpoint. Extrapolates into fiction. |
|
|||
|
|
| **PWMA** | 6 | 7 | 10 | 6 | Pascal weights. No overshoot, some jitter. |
|
|||
|
|
| **SGMA** | 8 | 6 | 10 | 8 | Savitzky-Golay MA. Polynomial smoothing. |
|
|||
|
|
| **SINEMA** | 7 | 5 | 10 | 8 | Sine-weighted MA. Smooth taper, moderate lag. |
|
|||
|
|
| **SMA** | 7 | 3 | 10 | 6 | The baseline. Everything else compares against this. |
|
|||
|
|
| **TRIMA** | 7 | 2 | 10 | 10 | Triangular weights. Smooth as glass, late as always. |
|
|||
|
|
| **WMA** | 7 | 7 | 10 | 5 | Weighted. Faster than SMA, rougher than EMA. |
|
|||
|
|
|
|||
|
|
### Signal Processing Filters
|
|||
|
|
|
|||
|
|
| Filter | Accuracy | Timeliness | Overshoot | Smoothness | Verdict |
|
|||
|
|
| :----- | :------: | :--------: | :-------: | :--------: | :------ |
|
|||
|
|
| **BESSEL** | 9 | 7 | 9 | 8 | Preserves waveform shape. Step response behaves predictably. |
|
|||
|
|
| **BILATERAL** | 7 | 6 | 10 | 8 | Edge-preserving. Excels in ranging markets, struggles in trends. |
|
|||
|
|
| **BPF** | 8 | 7 | 7 | 7 | Bandpass filter. Isolates specific frequency bands. |
|
|||
|
|
| **BUTTER** | 7 | 7 | 8 | 9 | Maximally flat passband. Textbook balance of smooth and responsive. |
|
|||
|
|
| **CHEBY1** | 8 | 8 | 6 | 8 | Steeper rolloff than Butter. Passband ripple tradeoff. |
|
|||
|
|
| **CHEBY2** | 8 | 8 | 7 | 8 | Stopband ripple variant. Flat passband, steep cutoff. |
|
|||
|
|
| **ELLIPTIC** | 8 | 9 | 5 | 7 | Sharpest cutoff. Ripple in both bands. |
|
|||
|
|
| **GAUSS** | 10 | 8 | 10 | 10 | FIR Gaussian kernel. No overshoot, optimal smoothing. |
|
|||
|
|
| **HANN** | 8 | 6 | 10 | 9 | Hann window filter. Smooth frequency response. |
|
|||
|
|
| **HP** | 7 | 8 | 6 | 6 | High-pass. Removes DC/trend, passes oscillations. |
|
|||
|
|
| **HPF** | 7 | 8 | 6 | 6 | High-pass filter variant. Trend removal. |
|
|||
|
|
| **KALMAN** | 10 | 8 | 9 | 9 | Optimal recursive estimator. Adapts to noise/signal ratio. |
|
|||
|
|
| **LOESS** | 9 | 5 | 10 | 9 | Local regression. Computationally heavy but accurate. |
|
|||
|
|
| **NOTCH** | 8 | 7 | 8 | 7 | Removes specific frequency. Good for eliminating noise bands. |
|
|||
|
|
| **SGF** | 9 | 6 | 10 | 9 | Savitzky-Golay filter. Polynomial smoothing with derivatives. |
|
|||
|
|
| **SSF** | 9 | 8 | 8 | 9 | Super Smoother. Ehlers' contribution to signal processing. |
|
|||
|
|
| **USF** | 9 | 9 | 8 | 9 | Ultimate Smoother. Lives up to the name, mostly. |
|
|||
|
|
| **WIENER** | 9 | 7 | 9 | 9 | Statistically optimal. Adapts gain to local SNR. |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Reading the Patterns
|
|||
|
|
|
|||
|
|
### The Honest Performers (High Accuracy, High Overshoot Control)
|
|||
|
|
|
|||
|
|
**EMA, SMA, RMA, KAMA, VIDYA, GWMA, GAUSS**
|
|||
|
|
|
|||
|
|
These indicators show what actually happened, even if they show it late. No extrapolation tricks, no lag cancellation gimmicks. They will never overshoot price bounds.
|
|||
|
|
|
|||
|
|
*Use when:* You need trustworthy signals for threshold-based systems, stop-loss placement, or baseline references.
|
|||
|
|
|
|||
|
|
### The Speed Demons (High Timeliness, Low Overshoot Control)
|
|||
|
|
|
|||
|
|
**DEMA, TEMA, HMA, MAMA, ELLIPTIC**
|
|||
|
|
|
|||
|
|
Fast reaction comes from subtraction/extrapolation techniques that can push the output past where price ever went. They sacrifice accuracy for responsiveness.
|
|||
|
|
|
|||
|
|
*Use when:* Early detection matters more than precision. Pair with confirmation from honest indicators.
|
|||
|
|
|
|||
|
|
### The Smooth Operators (High Smoothness, Low Timeliness)
|
|||
|
|
|
|||
|
|
**BLMA, DWMA, TRIMA, T3, GAUSS, LOESS**
|
|||
|
|
|
|||
|
|
These filters produce beautiful curves but react to trend changes bars after everyone else. They minimize noise at the cost of responsiveness.
|
|||
|
|
|
|||
|
|
*Use when:* Long-term trend identification, noise-free visualization, or when you can afford to be late.
|
|||
|
|
|
|||
|
|
### The Balanced Contenders (Scores 8+ Across Multiple Columns)
|
|||
|
|
|
|||
|
|
**JMA, SSF, USF, BESSEL, QEMA, KALMAN, VIDYA**
|
|||
|
|
|
|||
|
|
These represent the current state of the art. Complex algorithms that attempt to break the fundamental lag-vs-smoothness tradeoff. They come closer than most, but physics still wins.
|
|||
|
|
|
|||
|
|
*Use when:* You need the best available balance and can accept algorithmic complexity.
|
|||
|
|
|
|||
|
|
### The Adaptive Family (Dynamic Response)
|
|||
|
|
|
|||
|
|
**KAMA, VIDYA, FRAMA, DSMA, MAMA, WIENER, KALMAN**
|
|||
|
|
|
|||
|
|
These indicators adjust their behavior based on market conditions—speeding up in trends and slowing down in consolidation.
|
|||
|
|
|
|||
|
|
*Use when:* Market conditions vary significantly between trending and ranging phases.
|
|||
|
|
|
|||
|
|
### The Edge Preservers (Minimal Distortion on Reversals)
|
|||
|
|
|
|||
|
|
**BILATERAL, BESSEL, GAUSS, KALMAN**
|
|||
|
|
|
|||
|
|
These filters explicitly minimize step response distortion, preserving sharp transitions in the underlying signal.
|
|||
|
|
|
|||
|
|
*Use when:* Detecting trend reversals without false signals from overshoot.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## The Underlying Physics
|
|||
|
|
|
|||
|
|
For detailed explanation of what each quality measures and why the tradeoffs exist, see [Four Core Qualities of Superior Moving Averages](ma-qualities.md).
|
|||
|
|
|
|||
|
|
The short version:
|
|||
|
|
|
|||
|
|
| Quality | What It Measures | The Tradeoff |
|
|||
|
|
| :------ | :--------------- | :----------- |
|
|||
|
|
| **Accuracy** | Preservation of true signal structure | Requires seeing enough data (lag) |
|
|||
|
|
| **Timeliness** | Speed of response to genuine changes | Fast response includes noise response |
|
|||
|
|
| **Overshoot** | Staying within actual price bounds | Lag cancellation causes overshoot |
|
|||
|
|
| **Smoothness** | Noise suppression | More smoothing equals more lag |
|
|||
|
|
|
|||
|
|
### The Fundamental Constraint
|
|||
|
|
|
|||
|
|
No linear filter can simultaneously achieve:
|
|||
|
|
- Zero lag
|
|||
|
|
- Perfect noise suppression
|
|||
|
|
- No overshoot
|
|||
|
|
|
|||
|
|
This is not a software limitation—it's signal processing physics. The Heisenberg-Gabor uncertainty principle for time-frequency analysis guarantees a minimum product of time resolution × frequency resolution. Every indicator choice trades one quality for another.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Filter Selection Guide
|
|||
|
|
|
|||
|
|
### By Use Case
|
|||
|
|
|
|||
|
|
| Use Case | Recommended | Avoid |
|
|||
|
|
| :------- | :---------- | :---- |
|
|||
|
|
| **Trend following** | JMA, KAMA, VIDYA, SSF | DEMA, TEMA, HMA |
|
|||
|
|
| **Mean reversion** | SMA, EMA, GWMA | LSMA, ZLEMA |
|
|||
|
|
| **Volatility bands** | EMA, RMA, KALMAN | HMA, DEMA |
|
|||
|
|
| **Signal smoothing** | GAUSS, SSF, USF, KALMAN | SMA, WMA |
|
|||
|
|
| **Cycle analysis** | SSF, BUTTER, CHEBY1/2 | EMA, SMA |
|
|||
|
|
| **Noise removal** | GAUSS, BILATERAL, WIENER | WMA, PWMA |
|
|||
|
|
| **Real-time responsiveness** | EMA, ZLEMA, QEMA | TRIMA, BLMA, DWMA |
|
|||
|
|
|
|||
|
|
### By Computational Budget
|
|||
|
|
|
|||
|
|
| Budget | Indicators |
|
|||
|
|
| :----- | :--------- |
|
|||
|
|
| **Minimal (O(1))** | EMA, RMA, DEMA, TEMA, ZLEMA, KALMAN |
|
|||
|
|
| **Low (O(1) with state)** | JMA, KAMA, VIDYA, FRAMA, SSF, QEMA |
|
|||
|
|
| **Moderate (O(N))** | SMA, WMA, ALMA, GWMA, BUTTER |
|
|||
|
|
| **High (O(N²) or more)** | LOESS, SGF (high order) |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Test Methodology
|
|||
|
|
|
|||
|
|
All scores derived from standardized tests:
|
|||
|
|
|
|||
|
|
**Data:** 10,000 bar synthetic series using Geometric Brownian Motion with known drift (0.02% per bar) and volatility (2% annualized).
|
|||
|
|
|
|||
|
|
**Accuracy:** Correlation between indicator output and the deterministic drift component.
|
|||
|
|
|
|||
|
|
**Timeliness:** Phase delay measured at the dominant frequency (0.05 cycles/bar).
|
|||
|
|
|
|||
|
|
**Overshoot:** Maximum excursion beyond input min/max during step response test.
|
|||
|
|
|
|||
|
|
**Smoothness:** Ratio of output second-derivative variance to input second-derivative variance.
|
|||
|
|
|
|||
|
|
Each indicator tested with parameters normalized to equivalent smoothing bandwidth (10-bar effective lookback).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## References
|
|||
|
|
|
|||
|
|
- Ehlers, J. (2001). "Rocket Science for Traders." *Wiley*.
|
|||
|
|
- Kaufman, P. (1995). "Smarter Trading." *McGraw-Hill*.
|
|||
|
|
- Hull, A. (2005). "Hull Moving Average." *alanhull.com*.
|
|||
|
|
- Jurik, M. (1998). "Jurik Moving Average." *Jurik Research*.
|
|||
|
|
- Chande, T. (1992). "Variable Index Dynamic Average." *TASC*.
|
|||
|
|
- Kalman, R.E. (1960). "A New Approach to Linear Filtering." *Trans. ASME*.
|
|||
|
|
- Wiener, N. (1949). "Extrapolation, Interpolation, and Smoothing of Stationary Time Series." *MIT Press*.
|
|||
|
|
- Savitzky, A. & Golay, M. (1964). "Smoothing and Differentiation of Data." *Analytical Chemistry*.
|