4.3 KiB
HTIT: Hilbert Transform Instantaneous Trend
"John Ehlers brought rocket science to trading. Literally. HTIT uses signal processing to find the trend by removing the cycle. It's not smoothing; it's extraction."
HTIT (Hilbert Transform Instantaneous Trend) is a trend-following indicator that doesn't rely on simple averaging. Instead, it uses the Hilbert Transform to measure the dominant cycle period of the market and then computes a trendline that filters out that specific cycle. It adapts to the market's rhythm rather than imposing a fixed period.
Historical Context
John Ehlers, a pioneer in applying DSP to trading, introduced this in his book Rocket Science for Traders. He recognized that markets have cyclic components (noise) and trend components. By identifying the cycle, you can mathematically subtract it to reveal the pure trend.
Architecture & Physics
This is a complex, multi-stage signal processing pipeline:
- Smooth: 4-bar WMA to remove high-frequency noise.
- Detrend: High-pass filter to remove the DC component (trend) temporarily to isolate the cycle.
- Hilbert Transform: Compute In-Phase (I) and Quadrature (Q) components.
- Period Measurement: Use the phase rate of change (Homodyne Discriminator) to measure the dominant cycle period.
- Trend Extraction: Average the price over the measured dominant cycle period to cancel out the cycle.
Mathematical Foundation
The core idea is that if you average a sine wave over exactly one period, the result is 0.
\text{Trend}_t = \frac{1}{\text{DC}} \sum_{i=0}^{\text{DC}-1} P_{t-i}
Where \text{DC} is the measured Dominant Cycle period.
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)
\text{Period}_t = \frac{2\pi}{\Delta \text{Phase}}
4. Instantaneous Trend
The trend is extracted by averaging the price over the measured dominant cycle period.
\text{Trend}_t = \frac{1}{\text{Period}_t} \sum_{i=0}^{\text{Period}_t-1} P_{t-i}
Performance Profile
This is an O(1) algorithm, but the constant factor is large due to the many steps.
| Metric | Score | Notes |
|---|---|---|
| Throughput | [N] ns/bar | Heavy floating-point math per bar |
| Allocations | 0 | Stack-based calculations only |
| Complexity | O(1) | Pipeline depth is fixed |
| Accuracy | 9/10 | Extracts trend by removing cycle |
| Timeliness | 7/10 | Adapts, but has some lag |
| Overshoot | 8/10 | Generally good, stable trendline |
| Smoothness | 9/10 | Very smooth trendline |
Validation
Validated against Ehlers' original EasyLanguage code and Python ports.
| Library | Status | Notes |
|---|---|---|
| QuanTAlib | ✅ | Validated. |
| TA-Lib | ✅ | Matches HtTrendline exactly |
| Skender | ⚠️ | Matches GetHtTrendline (~0.32% diff) |
| Ooples | ⚠️ | Matches CalculateEhlersInstantaneousTrendlineV1 (~0.25% diff) |
| Tulip | N/A | Not implemented. |
Common Pitfalls
- Warmup: This indicator needs significant warmup (at least 12 bars, ideally 50+) for the feedback loops (period smoothing) to stabilize.
- Lag: While it adapts, the trendline still lags because it's essentially a dynamic SMA. The advantage is that the period is optimal for the current market condition.
- Complexity: Debugging this is a nightmare. Trust the math.