Accumulation/Distribution Line (ADL)

Volume based indicator designed to measure underlying supply and demand.

Accumulation/Distribution Line (ADL) is a volume based indicator designed to measure underlying supply and demand. It determines whether traders are accumulating (buying) or distributing (selling).

Trading application

The Accumulation/Distribution Line can be used to gauge the general flow of volume. An uptrend in prices with a downtrend in the Accumulation/Distribution Line suggests an underlying selling pressure (distribution) that could foreshadow a bearish reversal. A downtrend in prices with an uptrend in the Accumulation/Distribution Line indicates an underlying buying pressure (accumulation) that could foreshadow a bullish reversal. It is not a standalone indicator.

Calculation

ADL=PreviousADL+CurrentPeriodsMoneyFlowVolumeADL = Previous ADL + Current Period's Money Flow Volume
MoneyFlowVolume=MoneyFlowMultiplierCurrentPeriodsVolumeMoney Flow Volume = Money Flow Multiplier * Current Period's Volume
MoneyFlowMultiplier=[(CloseLow)(HighClose)]/(HighLow)Money Flow Multiplier = [(Close - Low) - (High - Close)] /(High - Low)

The multiplier is positive when the close is in the upper half of the high-low range and negative when in the lower half.

Parameters

Input Parameters

No input parameters.

Output Parameters

Indicator ouptuts a single value.

Type

Range of value

double

(0, double.MaxValue)

Examples

// Prints the current value of ADL.
adl = indicators.ADL().OnSeries(dailyBars);
Log("The current ADL value is " + adl.Value.ToString());

// Prints the previous value of ADL.
adl = indicators.ADL().Keep(2).OnSeries(dailyBars);
Log("The previous ADL value is " + adl.Values[1].ToString());

Complete example

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

public class MyStrategy : SingleMarketStrategy
{
    private Bars dailyBars;
    private ADL adl;

    public override void Setup(DataMarketplace data, IndicatorsMarketplace indicators)
    {
        dailyBars = data.Bars(BarPeriodType.Day, 1).WithOffset(25);
        adl = indicators.ADL().Keep(2).OnSeries(dailyBars);
    }

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

            // Prints the previous ADL value
            Log("The previous ADL value is " + adl.Values[1].ToString());
        });
    }
}

Last updated