Files
QuanTAlib/lib/trends/super/Super.md
T
2025-12-18 13:51:06 -08:00

133 lines
5.0 KiB
Markdown

# SuperTrend: SuperTrend Indicator
## What It Does
The SuperTrend indicator is a popular trend-following tool that combines price action with volatility. It plots a line above or below the price to indicate the current trend direction and potential stop-loss levels. When the price is above the SuperTrend line, the trend is bullish (green). When the price is below the line, the trend is bearish (red).
## Historical Context
Created by Olivier Seban, the SuperTrend indicator was designed to be a simple, visual system for identifying trends and managing trailing stops. It gained massive popularity in retail trading communities due to its clear "buy/sell" visual nature and its ability to filter out minor fluctuations while keeping traders in major moves.
## How It Works
### The Core Idea
SuperTrend uses the Average True Range (ATR) to measure market volatility. It then calculates a "Basic Upper Band" and "Basic Lower Band" based on the average price (HL2) plus/minus a multiple of the ATR.
The "SuperTrend" line itself is a stateful logic that switches between the Upper and Lower bands based on price action:
- If price closes above the Upper Band, the trend flips to Bullish, and the line becomes the Lower Band.
- If price closes below the Lower Band, the trend flips to Bearish, and the line becomes the Upper Band.
### Mathematical Foundation
1. **ATR Calculation:** Calculate the Average True Range for period $N$.
2. **Basic Bands:**
$$ Upper_{basic} = \frac{High + Low}{2} + (Multiplier \times ATR) $$
$$ Lower_{basic} = \frac{High + Low}{2} - (Multiplier \times ATR) $$
3. **Final Bands (Trailing Logic):**
- $Upper_{final}$: If current $Upper_{basic} < prev Upper_{final}$ or $prev Close > prev Upper_{final}$, then $Upper_{basic}$, else $prev Upper_{final}$.
- $Lower_{final}$: If current $Lower_{basic} > prev Lower_{final}$ or $prev Close < prev Lower_{final}$, then $Lower_{basic}$, else $prev Lower_{final}$.
4. **SuperTrend Logic:**
- If Trend is Bullish: $SuperTrend = Lower_{final}$
- If Trend is Bearish: $SuperTrend = Upper_{final}$
### Implementation Details
Our implementation maintains the state of the trend and the trailing bands.
- **Complexity:** O(1) per update.
- **State:** Requires tracking the previous trend direction, previous final bands, and previous close.
## Configuration
| Parameter | Default | Purpose | Adjustment Guidelines |
|-----------|---------|---------|----------------------|
| Period | 10 | ATR Lookback | 10 is standard. Shorter = more volatile ATR. |
| Multiplier | 3.0 | Band width | 3.0 is standard. Lower (e.g., 2.0) = tighter stops, more signals. Higher (e.g., 4.0) = wider stops, fewer signals. |
## Performance Profile
| Operation | Complexity | Description |
|-----------|------------|-------------------|
| Streaming update | O(1) | ATR update + logic checks |
| Bar correction | O(1) | Efficient state rollback |
| Batch processing | O(N) | Single pass through data |
| Memory footprint | O(period) | RingBuffer for ATR calculation |
## Interpretation
### Trading Signals
#### Trend Reversal
- **Buy Signal:** Price closes above the SuperTrend line (Trend flips from Bearish to Bullish).
- **Sell Signal:** Price closes below the SuperTrend line (Trend flips from Bullish to Bearish).
#### Trailing Stop
- The SuperTrend line itself serves as an excellent trailing stop-loss level. In an uptrend, place stops just below the green line. In a downtrend, place stops just above the red line.
### When It Works Best
- **Trending Markets:** SuperTrend excels at capturing large moves and keeping you in the trade until the trend actually reverses.
### When It Struggles
- **Sideways Markets:** In choppy, range-bound markets, price will frequently cross the line, causing "whipsaws" (rapid buy/sell signals that result in losses).
## Architecture Notes
This implementation makes specific trade-offs:
### Choice: ATR Smoothing
- **Implementation:** Uses RMA (Wilder's Smoothing) for ATR calculation.
- **Rationale:** Standard definition of ATR uses RMA. Using SMA or EMA would deviate from the standard SuperTrend formula found on most platforms.
## References
- Seban, Olivier. "Tout le monde mérite d'être riche" (Everyone Deserves to Be Rich).
## C# Usage
### Streaming Updates (Single Instance)
```csharp
using QuanTAlib;
var super = new SuperTrend(period: 10, multiplier: 3.0);
// Process each new bar
TBar bar = new TBar(time, open, high, low, close, volume);
TValue result = super.Update(bar);
Console.WriteLine($"SuperTrend: {result.Value:F2}");
Console.WriteLine($"Trend: {(result.IsBullish ? "Bullish" : "Bearish")}");
// Check if buffer is full
if (super.IsHot)
{
// Indicator is fully initialized
}
```
### Batch Processing (Historical Data)
```csharp
// TBarSeries API
TBarSeries bars = ...;
TSeries superValues = SuperTrend.Batch(bars, period: 10, multiplier: 3.0);
```
### Bar Correction (isNew Parameter)
```csharp
var super = new SuperTrend(10, 3.0);
// New bar
super.Update(bar, isNew: true);
// Intra-bar update
super.Update(updatedBar, isNew: false); // Replaces last calculation