# MGDI: McGinley Dynamic Indicator

> "John McGinley saw moving averages failing in fast markets and said, 'It's not the market's fault, it's the math's fault.' MGDI is the apology."

MGDI (McGinley Dynamic Indicator) looks like a moving average, but it's actually a smoothing mechanism that adjusts itself relative to the speed of the market. It was designed to solve the problem of "lag" and "whipsaw" simultaneously by using a formula that automatically adjusts the smoothing factor based on the distance between the price and the average.

## Historical Context

Published by John McGinley in the *Market Technicians Association Journal* (1991), the Dynamic was created to be a "market tool" rather than just an indicator. McGinley argued that moving averages should not be fixed to a specific time period because the market's speed is not fixed.

## Architecture & Physics

The MGDI formula is unique. It looks like an EMA, but the smoothing constant is dynamic and depends on the ratio of Price to the previous MGDI value.

- **Price > MGDI**: The market is speeding up (or recovering). The denominator grows, slowing the adjustment to prevent overshoot.
- **Price < MGDI**: The market is falling. The formula adapts to hug the price without breaking.

## Mathematical Foundation

$$ \text{MGDI}_t = \text{MGDI}_{t-1} + \frac{P_t - \text{MGDI}_{t-1}}{k \times N \times (\frac{P_t}{\text{MGDI}_{t-1}})^4} $$

Where:

- $N$ is the period (roughly analogous to an EMA period).
- $k$ is a constant (usually 0.6).
- The term $(P_t / \text{MGDI}_{t-1})^4$ is the accelerator/decelerator.

## Performance Profile

This is one of the fastest adaptive indicators available.

| Metric | Score | Notes |
| :--- | :--- | :--- |
| **Throughput** | [N] ns/bar | Scalar math |
| **Allocations** | 0 | Stack-based calculations only |
| **Complexity** | O(1) | Constant time update |
| **Accuracy** | 9/10 | Hugs price closely without breaking |
| **Timeliness** | 8/10 | Accelerates to catch up to price |
| **Overshoot** | 9/10 | Specifically designed to minimize overshoot |
| **Smoothness** | 9/10 | Visually pleasing, organic curve |

## Validation

Validated against Skender and Ooples.

| Library | Status | Notes |
| :--- | :--- | :--- |
| **QuanTAlib** | ✅ | Validated. |
| **Skender** | ✅ | Matches `GetDynamic` |
| **Ooples** | ✅ | Matches `CalculateMcGinleyDynamicIndicator` |
| **TA-Lib** | N/A | Not implemented |

| **Tulip** | N/A | Not implemented. |
### Common Pitfalls

1. **Not an EMA**: Do not treat it like an EMA. It does not have a fixed alpha.
2. **Period Meaning**: The "Period" $N$ is a calibration constant, not a hard window size. An MGDI(14) does not "look back" 14 bars in the traditional sense; it's just calibrated to that timeframe.
3. **K Factor**: The constant $k=0.6$ is standard. Changing it changes the sensitivity.
