Tinkoff / invest-openapi

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

Получить статус лимитного ордера, зная его id, и на проде и в песочнице #593

Closed MrJimm closed 3 years ago

MrJimm commented 3 years ago

Какой на данный момент, в текущем API, алгоритм получения статуса заявки, если известен ее id? Достаточно общий для прода и песочницы

Почитав доки и issues пришел к выводу, что просто знать id лимитки - недостаточно, необходимо знать еще figi инструмента. Подскажите, верно ли я понимаю текущее положение дел, и если да - какой вообще есть вариант получения статуса, имея только идентификатор самой лимитки? Текущий алгоритм: 1) Получить список активных заявок из /orders 2) Проверить по id, есть ли наша лимитка в нем 3) Если да - мы получили все, что необходимо (но это сработает только для лимиток, которые еще не были исполнены/отменены) 4) Если нет - получить список операций через /operations, но...

Вот тут возникает проблема №1:

/operations зачем-то требует обязательным параметром figi инструмента. То есть одного универсального идентификатора ордера оказывается недостаточно, чтобы однозначно получить операцию для него - ведь мы не можем просто выгрзить все операции за период и поискать в них по id. Что делать если есть только id лимитки?

Проблема №2:

Перед тем, как выкатывать что-то на прод, все тестируется в песочнице. Однако в operations операции для персочницы возвращаются с идентификаторами вида "18678795", тогда как идентификаторы самих ордеров имеют вид "3a421fbd-a7a1-4ba1-8003-b8c670c0b27b". Как в таком случае вообще сопоставлять выставленные лимитки и информацию об их выполнении?

BaryshevS commented 3 years ago

Вот тут возникает проблема №1: /operations зачем-то требует обязательным параметром figi инструмента

Не требуется. Просто смотри все за сутки. Там есть id операции. как только status= Done проверяй, чтобы обязательно еще и price >0 тогда можно помещать операцию как выполненную.

Ну а алгоритм проверки можно еще дополнить проверкой /portfolio. Ну и проверяй чтобы тебе нужное кол-во лотов насыпали. Например заявка ушла не полностью. исполненной при закрытии биржи.

MrJimm commented 3 years ago

Спасибо за ответ, да, figi оказался необязательным. Но Проблема №2 все еще актуальна, и я по прежнему не понимаю, как могу связать id заявки и id информации о ней из operations (потому что из-за особенностей песочницы через orders мы выставленную заявку не получим никогда). Отсутствие возможности протестировать все в песочнице блокирует возможность делать дальше что-либо.

Как в песочнице можно получить операцию зная id заявки?

BaryshevS commented 3 years ago

Спасибо за ответ, да, figi оказался необязательным. Но Проблема №2 все еще актуальна, и я по прежнему не понимаю, как могу связать id заявки и id информации о ней из operations (потому что из-за особенностей песочницы через orders мы выставленную заявку не получим никогда). Отсутствие возможности протестировать все в песочнице блокирует возможность делать дальше что-либо.

Как в песочнице можно получить операцию зная id заявки?

Проще взять и на бою проверить. Купи RIG - 2.9$всего

BaryshevS commented 3 years ago

Не нужно еще на баги в песочнице закладываться, закладывайся на баги на бою :)

polkila commented 3 years ago

Спасибо за ответ, да, figi оказался необязательным. Но Проблема №2 все еще актуальна, и я по прежнему не понимаю, как могу связать id заявки и id информации о ней из operations (потому что из-за особенностей песочницы через orders мы выставленную заявку не получим никогда). Отсутствие возможности протестировать все в песочнице блокирует возможность делать дальше что-либо.

Как в песочнице можно получить операцию зная id заявки?

В некоторых случаях, когда не заняты отловом багов — в место этого в приоритете отработать алгоритм (или стратегию робота), тогда пригодится такой способ: 1) В песочнице сконструировали метод для отправки запроса "/orders/limit-order". 2) Убедились, что он выполняется и покупка осуществляется, логи ведутся, аудит портфеля производится. 3) Заменили его на метод-заглушку, которая имитирует запрос и возвращает успешный результат. {trackingId: Date.now(), payload: {orderId: Date.now(), operation: "Buy", status: "Fill", requestedLots: lots, executedLots: lots}, status: "Ok"}

AlexanderVolkovTCS commented 3 years ago

Существующая песочница ничего не знает про рыночные цены инструментов и все лимитки исполняет по указанной цене, лучше использовать метод от @polkila