mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-16 09:38:05 +00:00
154 lines
5.7 KiB
Markdown
154 lines
5.7 KiB
Markdown
# TTM_TREND: TTM Trend
|
||
|
||
| Property | Value |
|
||
| ---------------- | -------------------------------- |
|
||
| **Category** | Dynamic |
|
||
| **Inputs** | OHLCV bar (TBar) |
|
||
| **Parameters** | `period` (default DefaultPeriod) |
|
||
| **Outputs** | Single series (TTM_TREND) |
|
||
| **Output range** | Varies (see docs) |
|
||
| **Warmup** | `> 2` bars |
|
||
|
||
### TL;DR
|
||
|
||
- John Carter's TTM Trend uses a fast EMA (default period 6) applied to typical price (HLC/3) to determine short-term trend direction via slope sign.
|
||
- Parameterized by `period` (default defaultperiod).
|
||
- Output range: Varies (see docs).
|
||
- Requires `> 2` bars of warmup before first valid output (IsHot = true).
|
||
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
|
||
|
||
> "The simplest trend indicator is the one you actually follow."
|
||
|
||
John Carter's TTM Trend uses a fast EMA (default period 6) applied to typical price (HLC/3) to determine short-term trend direction via slope sign. Output is a ternary trend state: +1 (bullish, EMA rising), -1 (bearish, EMA falling), or 0 (neutral, EMA unchanged). The indicator requires only 2 bars warmup, runs at O(1) per bar with O(1) space, and produces zero allocations in the hot path.
|
||
|
||
## Historical Context
|
||
|
||
John Carter developed the TTM (Trade the Markets) Trend indicator as a clean visual tool for identifying short-term trend direction, popularized through *Mastering the Trade* and the thinkorswim platform. Unlike complex multi-component trend systems, TTM Trend reduces trend detection to its minimum viable form: the slope of a fast exponential moving average. The very short default period (6) makes it responsive to recent price action, positioning it as a "first responder" trend filter meant to be combined with Carter's other TTM tools (Squeeze, Wave, LRC). The color-coded output (green/red/gray) provides at-a-glance trend assessment.
|
||
|
||
## Architecture & Physics
|
||
|
||
### 1. Typical Price
|
||
|
||
$$\text{TP}_t = \frac{H_t + L_t + C_t}{3}$$
|
||
|
||
Using typical price rather than close reduces susceptibility to closing-tick noise.
|
||
|
||
### 2. EMA Recursion
|
||
|
||
$$\alpha = \frac{2}{N + 1}$$
|
||
|
||
$$\text{EMA}_t = \alpha \cdot \text{TP}_t + (1 - \alpha) \cdot \text{EMA}_{t-1}$$
|
||
|
||
Or equivalently via FMA:
|
||
|
||
$$\text{EMA}_t = \text{FMA}(\alpha,\ \text{TP}_t - \text{EMA}_{t-1},\ \text{EMA}_{t-1})$$
|
||
|
||
### 3. Trend Classification
|
||
|
||
$$\text{Trend}_t = \text{sign}(\text{EMA}_t - \text{EMA}_{t-1})$$
|
||
|
||
| Value | State | Color |
|
||
|:------|:------|:------|
|
||
| +1 | Bullish | Green |
|
||
| -1 | Bearish | Red |
|
||
| 0 | Neutral | Gray |
|
||
|
||
### 4. Strength Measurement
|
||
|
||
$$\text{Strength}_t = \frac{|\text{EMA}_t - \text{EMA}_{t-1}|}{\text{EMA}_{t-1}} \times 100\%$$
|
||
|
||
This percentage rate-of-change quantifies how aggressively the trend is moving. High strength values indicate strong conviction; near-zero values suggest potential reversal.
|
||
|
||
### 5. Complexity
|
||
|
||
| Metric | Value |
|
||
|:-------|:------|
|
||
| Time | O(1) per bar |
|
||
| Space | O(1) (one EMA state + one previous value) |
|
||
| Warmup | 2 bars |
|
||
| Allocations | Zero in hot path |
|
||
|
||
## Mathematical Foundation
|
||
|
||
### Parameters
|
||
|
||
| Parameter | Type | Default | Constraint | Description |
|
||
|:----------|:-----|:--------|:-----------|:------------|
|
||
| period | int | 6 | > 0 | EMA lookback period (very fast by default) |
|
||
|
||
### Pseudo-code
|
||
|
||
```
|
||
TTM_TREND(bar, period=6):
|
||
|
||
tp = (bar.High + bar.Low + bar.Close) / 3
|
||
alpha = 2.0 / (period + 1)
|
||
|
||
if count == 0:
|
||
ema_val = tp
|
||
else:
|
||
ema_val = FMA(alpha, tp - ema_val, ema_val)
|
||
|
||
// Trend direction from slope sign
|
||
if count >= 1:
|
||
if ema_val > prev_ema:
|
||
trend = +1
|
||
else if ema_val < prev_ema:
|
||
trend = -1
|
||
else:
|
||
trend = 0
|
||
|
||
strength = abs(ema_val - prev_ema) / prev_ema * 100
|
||
|
||
prev_ema = ema_val
|
||
count += 1
|
||
|
||
return (ema_val, trend, strength)
|
||
```
|
||
|
||
### Period Selection
|
||
|
||
The default period of 6 makes TTM Trend extremely fast-reacting. The EMA half-life is approximately $\ln(2) / \ln(1 + 2/N) \approx 2.4$ bars for $N = 6$. This means the indicator responds within 2-3 bars of a price shift. Longer periods (12, 20) reduce whipsaws but delay detection. Carter's design intent was maximum responsiveness, with noise filtering delegated to companion indicators (Squeeze, Wave).
|
||
|
||
## Performance Profile
|
||
|
||
### Operation Count (Streaming Mode)
|
||
|
||
TTM Trend colors bars based on whether close is above/below a short SMA, with momentum confirmation from a histogram.
|
||
|
||
**Post-warmup steady state (per bar):**
|
||
|
||
| Operation | Count | Cost (cycles) | Subtotal |
|
||
| :--- | :---: | :---: | :---: |
|
||
| RingBuffer add + oldest sub (running sum) | 2 | 1 | 2 |
|
||
| MUL × 1/N (SMA) | 1 | 3 | 3 |
|
||
| CMP (close vs SMA) | 1 | 1 | 1 |
|
||
| Histogram momentum (FMA EMA update) | 1 | 4 | 4 |
|
||
| Color encoding (ternary +1/0/−1) | 1 | 1 | 1 |
|
||
| **Total** | **6** | — | **~11 cycles** |
|
||
|
||
Very cheap: ~11 cycles per bar at steady state.
|
||
|
||
### Batch Mode (SIMD Analysis)
|
||
|
||
| Operation | Vectorizable? | Notes |
|
||
| :--- | :---: | :--- |
|
||
| SMA (rolling sum) | Yes | VADDPD + prefix-sum subtract-lag |
|
||
| EMA histogram | **No** | Recursive IIR |
|
||
| Bar color comparison | Yes | VCMPPD |
|
||
|
||
The EMA histogram is the only sequential step. SMA and comparison are fully vectorizable.
|
||
|
||
### Quality Metrics
|
||
|
||
| Metric | Score | Notes |
|
||
| :--- | :---: | :--- |
|
||
| **Accuracy** | 10/10 | SMA exact arithmetic; EMA FMA-precise |
|
||
| **Timeliness** | 8/10 | Short SMA period dominates; near-instantaneous response |
|
||
| **Smoothness** | 10/10 | Ternary output — maximally smooth |
|
||
| **Noise Rejection** | 6/10 | Short SMA period makes it sensitive to noise in choppy markets |
|
||
|
||
## Resources
|
||
|
||
- Carter, J. (2005). *Mastering the Trade*. McGraw-Hill.
|