Closed zabralex85 closed 3 years ago
Кажется, этот запрос невозможно рассматривать в контексте одного лишь C# SDK, в отрыве от Api. Перевожу запрос в Api
Давайте напишем ряд хелперов на c#, которые преобразуют желаемый интервал в диапазон дат
Стоит понимать что на вашем компьютере используется ваш LocalTime, а время приходит в формате UTC, как раз те самые 3 часа о которых вы пишите. Только объект DateTime
умеет конвертировать время в любой формат, обратите внимание на методы ToUniversalTime()
и ToLocalTime()
.
DateTime.Now
возвращает время в вашем LocalTime, вы можете преобразовать его в UTC используя ToUniversalTime
и наоборот.
Я думаю что бы не было таких проблем можно сделать что бы библиотека автоматически отдавала все даты переводя в LocalTime и перед отправкой переводила бы их в UniversalTime и тогда скорей всего проблем будет меньше.
А в чем проблема использовать UTC в запросе? Грубо говоря торговый день заканчивается как раз в 00 по GMT. И не забывайте , что за мкадом тоже люди живут, во Владивостоке вообще сильно время отличается.
Очень неудобно использовать даты в методе, это не datetimeoffset, это не unix timestamp, плюс можно сделать метод более удобным.
Для примера: можно попробовать в 3 ночи получить данные за вчера 5мин интервалом за день, что всего 21 свеча хммм ... (from: DateTime.Now.Date.AddDay(-1), to: DateTime.Now.Date), смотришь все вроде верно хотел получить данные с 2020-12-02 до 2020-12-03 но вот не судьба.
в итоге пришел к такому методом подбора: высчитыввать свое отклонение (+3) и просить данные с 7 утра до 23:59.
await tsDs.LoadData("ticker", DateTime.Parse("2020-12-02T07:00:00"), DateTime.Parse("2020-12-02T23:59:00"), (int)Models.CandleInterval.FiveMinutes);
Данные получаем с 7 утра до 8:55 вечера (опять же почему не вернуть даты с отклонением неизвестно), при том что торги по инструменту идут с 10 утра до 01.30 ночи, шаг влево в право ошибка.
Примеры как бы хотелось уметь:
Взять данные за часть дня/день используя либо datetime offset либо unix temestamp используя:
Взять данные за определенный день (гг-мм-дд) используя:
Взять данные за определенную неделю (по номеру, указывая календарь американский или русский) используя
[EnumMember(Value = "day")] Day, [EnumMember(Value = "hour")] Hour,
Взять данные за месяц указывая год и номер месяца используя:
Взять данные за год используя :
[EnumMember(Value = "day")] Day, [EnumMember(Value = "week")] Week, [EnumMember(Value = "month")] Month,