Tinkoff / invest-openapi-java-sdk

Apache License 2.0
167 stars 46 forks source link

Ошибка при получении суточных свечей ВТБ #139

Closed shademurder closed 3 years ago

shademurder commented 3 years ago

При попытке получить историю свечей по дням (CandleResolution.DAY) для "Банк ВТБ" возникает следующая ошибка:

com.fasterxml.jackson.databind.JsonMappingException: Numeric value (103506240000) out of range of int (-2147483648 - 2147483647) at [Source: (okio.RealBufferedSource$inputStream$1); line: 1, column: 109] (through reference chain: ru.tinkoff.invest.openapi.model.rest.CandlesResponse["payload"]->ru.tinkoff.invest.openapi.model.rest.Candles["candles"]->java.util.ArrayList[0]->ru.tinkoff.invest.openapi.model.rest.Candle["v"])

Это не единственный случай (не только для ВТБ).

П.С. Хотелось бы в целом иметь возможность выгружать историю по всем позициям по всем шагам. Было бы классно, если бы раз в сутки обновлялся какой-нибудь архив или дамп, который можно было скачать. А то для получения всей истории по какой-нибудь позиции с шагом в 5 минут требуется приличное время из-за ограничений по максимальному числу запросов в минуту (выходит получать примерно по 240 дней информации в минуту).

Dimantchick commented 3 years ago

Архивы - это хорошо бы. Но что мешает сделать самому себе такой архивчик? Апи позволяет. За ночь много на грабит. Или лучше выходные, когда сервера не загруженные. Конкретно по проблеме вы точно указываете правильный диапазон дат?

shademurder commented 3 years ago

Сервис быстро наклепал для этой цели. За выходные собирается не мало, но это реально не так много, как хотелось бы. Всего 1744 позиции и в сумме это действительно долго. Потом обновлять уже будет проще, а пока жду, когда всё соберётся. Диапазон дат точно верный, поскольку таким образом уже было получено огромное количество историй по разным позициям. Тут проблема в том, что с сервера приходит значение больше, чем int и не может смапиться.

shademurder commented 3 years ago

У Apple такая же ситуация и так же только в случае попытки получить историю с шагом в день.

com.fasterxml.jackson.databind.JsonMappingException: Numeric value (2193657452) out of range of int (-2147483648 - 2147483647) at [Source: (okio.RealBufferedSource$inputStream$1); line: 1, column: 793] (through reference chain: ru.tinkoff.invest.openapi.model.rest.CandlesResponse["payload"]->ru.tinkoff.invest.openapi.model.rest.Candles["candles"]->java.util.ArrayList[5]->ru.tinkoff.invest.openapi.model.rest.Candle["v"])

zlumyo commented 3 years ago

Ух, настолько большой объём у кого-то! Чтож, расширим до Long.

Freeongoo commented 3 years ago

я тоже соглашусь, что наличие архивов - это крутая идея.

zlumyo commented 3 years ago

Есть одно препядствие, чтобы поправить описанную проблему. Сейчас SDK генерирует классы из swagger-описания, а там объём торгов у свечи (поле v) задано как int32. Из-за этого генерируется Java-тип int. Получается, что swagger-контракт не соблюдается на стороне сервера - на самом деле это int64. Тут стоит обратиться с этим вопросом в главный репо invest-openapi.

Когда поправится swagger-описание, то делать правки в SDK не понадобится. Достаточно будет просто перекомпилировать ваш проект, чтобы сгененрировать обновлённые классы.