Closed sergeymavrin closed 3 years ago
Добрый день. В openapi кэша статусов заявок нет, но так как система не строго-консистентна в любой момент времени, то иногда на стороне брокера могут быть задержки в изменении статусов поручений. Аналогичные задержки могут быть касаться и списка операций / портфолио. Рекомендуем проверять на результат отмены на OrderNotAvailable.
@AlexanderVolkovTCS, я правильно Вас понял, что если в списке ордеров ордер в статусе New, а при попытке отменить ордер получаю code: OrderNotAvailable - считаю, что ордер исполнился успешно?
Либо исполнился успешно, либо уже был отменен ранее либо был снят (например, из-за завершения торговой сессии). В любом случае это уже не NEW.
Как-то непонятно как определить - ордер исполнился или отменился из-за завершения торговой сессии(т.к. в instrument_info данные по началу и завершению торгов не работает правильно #498 ). Т.е. единственный вариант перезапрашивать портфель, что добавляет количество запросов, а там можно налететь на лимиты. Было бы неплохо иметь endpoint, передав в который orderId получить по нему информацию (даже если он исполнился).
Я понимаю, что вы не хотите дорабатывать текущий OpenApi, но кажется количество проблем и требуемых улучшений уже достигает критического объёма.
непонятно как определить
надежнее всего определять факт исполнения ордера по портфелю (уменьшение баланса и добавление позиции),
добавляет количество запросов
лимиты запросов на портфель не влияют на лимиты по остальным группам методов,
Было бы неплохо иметь endpoint
Эндпоинт со статусом заявок запланирован, но не в существующем openAPI.
кажется количество проблем и требуемых улучшений
Отмечу, что лаги с ордерами или операциями возникают не в опенапи, а в сервисах брокера
лимиты запросов на портфель не влияют на лимиты по остальным группам методов,
да, но у меня активно используется запрос валют из портфеля, если добавить ещё запросы самого портфеля на 24 инструментах (сейчас робот играется 24 инструментами, планируется расширение до 50), то 120 запросов/мин. явно будет нехватать.
Эндпоинт со статусом заявок запланирован, но не в существующем openAPI.
Может вам помощь нужна ) А то очень много тут в задачках вы ссылаетесь на следующую версию openAPI, но когда это произойдёт - секрет
Отмечу, что лаги с ордерами или операциями возникают не в опенапи, а в сервисах брокера
Я не про лаги, а про проблемы, которые описаны в этом трекере и они не от сервисов брокера. Например из проблем - неправильное время срабатывания открытия/закрытия торгов, остановки торгов, когда планки. И очень много улучшений, описанных в задачах уже хотелось бы:
В любом случае спасибо )
@sergeymavrin Лично я для такой задачи сначала получаю список ордеров и смотрю какой статус у ордера по данному айди, если ордера нет, то получаю список операций (operations) и там поле id соответствует айди вашего ордера, так можно узнать есть ли уже выполненные операции по вашему оредеру. Но стоит понимать что операции обновляются не моментально, т.е. если нет нужного ордера и операции тоже, то нужно продолжать ждать, либо пытаться отменить ордер, если ваш алгоритм этого хочет. И да при выставлении лимитного ордера вам в ответ возвращается ордер, у которого есть orderId по нему и следует все проверять, а не по figi.
@Dazlonar Да, действительно, неправильно написал - проверяю по orderId, а не по figi. Если нужного orderId в списке нет, то я автоматически считаю, что ордер исполнился (у него там особо и вариантов нет - или New, или PartiallyFill. Другие статусы никогда не видел, а если придёт - логирование есть - буду смотреть ). Тут же немного другая ситуация - ордер в статусе New, а при попытке его отмены - его уже нет.
Логика работы робота:
Теперь смотрим логи:
Можно пояснить что здесь произошло?
Как я понял - openapi имеет какое-то кэширование. Т.е. что я вижу - при запросе ордеров - ордер в статусе new, но по факту он уже исполнился. 10 секунд была неактуальная информация по ордерам.