mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-24 13:38:05 +00:00
124 lines
3.3 KiB
Markdown
124 lines
3.3 KiB
Markdown
# 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
|
|||
|
|
|
|||
|
|
```csharp
|
|||
|
|
mom = Price - Price[1]
|
|||
|
|
absMom = |mom|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Price momentum captures the direction and magnitude of price change.
|
|||
|
|
|
|||
|
|
### 2. Double EMA Smoothing
|
|||
|
|
|
|||
|
|
```csharp
|
|||
|
|
// 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
|
|||
|
|
|
|||
|
|
```csharp
|
|||
|
|
TSI = 100 × doubleSmoothedMom / doubleSmoothedAbsMom
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
The ratio normalizes momentum to a percentage scale.
|
|||
|
|
|
|||
|
|
### 4. Signal Line
|
|||
|
|
|
|||
|
|
```csharp
|
|||
|
|
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
|
|||
|
|
|
|||
|
|
1. **Short Warmup**: Ensure sufficient warmup period for convergence
|
|||
|
|
2. **Division by Zero**: When no price movement, denominator approaches zero
|
|||
|
|
3. **Lag Inherent**: Double smoothing introduces lag in trend identification
|
|||
|
|
4. **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](https://www.tradingview.com/support/solutions/43000502302-true-strength-index-tsi/)
|