Tinkoff / invest-openapi

Документация для Тинькофф Инвестиции OpenApi
https://tinkoff.github.io/invest-openapi/
457 stars 52 forks source link

Как узнать границы интервала дат для получения данных по свечам? #414

Open espdev opened 3 years ago

espdev commented 3 years ago

Ваш REST API в /market/candles требует указывать валидный интервал дат from/to для получения свечей. Допустим, если я указываю from date или to date, выходящие из интервала существующих данных, ваш API возвращает ошибку со статусом 500:

{
    'message': '[to]: Bad candle interval: from=2015-01-01T00:00:00Z to=2019-12-31T00:00:00Z expected from 1 day to 1 year',
    'code': 'VALIDATION_ERROR'
}

Как мне в этом случае получить, например, всю историю торгов? При этом у вас нет методов для получения границ интервала дат для инструмента (у MoEx ISS API, например, есть endpoint /candleborders). Откуда я должен узнать эти границы, используя ваш API? При получении данных по инструменту, этих данных там также нет (MarketInstrument).

Во-первых, вы могли бы как-то предоставлять эту информацию, например, на endpoint /market/candleborders, по аналогии с MoEx ISS API. Во-вторых, если вы не предоставляете эту информацию, то почему ваш API так жёстко проверяет границы интервала дат и какой в этом смысл? Возвращайте тогда те данные, которые попадают в интервал, а не ошибку Bad candle interval. Что я должен делать с этой ошибкой? Я всё равно не знаю какие границы интервала дат для данных по инструменту.

kitMP commented 3 years ago

@espdev API нерабочий. Смотрите на этот кейс . Даже если у вас будет граница, будет непрозрачная логика ответов API. Дату начала исторических данных обещали добавить, но обещанного как известно очень долго ждут... На текущий момент её можно самому находить.

espdev commented 3 years ago

@kitMP

API нерабочий

Да, я смотрел 341 issue. Как минимум, API непродуманный и неполный. from/to даты вообще могут быть необязательными параметрами, как, например, сделано у Quandl, в таком случае будет возвращаться полная история торгов. Также API Quandl возвращает то, что попадает в заданный интервал, независимо от того, насколько этот интервал широкий и выходит за границы существующих данных, что вполне разумно и удобно. Тут же получается полная ерунда с бессмысленными искусственными ограничениями и неочевидными ошибками.

Находить дату начала истории торгов с помощью перебора/бинарного поиска, дёргая каждый раз API, ну так себе решение, конечно, очень далеко от эффективного и красивого. Лучше бы API исправить и доработать.

AlexanderVolkovTCS commented 3 years ago

Добрый день,

image

espdev commented 3 years ago

@AlexanderVolkovTCS,

Спасибо, теперь я понял, что означает expected from 1 day to 1 year в информации об ошибке. Таким образом вы ограничиваете количество возвращаемых данных через API в одном запросе? То есть, чтобы выгрузить историю дневных свечей за 10 лет я должен десять раз вызвать ваш API с годовыми интервалами?

Я понимаю, что вы ограничиваете количество данных для снижения нагрузки на сеть и API, но это всё равно не отменяет того факта, что мне неизвестная дата начала истории.

AlexanderVolkovTCS commented 3 years ago

То есть, чтобы выгрузить историю дневных свечей за 10 лет я должен десять раз вызвать ваш API с годовыми интервалами?

Да, вызывать надо 10 раз для периода в 10 лет.

мне неизвестная дата начала истории.

Пока таких данных в API нет. Отмечено для реализации в следующей версии.

mikhashev commented 3 years ago

@espdev

Как вариант брать тут: https://api-invest.tinkoff.ru/trading/stocks/get?ticker=FOLD historyStartDate

AlexanderVolkovTCS commented 3 years ago

@espdev это приватное АПИ и мы не гарантируем его работоспособность и неизменность в будущем, поэтому рекомендовать Ваш метод не можем

kitMP commented 3 years ago

@mikhashev А есть описание этого неофициального api?

mikhashev commented 3 years ago

@mikhashev А есть описание этого неофициального api?

нет

kertak90 commented 3 years ago

image запрос такой для Intel возвращает это

image что не так делаю? подскажите

если изменить дату до которой нужно получить данные, то могу получить данные за каждый час, но минутные все возвращают эту ошибку

к примеру успешный запрос image

image

как видно. результат есть

mikhashev commented 3 years ago

image запрос такой для Intel возвращает это

image что не так делаю? подскажите

если изменить дату до которой нужно получить данные, то могу получить данные за каждый час, но минутные все возвращают эту ошибку

к примеру успешный запрос image

image

как видно. результат есть

минутки вроде за месяц только доступны

kertak90 commented 3 years ago

не, попробовал, недоступно, такая же ошибка

oridisboss commented 3 years ago

@mikhashev у вас запрос на локалхост идет, проверьте напрямую:

curl -X GET "https://api-invest.tinkoff.ru/openapi/market/candles?figi=BBG000C0G1D1&from=2021-09-03T12%3A25%3A03%2B03%3A00&to=2021-09-03T15%3A25%3A03%2B03%3A00&interval=1min" -H "accept: application/json" -H "Authorization: Bearer {token}"

Минутки должны возвращаться

kertak90 commented 3 years ago

localhost ну это я локально сервис запускал, который через C# интерфейс делает запрос на сервер, хм, часовики возвращаются, приду домой попробую этот способ, Спасибо.