# MACD: Moving Average Convergence Divergence > "The trend is your friend, until it bends." — Ed Seykota The Moving Average Convergence Divergence (MACD) is a trend-following momentum indicator that shows the relationship between two moving averages of a security's price. Developed by Gerald Appel in the late 1970s, it is one of the most popular and versatile indicators in technical analysis. ## Historical Context Gerald Appel created the MACD to reveal changes in the strength, direction, momentum, and duration of a trend in a stock's price. It combines the lagging features of moving averages with the leading characteristics of momentum oscillators. ## Architecture & Physics MACD is composed of three components: 1. **MACD Line**: The difference between a fast EMA and a slow EMA. 2. **Signal Line**: An EMA of the MACD Line. 3. **Histogram**: The difference between the MACD Line and the Signal Line. - **Inertia**: Moderate (dependent on EMA periods). - **Momentum**: Tracks the convergence/divergence of trends. - **Range**: Unbounded. ## Mathematical Foundation $$ \text{MACD Line} = \text{EMA}_{\text{fast}}(Close) - \text{EMA}_{\text{slow}}(Close) $$ $$ \text{Signal Line} = \text{EMA}_{\text{signal}}(\text{MACD Line}) $$ $$ \text{Histogram} = \text{MACD Line} - \text{Signal Line} $$ Standard parameters are (12, 26, 9): - Fast EMA: 12 periods - Slow EMA: 26 periods - Signal EMA: 9 periods ## Performance Profile MACD relies on efficient EMA calculations. ### Zero-Allocation Design The implementation uses three internal `Ema` instances. The `Update` method orchestrates the flow of data between them without creating intermediate objects on the heap. | Metric | Score | Notes | | :--- | :--- | :--- | | **Throughput** | 26 ns/bar | High performance due to simple EMA calculations. | | **Allocations** | 0 | Zero heap allocations in hot path. | | **Complexity** | O(1) | Constant time update per bar. | | **Accuracy** | 10/10 | Matches external standards exactly. | | **Timeliness** | 8/10 | Lag is inherent to the moving averages used. | | **Overshoot** | 5/10 | Can overshoot during strong trends. | | **Smoothness** | 9/10 | Very smooth due to double smoothing (EMA of EMA). | ## Validation Validated against multiple external libraries to ensure correctness. | Library | Status | Notes | | :--- | :--- | :--- | | **QuanTAlib** | ✅ | Validated. | | **TA-Lib** | ✅ | Matches `TA_MACD` exactly. | | **Skender** | ✅ | Matches `GetMacd` exactly. | | **Tulip** | ✅ | Matches `macd` exactly. | | **Ooples** | ✅ | Matches `CalculateMovingAverageConvergenceDivergence`. | ### Common Pitfalls - **Lag**: As a trend-following indicator based on moving averages, MACD lags price action. - **Whipsaws**: In sideways markets, MACD can generate false signals (whipsaws) as the moving averages cross frequently.