- Implemented the Standardize class for calculating Z-Score normalization over a specified lookback period. - Updated NDepend badge SVG files to reflect new metrics. - Modified NDepend project files to reference the updated solution file name. - Removed outdated documentation files related to indicator proposals and channel documentation remediation. - Updated workspace configuration to point to the new solution file.
3.3 KiB
TSI: True Strength Index
The True Strength Index (TSI) is a momentum oscillator developed by William Blau that uses double-smoothed exponential moving averages of price momentum to reduce noise and identify trend strength and direction.
Historical Context
William Blau introduced the TSI in his 1995 book "Momentum, Direction, and Divergence." The indicator was designed to provide a smoother momentum measure by applying double exponential smoothing to price changes, reducing the whipsaws common in simpler momentum indicators.
Algorithm and Implementation
1. Momentum Calculation
mom = Price - Price[1]
absMom = |mom|
Price momentum captures the direction and magnitude of price change.
2. Double EMA Smoothing
// First smoothing with long period
smoothedMomLong = EMA(mom, longPeriod)
smoothedAbsMomLong = EMA(absMom, longPeriod)
// Second smoothing with short period
doubleSmoothedMom = EMA(smoothedMomLong, shortPeriod)
doubleSmoothedAbsMom = EMA(smoothedAbsMomLong, shortPeriod)
Double smoothing reduces noise while preserving trend information.
3. TSI Calculation
TSI = 100 × doubleSmoothedMom / doubleSmoothedAbsMom
The ratio normalizes momentum to a percentage scale.
4. Signal Line
Signal = EMA(TSI, signalPeriod)
The signal line provides crossover signals.
Mathematical Formula
Core Formula
TSI = 100 \times \frac{EMA(EMA(Price_t - Price_{t-1}, long), short)}{EMA(EMA(|Price_t - Price_{t-1}|, long), short)}
Signal Line
Signal = EMA(TSI, signalPeriod)
Default Parameters
- Long Period: 25
- Short Period: 13
- Signal Period: 13
Interpretation
Range
- TSI oscillates between -100 and +100
- Positive values indicate bullish momentum
- Negative values indicate bearish momentum
Signals
- Zero Line Crossover: TSI crossing above zero is bullish; below zero is bearish
- Signal Line Crossover: TSI crossing above signal is bullish; below is bearish
- Divergence: Price and TSI moving in opposite directions suggests trend reversal
Overbought/Oversold
- Commonly used levels: +25/-25 or +30/-30
- Extreme readings suggest potential reversal
Performance Characteristics
Operation Count (Streaming Mode)
| Operation | Count |
|---|---|
| Subtractions | 1 |
| Absolute value | 1 |
| EMA updates | 5 |
| Division | 1 |
| Multiplication | 1 |
Complexity
- Time: O(1) per bar (streaming)
- Space: O(1) - only EMA states maintained
Warmup Period
warmupPeriod = longPeriod + shortPeriod + signalPeriod
Default: 25 + 13 + 13 = 51 bars
Validation
Cross-validated against:
- TradingView's ta.tsi()
- Stock.Indicators library
- TA-Lib implementations
Common Pitfalls
- Short Warmup: Ensure sufficient warmup period for convergence
- Division by Zero: When no price movement, denominator approaches zero
- Lag Inherent: Double smoothing introduces lag in trend identification
- Parameter Sensitivity: Results vary significantly with period choices
References
- Blau, William. "Momentum, Direction, and Divergence." Wiley, 1995
- Blau, William. "True Strength Index." Technical Analysis of Stocks & Commodities, 1991
- TradingView TSI Documentation