6.3 KiB
USI: Ehlers Ultimate Strength Index
Where RSI plods with Wilder's smoothing, USI sprints with the UltimateSmoother — symmetric, lag-free, and ready for the modern trader.
| Property | Value |
|---|---|
| Category | Oscillator |
| Inputs | Source (close) |
| Parameters | period (default 28) |
| Outputs | Single series (Usi) |
| Output range | Bounded [-1, +1] |
| Warmup | period + 4 bars |
| PineScript | usi.pine |
- USI (Ultimate Strength Index) replaces the RSI's Wilder smoothing with Ehlers' UltimateSmoother filter, producing a symmetric oscillator bounded [-1, +1] with significantly reduced lag.
- Similar: RSI, RRSI, RSIH | Complementary: ADX for trend confirmation | Trading note: Bullish above 0, bearish below 0; ±0.4 levels indicate strong momentum. Typically uses longer periods than RSI (28 vs 14) for comparable behavior.
- No external validation libraries implement USI. Validated through self-consistency and behavioral testing.
USI is Ehlers' 2024 reimagining of the classic RSI. Instead of Wilder's exponential smoothing, it applies the UltimateSmoother filter — which subtracts high-frequency noise via a highpass filter — to the short-term average of upward and downward price movements. The result is an oscillator that responds to trend changes faster than RSI while maintaining comparable smoothness with a longer lookback.
Historical Context
John F. Ehlers published the Ultimate Strength Index in the November 2024 issue of Technical Analysis of Stocks & Commodities magazine under the title "Ultimate Strength Index (USI)." The article presents USI as a direct replacement for Wilder's RSI, leveraging the UltimateSmoother filter (introduced earlier in April 2024 TASC) to achieve dramatically reduced lag. Unlike RSI's 0-100 range, USI is centered at zero with a [-1, +1] range, making bullish/bearish conditions immediately apparent.
Architecture & Physics
Stage 1: Strength Extraction
\text{SU} = \max(0, \text{Close} - \text{Close}[1])
\text{SD} = \max(0, \text{Close}[1] - \text{Close})
Simple decomposition of price changes into upward (SU) and downward (SD) components, identical to the RSI approach.
Stage 2: Short-Term Averaging (SMA-4)
\text{avgSU} = \frac{1}{4}\sum_{k=0}^{3}\text{SU}[k]
\text{avgSD} = \frac{1}{4}\sum_{k=0}^{3}\text{SD}[k]
A 4-bar simple moving average smooths the binary SU/SD signals into continuous streams before the UltimateSmoother processes them.
Stage 3: UltimateSmoother Filter
\arg = \frac{\sqrt{2}\pi}{\text{period}}
a_1 = e^{-\arg}, \quad c_2 = 2a_1\cos(\arg), \quad c_3 = -a_1^2
c_1 = \frac{1 + c_2 - c_3}{4}
\text{USU} = (1 - c_1) \cdot \text{avgSU} + (2c_1 - c_2) \cdot \text{avgSU}[1] - (c_1 + c_3) \cdot \text{avgSU}[2] + c_2 \cdot \text{USU}[1] + c_3 \cdot \text{USU}[2]
\text{USD} = (1 - c_1) \cdot \text{avgSD} + (2c_1 - c_2) \cdot \text{avgSD}[1] - (c_1 + c_3) \cdot \text{avgSD}[2] + c_2 \cdot \text{USD}[1] + c_3 \cdot \text{USD}[2]
The same UltimateSmoother IIR filter is applied independently to both the SU and SD paths.
Stage 4: Symmetric Normalization
\text{USI} = \frac{\text{USU} - \text{USD}}{\text{USU} + \text{USD}}, \quad \text{when USU} > \varepsilon \text{ and USD} > \varepsilon
The normalization produces a [-1, +1] range (unlike RSI's [0, 100]). When the denominator is near zero or either component is below the minimum threshold (ε = 0.01), the previous USI value is held.
Performance Profile
Operation Count (Streaming Mode, Scalar)
| Step | Multiplications | Additions | Total |
|---|---|---|---|
| SU/SD extraction | 0 | 1 comparison + 1 subtraction | 2 |
| SMA(4) buffer update | 1 | 3 | 4 |
| USF for SU path | 5 FMA | 0 | 5 |
| USF for SD path | 5 FMA | 0 | 5 |
| Normalization | 1 | 2 | 3 |
| Total | ~12 | ~6 | ~19 ops |
Batch Mode (SIMD Analysis)
The UltimateSmoother is an IIR filter (output depends on previous outputs), limiting SIMD vectorization. However, the SU/SD extraction and SMA averaging stages could benefit from SIMD in large batches. Current implementation uses scalar FMA for maximum precision.
Quality Metrics
| Metric | Value |
|---|---|
| Complexity | O(1) per bar |
| Memory | ~160 bytes (State struct, no heap) |
| Allocations | Zero in hot path |
| FMA usage | 10 FMA operations (5 per USF path) |
Validation
| Method | Result |
|---|---|
| 4-API consistency | Streaming, batch TSeries, batch Span, Calculate all match |
| Bar correction | State rollback via _s/_ps pattern |
| Constant input | USI → 0 (equal SU and SD after smoothing converges) |
| Monotonic trend | USI → +1 (all SU, no SD) |
| Monotonic downtrend | USI → -1 (all SD, no SU) |
| NaN handling | Non-finite inputs substituted with last valid value |
| Bounded output | Always in [-1, +1] after warmup |
Behavioral Test Summary
| Test | Expected |
|---|---|
| Constant series | USI = 0 (no strength differential) |
| Strong uptrend | USI approaches +1 |
| Strong downtrend | USI approaches -1 |
| Alternating up/down | USI oscillates near 0 |
| Long period smoother | Slower, less noisy response |
| Short period sharper | Faster, more responsive |
Common Pitfalls
- Period too short: With period < 10, the UltimateSmoother provides insufficient smoothing and USI becomes noisy.
- Comparing to RSI periods: USI typically needs a longer period than RSI for comparable behavior (28 vs 14 is a common mapping).
- Zero-denominator regime: When prices are flat (both USU and USD near zero), USI holds its previous value rather than computing an undefined ratio.
- Bootstrap phase: The first ~8 bars use pass-through instead of the IIR filter, producing unreliable values during warmup.
References
- Ehlers, J.F. (2024). "Ultimate Strength Index (USI)." Technical Analysis of Stocks & Commodities, November 2024.
- Ehlers, J.F. (2024). "The Ultimate Smoother." Technical Analysis of Stocks & Commodities, March/April 2024.
- PineScript implementation: usi.pine