Esempio n. 1
0
        /// <summary>
        /// Calculates Moving Average Convergence-Divergence (MACD) indicator
        /// </summary>
        /// <param name="input">Input signal</param>
        /// <param name="fastPeriod">Number of periods for fast moving average</param>
        /// <param name="slowPeriod">Number of periods for slow moving average</param>
        /// <param name="signalPeriod">Number of periods for signal line</param>
        /// <returns>Object containing operation results</returns>
        public static MACDResult MACD(IEnumerable<double> input, int fastPeriod, int slowPeriod, int signalPeriod)
        {
            var MACD = new List<double>();

            int MACDoffsetIndex = slowPeriod - 1;
            int signalOffsetIndex = slowPeriod + signalPeriod - 2;

            var fastEMA = EMA(input, fastPeriod);
            var slowEMA = EMA(input, slowPeriod);

            fastEMA.Values.RemoveRange(0, slowPeriod - fastPeriod);

            for (int i = 0; i < fastEMA.Values.Count(); i++)
            {
                MACD.Add(fastEMA.Values[i] - slowEMA.Values[i]);
            }

            var signal = EMA(MACD, signalPeriod);

            var result = new MACDResult()
            {
                MACD = MACD,
                MACDStartIndexOffset = MACDoffsetIndex,
                Signal = signal.Values,
                SignalStartIndexOffset = signalOffsetIndex
            };

            return result;
        }
Esempio n. 2
0
        /// <summary>
        /// Calculates Moving Average Convergence-Divergence (MACD) indicator
        /// </summary>
        /// <param name="input">Input signal</param>
        /// <param name="fastPeriod">Number of periods for fast moving average</param>
        /// <param name="slowPeriod">Number of periods for slow moving average</param>
        /// <param name="signalPeriod">Number of periods for signal line</param>
        /// <returns>Object containing operation results</returns>
        public static MACDResult MACD(IEnumerable <double> input, int fastPeriod, int slowPeriod, int signalPeriod)
        {
            var MACD = new List <double>();

            int MACDoffsetIndex   = slowPeriod - 1;
            int signalOffsetIndex = slowPeriod + signalPeriod - 2;

            var fastEMA = EMA(input, fastPeriod);
            var slowEMA = EMA(input, slowPeriod);

            fastEMA.Values.RemoveRange(0, slowPeriod - fastPeriod);

            for (int i = 0; i < fastEMA.Values.Count(); i++)
            {
                MACD.Add(fastEMA.Values[i] - slowEMA.Values[i]);
            }

            var signal = EMA(MACD, signalPeriod);

            var result = new MACDResult()
            {
                MACD = MACD,
                MACDStartIndexOffset = MACDoffsetIndex,
                Signal = signal.Values,
                SignalStartIndexOffset = signalOffsetIndex
            };

            return(result);
        }