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++; } }
private SeriesData GetSeriesInfo(DI_MapDataColumns mapDataColumns, DataTable SeriesDataTable, bool isMyData, string dbNid, string LanguageCode) { SeriesData RetVal = null; Hashtable Indicators = new Hashtable(); DataTable dtDistinctIUSs = null; DataTable dtDistinctIndicatorNIds = null; Hashtable IUSs = null; SeriesInfo seriesInfo; List<string> distinctIUSNIds = new List<string>(); List<string> columnsToSkipFilter = new List<string>(); List<string> distinctColumns = new List<string>(); string SeriesName = string.Empty; try { if (SeriesDataTable.Rows.Count > 0) { seriesInfo = new SeriesInfo(); RetVal = new SeriesData(); if (!isMyData) { //get theme name IndicatorUnitSubgroup from Database _DBCon = Global.GetDbConnection(int.Parse(dbNid)); dtDistinctIndicatorNIds = SeriesDataTable.DefaultView.ToTable(true, mapDataColumns.SeriesNid); dtDistinctIUSs = SeriesDataTable.DefaultView.ToTable(true, mapDataColumns.SeriesNid); this.SetTimeLogIntoFile("Start getting IUSs Nmaes from Procedure sp_getIUSNames_-> " + DateTime.Now.ToLongTimeString()); IUSs = getIUSNames(dtDistinctIUSs, LanguageCode); this.SetTimeLogIntoFile("Ends getting IUSs Nmaes from Procedure sp_getIUSNames_-> " + DateTime.Now.ToLongTimeString()); foreach (object key in IUSs.Keys) { seriesInfo = new SeriesInfo(); seriesInfo.SeriesID = key.ToString(); seriesInfo.SeriesName = IUSs[key].ToString(); RetVal.Add(seriesInfo); } } else { columnsToSkipFilter.Add(mapDataColumns.AreaID); columnsToSkipFilter.Add(mapDataColumns.AreaName); columnsToSkipFilter.Add(mapDataColumns.DataValue); columnsToSkipFilter.Add(mapDataColumns.NumericData); columnsToSkipFilter.Add(mapDataColumns.TimePeriod); columnsToSkipFilter.Add(mapDataColumns.isMRD); //set row filter foreach (DataColumn column in SeriesDataTable.Columns) { if (!columnsToSkipFilter.Contains(column.ColumnName)) { distinctColumns.Add(column.ColumnName); } } dtDistinctIndicatorNIds = SeriesDataTable.DefaultView.ToTable(true, distinctColumns.ToArray()); foreach (DataRow row in dtDistinctIndicatorNIds.Rows) { seriesInfo = new SeriesInfo(); SeriesName = string.Empty; seriesInfo.SeriesID = Convert.ToString(row[mapDataColumns.SeriesNid]); foreach (string columnName in distinctColumns) { if (columnName != mapDataColumns.SeriesNid) { SeriesName += Convert.ToString(row[columnName]) + ", "; } } seriesInfo.SeriesName = SeriesName.TrimEnd(", ".ToCharArray()); RetVal.Add(seriesInfo); } } } } catch (Exception ex) { Global.CreateExceptionString(ex, null); throw; } return RetVal; }