EMA indicator: settings and signals
An Exponential Moving Average gives recent prices more weight than old ones, so it reacts to changes faster than a simple moving average.
What the indicator looks like on a real chart
Data: EUR/USD, daily bars, 2025-06-16 — 2026-07-20. The indicator is computed over 400 bars; the chart shows the last 180. Quote source: Binance Spot REST API (api.binance.com/api/v3/klines).
| Regime | Score |
|---|---|
| Trending market | 66 |
| Range | 29 |
| High volatility | 51 |
| Low volatility | 47 |
What the indicator actually measures
In an EMA each new value is obtained by blending the current price with the previous value of the average in a fixed proportion. The smoothing coefficient defines the share of the new price: for period 20 it is roughly 9.5%, for period 200 about 1%.
An important difference from SMA: an EMA has no drop-out effect. Old bars do not disappear from the calculation in a jump but lose influence exponentially. Because of this an EMA does not make false turns when an anomalous bar leaves the window, but it formally accounts for all history back to the start of the calculation.
Reaction speed comes at the cost of stability. It is clearly visible on the chart: where an SMA passes calmly through a local spike, an EMA deviates noticeably — and in a range this turns into extra crossovers with price.
Formula
The coefficient 2/(N+1) sets the share of the new value taken by the current price. Here the period is not the length of a window but a way to express the decay rate: formally all previous bars participate in the calculation, just with declining weight.
Standard settings
| Parameter | Value |
|---|---|
| Classic trend pair | 50 / 200 |
| Scalping pair | 5 / 20 |
| Smoothing formula | 2 / (N+1) |
EMA(12) and EMA(26) became a standard thanks to MACD; EMA(20) and EMA(50) as a compromise between sensitivity and stability. Periods shorter than 10 on daily bars usually give too many crossovers to be traded without an additional filter.
Implementation code (Python)
def ema(close, period):return close.ewm(span=period, adjust=False).mean()
When the indicator stops working
- Increased sensitivity means more false signals in a ranging market.
- The reaction to single spikes is stronger than in SMA — a news spike shifts the line noticeably.
- The value depends on the starting point of the calculation, so on short histories EMA can differ slightly between platforms.
Common mistakes in use
- Choosing EMA only because it is "faster", ignoring that in a range speed turns into noise.
- Building a system on the crossover of two close EMAs — for example 9 and 12: such lines are intertwined constantly.
- Believing that EMA removes lag. It reduces it but cannot remove it in principle: any moving average relies on the past.
- Comparing EMA values from different terminals without accounting for differences in how the first value is initialized.
Who needs this and why
For traders to whom an early reaction to a change of direction matters and who are willing to accept more false signals in exchange for speed. Paired with a trend filter it works better than on its own.
Frequently asked questions
How far does EMA lead the SMA of the same period?
On the order of a quarter of the period on reversals: EMA(20) usually turns a few bars before SMA(20). The exact value depends on the sharpness of the reversal — the sharper it is, the more noticeable the gap, which is clearly visible on the chart above.
Why does EMA differ slightly between terminals?
Because of initialization. Formally EMA accounts for infinite history, so platforms set the first value differently: some take the first price, some the SMA over the period. On long histories the difference disappears; on short ones it can be noticeable.
Which EMA period should I choose for intraday trading?
There is no universal answer, but the principle is this: the period should be comparable to the duration of the moves you are catching. If a typical move lasts an hour on five-minute bars, an average with period 12 will describe it fully, while one with period 200 will not see it at all.