@Bodden

Как правильно сделать запрос gPRC Tinkoff.InvestApi методу GetTechAnalysis?

Здравствуйте.
Пробую отправить запрос к методу GetTechAnalysis, но получаю ошибку
Unhandled exception. System.ArgumentException: Conversion from DateTime to Timestamp requires the DateTime kind to be Utc (Parameter 'dateTime')
   at Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime dateTime)
   at Program.Main(String[] args) in C:\C#_DEV\Test\TinkofTest\Program.cs:line 14


Что не так с Timestamp, не ка не пойму,
Сам код:
using Google.Protobuf.WellKnownTypes;

internal class Program
{
    private static void Main(string[] args)
    {
        var settings = new Tinkoff.InvestApi.InvestApiSettings()
        {
            AccessToken = "token"
        };

        var client = Tinkoff.InvestApi.InvestApiClientFactory.Create(settings);

        var getTechAnalysis = client.MarketData.GetTechAnalysis(new Tinkoff.InvestApi.V1.GetTechAnalysisRequest
        {
            IndicatorType = Tinkoff.InvestApi.V1.GetTechAnalysisRequest.Types.IndicatorType.Rsi,
            InstrumentUid = "a22a1263-8e1b-4546-a1aa-416463f104d3",
            From = Timestamp.FromDateTimeOffset(new DateTime(2023,12,31)),
            To = Timestamp.FromDateTime(DateTime.Now),
            Interval = Tinkoff.InvestApi.V1.GetTechAnalysisRequest.Types.IndicatorInterval.OneDay,
            TypeOfPrice = Tinkoff.InvestApi.V1.GetTechAnalysisRequest.Types.TypeOfPrice.High,
            Length = 96,
            //Deviation =
            //{
            //    DeviationMultiplier =
            //    {
            //        Units = 266,
            //        Nano= 905
            //    }
            //}


        }); ;

        foreach (var techAnalysis in getTechAnalysis.TechnicalIndicators)
        {
            Console.WriteLine(
                $"{techAnalysis.Timestamp} {techAnalysis.MiddleBand}");
        }
    }

}


Deviation
закомментировал, по причине возврата NULL.

Подскажите пожалуйста.
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
а так?
From = Timestamp.FromDateTimeOffset(new DateTime(2023, 12, 31).ToUniversalTime()),
To = Timestamp.FromDateTime(DateTime.UtcNow),
у меня ваш код компилируется и исполняется с отказом авторизации, что логично..
.. а по сигнатуре метода из нугет пакета (текущий релиз) то что у вас закомментировано, вроде как и не к месту..
.. если что пишите, обсудим (в профиле у меня телега..

ps что то мне сдается, что по сигнатуре скорее так
From = Timestamp.FromDateTime(new DateTime(2023, 12, 31).ToUniversalTime()),
To = Timestamp.FromDateTime(DateTime.UtcNow),
проDeviation пока не понял..

pps offset все таки смещение/разница, а методы api содержат вменяемые описания на нашем родном. оба параметра предполагают точечное указание даты. формат локального и универсального времени один, разница +3 часа для Мск. это не могло быть причиной ошибки. думаю все таки не удачный выбор метода (смещение/разница).. типа вы запросили 2023 года, ни то в прошлое, ни то в будущее..
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Вроде же чёрным по белому написно:

Conversion from DateTime to Timestamp requires the DateTime kind to be Utc (Parameter 'dateTime')


Timestamp.FromDateTime(DateTime.Now)
Вот тут надо UtcNow

Timestamp.FromDateTimeOffset(new DateTime(2023,12,31)),

и вот тут явно указать kind
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы