Direct answer
MACD (“Moving Average Convergence Divergence”) is calculated from two exponential moving averages (EMAs) computed on the same price series. The basic steps are: compute a fast EMA, compute a slow EMA, subtract them to get the MACD line, apply an EMA to the MACD line to get the signal line, and subtract signal from MACD to get the histogram.
A “MACD Strategies” approach usually means using those MACD values as inputs to rule logic (for example, comparing the MACD line to its signal line or analyzing histogram changes). The calculation itself is the indicator math described above.
Mechanism and definitions
1) Choose the input price series
First, define what “price” means in your computation. Common choices include the closing price, or sometimes an averaged price. Once you pick the input series, you must apply the same series consistently to every EMA in the MACD calculation.
Assumption for any worked example: all calculations use one time series of prices sampled at a fixed frequency (for example, each bar’s close). If your data frequency or series changes, the MACD values will change.
2) Compute the fast and slow EMAs
Let:
n_fast= fast EMA length (parameter)n_slow= slow EMA length (parameter)P_t= the chosen price at timet
An EMA is a weighted moving average that gives more weight to recent observations. In many definitions, the EMA can be written recursively:
EMA_fast(t) = EMA_fast(t-1) + α_fast * (P_t - EMA_fast(t-1))EMA_slow(t) = EMA_slow(t-1) + α_slow * (P_t - EMA_slow(t-1))
where the smoothing factors α_fast and α_slow depend on the lengths:
α_fast = 2 / (n_fast + 1)α_slow = 2 / (n_slow + 1)
Initialization note (material limitation): EMAs require a starting value. Different platforms can initialize EMAs differently (for example, starting from the first price, or using a simple moving average as the initial EMA). That means early MACD values may not match exactly across implementations.
3) Compute the MACD line
The MACD line at time t is the difference between the fast and slow EMAs:
MACD(t) = EMA_fast(t) - EMA_slow(t)
This difference can be positive or negative. Its magnitude depends on both the price scale and the chosen EMA lengths.
4) Compute the signal line as an EMA of MACD
Let n_signal be the signal EMA length (parameter). The signal line is an EMA applied to the MACD series:
Signal(t) = Signal(t-1) + α_signal * (MACD(t) - Signal(t-1))α_signal = 2 / (n_signal + 1)
Again, the signal EMA needs an initialization method.
5) Compute the histogram
The histogram highlights the distance between the MACD line and its signal line:
Histogram(t) = MACD(t) - Signal(t)
If histogram is positive, MACD is above signal; if negative, MACD is below signal.
Parameter summary
MACD calculation depends on three main lengths:
n_fast(fast EMA length)n_slow(slow EMA length)n_signal(signal EMA length)
It also depends on:
- the chosen price series
P_t - how EMAs are initialized in your implementation
- the sampling frequency of your data
Evidence or example you can verify
Below is a generic numeric example using simple assumptions so you can replicate it.
Assumption:
- Use a short price series at times
t = 1..6 - Use
n_fast = 3,n_slow = 6,n_signal = 2 - Use the EMA recursion with some initialization (you must choose one and then follow it consistently)
Pick an input price series (example values):
P_1, P_2, P_3, P_4, P_5, P_6
Step A: compute α_fast = 2/(3+1) = 0.5 and α_slow = 2/(6+1) ≈ 0.2857.
Step B: start values.
- One way is
EMA_fast(1) = P_1andEMA_slow(1) = P_1.
Step C: iterate forward for t = 2..6:
EMA_fast(t) = EMA_fast(t-1) + 0.5*(P_t - EMA_fast(t-1))EMA_slow(t) = EMA_slow(t-1) + 0.2857*(P_t - EMA_slow(t-1))
Step D: MACD line:
MACD(t) = EMA_fast(t) - EMA_slow(t)for eacht.
Step E: signal:
α_signal = 2/(2+1) = 2/3 ≈ 0.6667- Choose
Signal(1) = MACD(1)(or another consistent initialization), then iterate:Signal(t) = Signal(t-1) + 0.6667*(MACD(t) - Signal(t-1))
Step F: histogram:
Histogram(t) = MACD(t) - Signal(t).
What you should notice when you compute it:
- Changing
n_fast,n_slow, orn_signalchanges the smoothness and the lag of the MACD and signal lines. - The histogram is not an independent series; it is mathematically derived from MACD and Signal.
If your computed MACD differs from a charting tool, the most common reasons are EMA initialization, different price fields (close vs typical), or different parameter interpretation.
Limitations and risks (material failure modes)
1) EMA initialization differences
Because EMAs need a starting value, different software can produce slightly different MACD values at the beginning of the series. This can propagate into the signal EMA and histogram, especially for short datasets.
2) Parameter sensitivity
MACD depends directly on n_fast, n_slow, and n_signal. Small changes can alter:
- the amplitude (how large values look)
- the timing (how quickly MACD responds)
- the frequency of turning points
So, if someone compares MACD values across different parameter sets, the comparison may be misleading.
3) Choice of price series and time frequency
MACD is computed from a specific input series P_t and sampled at a given interval. If you compute MACD on a different price definition or a different timeframe, the resulting indicator values will not match.
4) Using MACD in rules does not remove uncertainty
Even when the indicator is calculated correctly, turning those values into decisions introduces uncertainty. Real outcomes in live environments depend on many factors outside the MACD formula (for example, execution quality, market conditions, and operational costs). Historical relationships do not guarantee future results.
Verification and what to check next
To independently verify that you (or a provider) calculate MACD correctly, you can do this without relying on trade advice:
- Confirm the exact input price series (for example, close) and the data frequency.
- Confirm the parameter values for fast EMA, slow EMA, and signal EMA.
- Recompute the EMAs with the same initialization approach you believe the implementation uses.
- Compute
MACD = EMA_fast − EMA_slow, then computeSignalas an EMA ofMACD, then computeHistogram = MACD − Signal.
Next question worth clarifying for any “MACD Strategies” discussion: what rule logic is being applied on top of MACD values (for example, which comparisons or histogram conditions)? The calculation is deterministic given the inputs, while the strategy layer determines how those values are interpreted.