4.5 KiB
MAMA: MESA Adaptive Moving Average
"John Ehlers again. This time, he built a moving average that doesn't just adapt to volatility—it adapts to the phase of the market cycle. It's like having a GPS for your trend."
MAMA (MESA Adaptive Moving Average) is a unique adaptive moving average that uses the Hilbert Transform to determine the phase rate of change of the market cycle. It produces two outputs: MAMA (the adaptive average) and FAMA (Following Adaptive Moving Average), which acts as a slower, confirming signal.
Historical Context
Introduced by John Ehlers in MESA and Trading Market Cycles, MAMA was designed to solve the problem of lag in a fundamentally different way. Instead of using price volatility (like KAMA or VIDYA), it uses the cycle period. When the cycle is short (fast market), MAMA speeds up. When the cycle is long (slow market), MAMA slows down.
Architecture & Physics
The architecture is a direct application of the Hilbert Transform Homodyne Discriminator.
- Hilbert Transform: Decomposes price into In-Phase (I) and Quadrature (Q) components.
- Phase Calculation: Computes the phase angle from I and Q.
- Alpha Adaptation: The smoothing alpha is derived from the rate of change of the phase.
- Fast Phase Change = High Alpha (Fast MA).
- Slow Phase Change = Low Alpha (Slow MA).
Mathematical Foundation
1. Pre-Smoothing
A 4-tap FIR filter removes high-frequency noise (Nyquist limit) to prevent aliasing before the Hilbert Transform.
\text{Smooth}_t = \frac{4 P_t + 3 P_{t-1} + 2 P_{t-2} + P_{t-3}}{10}
2. Hilbert Transform & Detrending
The signal is detrended and split into In-Phase (I) and Quadrature (Q) components using a 7-tap Hilbert Transform. The coefficients are optimized for market cycles (10-40 bars) to minimize passband ripple.
\text{Adj} = 0.075 \cdot \text{Period}_{t-1} + 0.54
\text{Detrender}_t = \left( \frac{5}{52} S_t + \frac{15}{26} S_{t-2} - \frac{15}{26} S_{t-4} - \frac{5}{52} S_{t-6} \right) \cdot \text{Adj}
Q_t = \left( \frac{5}{52} D_t + \frac{15}{26} D_{t-2} - \frac{15}{26} D_{t-4} - \frac{5}{52} D_{t-6} \right) \cdot \text{Adj}
I_t = D_{t-3}
3. Homodyne Discriminator
The phase rate of change is calculated using the complex conjugate product of the current and previous phasors.
\Delta \text{Phase} = \arctan\left(\frac{I_t Q_{t-1} - Q_t I_{t-1}}{I_t I_{t-1} + Q_t Q_{t-1}}\right)
4. Adaptive Alpha
The smoothing factor \alpha is inversely proportional to the phase rate of change. When the phase changes rapidly (trend reversal or high volatility), \alpha increases (faster response). When the phase changes slowly (stable trend), \alpha decreases (more smoothing).
\alpha = \frac{\text{FastLimit}}{\Delta \text{Phase}}
\alpha = \max(\text{SlowLimit}, \min(\text{FastLimit}, \alpha))
5. MAMA & FAMA Calculation
MAMA is an adaptive EMA using the calculated \alpha. FAMA (Following Adaptive Moving Average) is a second adaptive EMA applied to MAMA, using half the \alpha.
\text{MAMA}_t = \alpha \cdot P_t + (1 - \alpha) \cdot \text{MAMA}_{t-1}
\text{FAMA}_t = 0.5 \alpha \cdot \text{MAMA}_t + (1 - 0.5 \alpha) \cdot \text{FAMA}_{t-1}
Performance Profile
MAMA is computationally intensive due to the trigonometry (Atan, Sin, Cos) involved in the Hilbert Transform.
| Metric | Score | Notes |
|---|---|---|
| Throughput | [N] ns/bar | Trigonometry involved |
| Allocations | 0 | Stack-based calculations only |
| Complexity | O(1) | Constant time update |
| Accuracy | 8/10 | Adapts to market cycle phase |
| Timeliness | 9/10 | Extremely fast response to phase shifts |
| Overshoot | 6/10 | Can overshoot on sudden cycle changes |
| Smoothness | 6/10 | Can be stepped/jagged in transitions |
Validation
Validated against Skender and Ooples.
| Library | Status | Notes |
|---|---|---|
| QuanTAlib | ✅ | Validated. |
| Skender | ⚠️ | Matches GetMama (High divergence due to precision) |
| Ooples | ⚠️ | Matches CalculateEhlersMotherOfAdaptiveMovingAverages (High divergence) |
| TA-Lib | N/A | Not implemented |
| Tulip | N/A | Not implemented. |
Common Pitfalls
- Crossover Signals: The MAMA/FAMA crossover is the primary signal. MAMA crossing over FAMA is bullish.
- Parameters:
FastLimitcontrols the maximum speed (usually 0.5).SlowLimitcontrols the minimum speed (usually 0.05). - Whipsaws: While adaptive, MAMA can still get chopped up in markets with no clear cycle (white noise).