public void BuildSeries(ChartControl chart) { SignalLine.Data.Clear(); MainLine.Data.Clear(); FastEMALine.Clear(); SlowEMALine.Clear(); var start = Math.Max(FastEMA, SlowEMA); for (var j = 0; j < start; j++) { FastEMALine.Add(GetSourcePrice(j)); SlowEMALine.Add(GetSourcePrice(j)); SignalLine.Data.Add(0); MainLine.Data.Add(0); } var dataCount = GetSourceDataCount(); if (dataCount < start) { return; } var i = start; var sum = 0.0d; while (i < dataCount) { // вычисляем главную линию // FastEma FastEMALine.Add(FastEMALine[i - 1] + (2.0d / (FastEMA + 1) * (GetSourcePrice(i) - FastEMALine[i - 1]))); // SlowEma SlowEMALine.Add(SlowEMALine[i - 1] + (2.0d / (SlowEMA + 1) * (GetSourcePrice(i) - SlowEMALine[i - 1]))); // сама главная линия MainLine.Data.Add(FastEMALine[i] - SlowEMALine[i]); // Рассчитываем сигнальную линию sum = 0.0d; for (var j = 0; j < SignalSMA; j++) { sum += (MainLine.Data[i - j]); } SignalLine.Data.Add(sum / SignalSMA); i++; } }