Moving Average Convergence Divergence (MACD)

Indicator that uses 2 different averages of prices to calculate a trend’s momentum, direction and strength.

Moving Average Convergence Divergence (MACD) is considered one of the most important indicators. It uses 2 different averages of prices to calculate a trend’s momentum, direction and strength.

Trading application

MACD and Signal Line oscillate through a 0 reference line. There are 2 kinds of events that suggest a buy or sell action. When MACD crosses up through the Signal Line, it is a buy signal. Conversely, if MACD crosses down through the Signal Line, it is seen as a sell signal.

We can also consider it a signal to buy when MACD crosses the 0 line from negative into positive values, and a signal to sell when it crosses the 0 line from positive to negative values. As long as MACD is above 0, we can consider the asset to be in a bullish trend, while MACD staying below zero indicates bearish conditions.

Divergences also reflect bullish or bearish conditions: we can consider it bearish if the asset’s price increases more than the MACD (e.g. reaching a new high while the indicator doesn’t), in the same way that it would be bullish to see the asset’s price decreasing more than the MACD does.

Calculation

MACD Line:

Signal Line:

EMA: Exponential Moving Average

Parameters

Input Parameters

Output Parameters

Indicator ouptuts an object of values.

Examples

// Prints the current MACD value
macd = indicators.MACD(12, 26, 9).OnSeries(dailyBars.Close);
Log("The current MACD value is " + macd.Value.Value.ToString());

// Prints the current MACD average value
macd = indicators.MACD(12, 26, 9).OnSeries(dailyBars.Close);
Log("The current MACD average value is " + macd.Value.Average.ToString());

// Prints the current MACD difference value
macd = indicators.MACD(12, 26, 9).OnSeries(dailyBars.Close);
Log("The current MACD difference value is " + macd.Value.Difference.ToString());

// Prints the previous MACD value
macd = indicators.MACD(12, 26, 9).Keep(2).OnSeries(dailyBars.Close);
Log("The previous MACD value is " + macd.Values[1].Value.ToString());

Complete example

using Signals.DataSeries.Bars;
using Signals.Framework;
using Signals.Indicators.MACD;

public class MyStrategy : SingleMarketStrategy
{
    private Bars dailyBars;
    private MACD macd;

    public override void Setup(DataMarketplace data, IndicatorsMarketplace indicators)
    {
        dailyBars = data.Bars(BarPeriodType.Day, 1).WithOffset(25);
        macd = indicators.MACD(12, 26, 9).Keep(2).OnSeries(dailyBars.Close);
    }

    public override void RegisterActions()
    {
        OnUpdateOf(dailyBars).Do(() =>
        {   
            // Prints the current MACD value
            Log("The current MACD value is " + macd.Value.Value.ToString());

            // Prints the previous MACD value
            Log("The previous MACD value is " + macd.Values[1].Value.ToString());

            // Prints the current MACD average value
            Log("The current MACD average value is " + macd.Value.Average.ToString());

            // Prints the current MACD difference value
            Log("The current MACD difference value is " + macd.Value.Difference.ToString());
        });
    }
}

Last updated