public static double[] RemoveTrend(double[] data, TrendReducion trendReducion, int trendMAPeriod) { if (trendReducion == TrendReducion.Linear) { ReduceTrendLinear(data); } if (trendReducion == TrendReducion.MovingAverage) { data = ReduceTrendMA(data, trendMAPeriod); } return(data); }
public static double[] RemoveTrend(double[] data, TrendReducion trendReducion, int trendMAPeriod) { if (trendReducion == TrendReducion.Linear) ReduceTrendLinear(data); if (trendReducion == TrendReducion.MovingAverage) data = ReduceTrendMA(data, trendMAPeriod); return data; }
/// <param name="indexStr">формула индекса</param> /// <param name="path">каталог с котировками</param> /// <param name="intervalMinutes">период дискретизации</param> /// <param name="dataLength">количество отсчетов для выведения характеристик</param> /// <param name="trendReducion">тип удаления тренда</param> /// <param name="trendMAPeriod">период СС для удаления тренда</param> /// <returns></returns> public static double[] GetIndexData(string indexStr, string path, int intervalMinutes, int dataLength, TrendReducion trendReducion, int trendMAPeriod, DateTime? startDate, CurrencyIndexType curIndexType) { var ci = new CurrencyIndexInfo(indexStr) {MomentumPeriod = 1}; // аддитивный индекс без приращений, // веса уравнивают слагаемые в точке отсчета if (curIndexType == CurrencyIndexType.AdditiveWeightedToOne) { for (var i = 0; i < ci.weights.Length; i++) ci.weights[i] = 0; // вес посчитается автоматически } var currencyStream = new Dictionary<string, CurrencyStream>(); // открыть потоки чтения foreach (var curName in ci.pairs) { currencyStream.Add(curName, new CurrencyStream(curName, path)); } // посчитать данные индекса (ряд) var indexData = new List<double>(); decimal index = 0; try { if (!startDate.HasValue) startDate = GetFirstDateFromCurStreams(currencyStream, false); if (!startDate.HasValue) return new double[0]; DateTime date = startDate.Value; int dataCountMax = dataLength + (trendReducion == TrendReducion.MovingAverage ? trendMAPeriod : 0); for (var i = 0; i < dataCountMax; i++) { index = (decimal)ci.CalculateIndexMultiplicative(date, currencyStream); indexData.Add((double)index); date = date.AddMinutes(intervalMinutes); } } finally { // закрыть потоки чтения foreach (var cs in currencyStream) cs.Value.CloseStream(); } if (indexData.Count < 10) return new double[0]; return indexData.ToArray(); }
/// <param name="indexStr">формула индекса</param> /// <param name="path">каталог с котировками</param> /// <param name="intervalMinutes">период дискретизации</param> /// <param name="dataLength">количество отсчетов для выведения характеристик</param> /// <param name="trendReducion">тип удаления тренда</param> /// <param name="trendMAPeriod">период СС для удаления тренда</param> /// <returns></returns> public static double[] GetIndexData(string indexStr, string path, int intervalMinutes, int dataLength, TrendReducion trendReducion, int trendMAPeriod, DateTime?startDate, CurrencyIndexType curIndexType) { var ci = new CurrencyIndexInfo(indexStr) { MomentumPeriod = 1 }; // аддитивный индекс без приращений, // веса уравнивают слагаемые в точке отсчета if (curIndexType == CurrencyIndexType.AdditiveWeightedToOne) { for (var i = 0; i < ci.weights.Length; i++) { ci.weights[i] = 0; // вес посчитается автоматически } } var currencyStream = new Dictionary <string, CurrencyStream>(); // открыть потоки чтения foreach (var curName in ci.pairs) { currencyStream.Add(curName, new CurrencyStream(curName, path)); } // посчитать данные индекса (ряд) var indexData = new List <double>(); decimal index = 0; try { if (!startDate.HasValue) { startDate = GetFirstDateFromCurStreams(currencyStream, false); } if (!startDate.HasValue) { return(new double[0]); } DateTime date = startDate.Value; int dataCountMax = dataLength + (trendReducion == TrendReducion.MovingAverage ? trendMAPeriod : 0); for (var i = 0; i < dataCountMax; i++) { index = (decimal)ci.CalculateIndexMultiplicative(date, currencyStream); indexData.Add((double)index); date = date.AddMinutes(intervalMinutes); } } finally { // закрыть потоки чтения foreach (var cs in currencyStream) { cs.Value.CloseStream(); } } if (indexData.Count < 10) { return(new double[0]); } return(indexData.ToArray()); }