# Exponential Moving Average (EMA)

Moving average indicator which measures the trend direction over a period of time.

Exponential Moving Average (EMA) is a moving average indicator which measures the trend direction over a period of time. It places more importance on recent price data than other moving averages like SMA. Unlike other Moving Averages, EMA uses a multiplier which takes into account older data, even if they are outside of the period of days selected.

EMA is a line which is shown within the price graph, moving close to the price and eventually intersecting with it. EMA moving above the price indicates a downtrend while EMA moving below the price indicates an uptrend. It can also act as a level of Support/Resistance in uptrends and downtrends, respectively.

We can interpret buy/sell signals by using 2 different EMA lines (one assessing a shorter period than the other). If the shorter EMA (e.g. a 20 day EMA) crosses upwards over the longer SMA (e.g. 50 days), it is a buy signal. The opposite, where the shorter EMA crosses downwards under the longer EMA, indicates a sell signal. Another interpretation arises when intersecting with the price. A shorter EMA crossing the price from the bottom up, while remaining above the longer EMA, is considered a buy signal in the same way that the shorter EMA crossing the price from above downwards, while the longer EMA is located above the shorter EMA, indicates a sell signal.

## Calculation

$[Price - EMA(PreviousDay)] * Multiplier + EMA (PreviousDay)$

For the first EMA(Previous day) we use SMA. SMA = sum of X days closing prices / X Multiplier = 2 / (Time periods used + 1 )

## Parameters

### Input Parameters

 Name Type Range of value Description emaLength int <1, int.MaxValue> Number of bars used in the calculation.

### Output Parameters

Indicator ouptuts a single value.

 Type Range of value double (0, double.MaxValue)

## Examples

// Prints the current value of a 20 period EMA using// the daily bars close price value.ema = indicators.EMA(20).OnSeries(dailyBars.Close);Log("The current EMA value is " + ema.Value.ToString());​// Prints the previour EMA valueema = indicators.EMA(20).Keep(2).OnSeries(dailyBars.Close);Log("The previous EMA value is " + ema.Values.ToString());

### Complete example

using Signals.DataSeries.Bars;using Signals.Framework;using Signals.Indicators.EMA;​public class MyStrategy : SingleMarketStrategy{    private Bars dailyBars;    private EMA ema;​    public override void Setup(DataMarketplace data, IndicatorsMarketplace indicators)    {        dailyBars = data.Bars(BarPeriodType.Day, 1).WithOffset(25);        ema = indicators.EMA(20).Keep(2).OnSeries(dailyBars.Close);    }​    public override void RegisterActions()    {        OnUpdateOf(dailyBars).Do(() =>        {               // Prints the current EMA value            Log("The current EMA value is " + ema.Value.ToString());​            // Prints the previour EMA value            Log("The previous EMA value is " + ema.Values.ToString());        });    }}