MacdHistogram


Summary

The calculation of the MACD Histogram.

Remarks

MACD (moving average convergence/divergence) is used to spot changes in the strength, direction, momentum, and duration of a trend.

Syntax

public interface MacdHistogram

Members

NameTypeSummary
Histogram PropertyThe histogram (bar graph). The difference between the short and long cycles.
Signal PropertyThe signal (red line). The exponential moving average of the MACD histogram.

Example 1

//...
private MacdHistogram macd;
//...
macd = Indicators.MacdHistogram(LongCycle, ShortCycle, Period);
//...

Example 2

using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo.Robots
{
    // This sample cBot shows how to use the MACD Histogram indicator
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class MacdHistogramSample : Robot
    {
        private double _volumeInUnits;
        private MacdHistogram _macdHistogram;
        [Parameter("Volume (Lots)", DefaultValue = 0.01)]
        public double VolumeInLots { get; set; }
        [Parameter("Stop Loss (Pips)", DefaultValue = 10)]
        public double StopLossInPips { get; set; }
        [Parameter("Take Profit (Pips)", DefaultValue = 10)]
        public double TakeProfitInPips { get; set; }
        [Parameter("Label", DefaultValue = "Sample")]
        public string Label { get; set; }
        public Position[] BotPositions
        {
            get
            {
                return Positions.FindAll(Label);
            }
        }
        protected override void OnStart()
        {
            _volumeInUnits = Symbol.QuantityToVolumeInUnits(VolumeInLots);
            _macdHistogram = Indicators.MacdHistogram(Bars.ClosePrices, 26, 12, 9);
        }
        protected override void OnBar()
        {
            if (_macdHistogram.Histogram.Last(1) > 0 && _macdHistogram.Histogram.Last(2) <= 0)
            {
                ClosePositions(TradeType.Sell);
                ExecuteMarketOrder(TradeType.Buy, SymbolName, _volumeInUnits, Label, StopLossInPips, TakeProfitInPips);
            }
            else if (_macdHistogram.Histogram.Last(1) < 0 && _macdHistogram.Histogram.Last(2) >= 0)
            {
                ClosePositions(TradeType.Buy);
                ExecuteMarketOrder(TradeType.Sell, SymbolName, _volumeInUnits, Label, StopLossInPips, TakeProfitInPips);
            }
        }
        private void ClosePositions(TradeType tradeType)
        {
            foreach (var position in BotPositions)
            {
                if (position.TradeType != tradeType) continue;
                ClosePosition(position);
            }
        }
    }
}
Reference