Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2019, 13:00   #1
Olga_q
Новичок
Джуниор
 
Регистрация: 05.10.2019
Сообщений: 1
По умолчанию Ошибка при конвертировании массива

Здравствуйте. Проблема с получением и конвертированием данных. Есть программа, в этом списке объектов происходит конвертирование полученных данных через REST API, конкретно - свечей, из меньшего таймфрейма в больший. На входе 1часовые свечи, после получаю 2-4часовые. Полученные на выходе свечи не соответствуют реальным данным - отстают на 1 час и не правильно формируются. Наивно пробовал добавить 1 час с помощью TimeSpan, время начала свечи стало корректным, но остальные параметры свечи так и не сформировались правильно. Подскажите пожалуйста что не так делаю.
Код:
        /// <summary>
        /// transform candles
        /// преобразовать свечи
        /// </summary>
        /// <param name="tf">received timeframe / пришедший таймфрейм</param>
        /// <param name="needTf">needed timeframe / тф который нужно получить</param>
        /// <param name="rawCandles">raw candles / заготовки для свечей</param>
        /// <returns></returns>
        private List<Candle> TransformCandles(int tf, int needTf, List<List<double>> rawCandles)
        {
            var entrance = needTf / tf;

            List<Candle> newCandles = new List<Candle>();

            //MTS,  - 0
            //OPEN, - 1 
            //CLOSE,- 2
            //HIGH, - 3
            //LOW,  - 4
            //VOLUME- 5

            int count = 0;

            Candle newCandle = new Candle();

            bool isStart = true;

            for (int i = rawCandles.Count - 1; i > 0; i--)
            {
                var time = new DateTime(1970, 1, 1) + TimeSpan.FromMilliseconds(rawCandles[i][0]); // + new TimeSpan(0, 1, 0, 0);

                if (time.Minute % needTf != 0 && isStart)
                {
                    continue;
                }

                isStart = false;

                count++;
                if (count == 1)
                {
                    newCandle = new Candle();
                    var resOpen = rawCandles[i];
                    newCandle.Open = Convert.ToDecimal(rawCandles[i][1]);
                    newCandle.TimeStart = time;
                    newCandle.Low = Decimal.MaxValue;
                    newCandle.High = Decimal.MinValue;
                }

                newCandle.High = Convert.ToDecimal(rawCandles[i][3]) > newCandle.High
                    ? Convert.ToDecimal(rawCandles[i][3])
                    : newCandle.High;

                newCandle.Low = Convert.ToDecimal(rawCandles[i][4]) < newCandle.Low
                    ? Convert.ToDecimal(rawCandles[i][4])
                    : newCandle.Low;

                newCandle.Volume += Convert.ToDecimal(rawCandles[i][5]);

                if (i == 1 && count != entrance)
                {
                    newCandle.Close = Convert.ToDecimal(rawCandles[i][2]);
                    newCandle.State = CandleState.None;
                    newCandles.Add(newCandle);
                }

                if (count == entrance)
                {
                    newCandle.Close = Convert.ToDecimal(rawCandles[i][2]);
                    newCandle.State = CandleState.Finished;
                    newCandles.Add(newCandle);
                    count = 0;
                }
            }

            if (newCandles.Count > 1)
            {
                newCandles.RemoveAt(0);
            }

            return newCandles;
        }

Последний раз редактировалось Olga_q; 05.10.2019 в 13:03.
Olga_q вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при удалении массива - C++ alexboliam Общие вопросы C/C++ 2 29.12.2017 01:15
Исключение TODO-фрагментов при конвертировании cw_o Microsoft Office Word 2 26.07.2013 13:33
Ошибка массива rymbek Общие вопросы Delphi 5 02.05.2011 22:06
Два одномерных массива A и B. Сформировать два новых массива. Паскаль. Где ошибка в коде? Tomny Помощь студентам 1 27.03.2011 16:47
Ошибка перестановки эл.массива Blad47 Общие вопросы C/C++ 4 13.12.2008 23:58