Esempio n. 1
0
 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);
 }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
        /// <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();
        }
Esempio n. 4
0
        /// <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());
        }