Tinkoff / invest-openapi-java-sdk

Apache License 2.0
167 stars 46 forks source link

Объяснение механизма выставления статуса заявки #137

Closed Freeongoo closed 3 years ago

Freeongoo commented 3 years ago

Не совсем понятна логика выставления статусов заявок.

  1. Можете более детально описать какой статус в какой момент возникает:
public enum OrderStatus {
  NEW("New"),
  PARTIALLYFILL("PartiallyFill"),
  FILL("Fill"),
  CANCELLED("Cancelled"),
  REPLACED("Replaced"),
  PENDINGCANCEL("PendingCancel"),
  REJECTED("Rejected"),
  PENDINGREPLACE("PendingReplace"),
  PENDINGNEW("PendingNew");
}
  1. Можете описать цепочку выставления статуса заявки при покупке, то есть создании новой заявки, а именно что за чем следует? насколько я понял, то в такой последовательности: NEW -> PARTIALLYFILL -> FILL.

  2. Статусы "Pending.." в каком случае возникают?

Dimantchick commented 3 years ago

Поидее так: Пендинг нью - процесс создания. Новый Партиалли филл (например купилось 3, а заявка на 5) Филл. (заявка исполнена) Это обычный цикл жизни. Только Пендинг вы чаще всего не увидите. Насколько понял это "в обработке", в процессе... Иногда можно получить реджектед - это отказ биржи выставить заявку. Ценцел - итак понятно, что отменена. Если вы отменили, биржа или если заявка не исполнена до закрытия биржи. Реплейс не помню как получить. Важно! Статусы кроме нового и частично исполненного вы увидите очень редко! Всё это относится только к выставленым заявкам, состояние которых пока не очень отслеживается! Фактически нормально работать можно только по принципу:

  1. Выставили заявку
  2. Заявка пропала
  3. Лопатим операции, чтобы понять, что с ней стало. Пока только так. Запросы на реализацию отслеживания уже есть в апи, так что ждём.
Freeongoo commented 3 years ago

@Dimantchick спасибо за информацию. Насколько правильно в цикле ожидать что заявка будет выставлена в Fill (когда выполняется запрос к заявам по полученному orderId и считывание текущего состояния), естественно за исключением статуса Reject - когда понятно, что заявка уже не выполнится. Просто моя логика подразумевает дальнейшую обработку только после того как заявка в Fill. Или это путь в никуда?

Dimantchick commented 3 years ago

Фактически установлено экспериментально, что статус Fill вы практически никогда не увидите!!! Сколько не проверял, при исполнении заявки она мгновенно исчезает. Мониторить имеет смысл только по операциям. Смотрите https://tinkoffcreditsystems.github.io/invest-openapi/swagger-ui/swagger.yaml У операции есть запрошенное количество и количество выполненных, а так же статус. При закрытии биржи, если не выполнено даже частично, то заявка отменяется. Если выполнено частично, то операция будет в статусе Done, но quantity и quantityExecuted будет отличаться. В процессе выполнения заявки вы при запросах операций будете видеть изменения в операции по ИД.

Dimantchick commented 3 years ago

Собственно https://github.com/TinkoffCreditSystems/invest-openapi/issues/539 запрос функционала есть. Если будет стрим, то можно будет отслеживать полноценный статус заявки. По срокам разработчики сказать ничего не могут, но по скорости развития апи - это месяцы! Дорожной карты, приоритетов тоже нет, так что только ждать.

Dimantchick commented 3 years ago

Еще рекомендую прочитать https://github.com/TinkoffCreditSystems/invest-openapi/issues/51#issuecomment-804448906 Вроде понятнее описан алгоритм работы.

К разработчикам. Может стоит в основном репозитории добавить официальное разъяснение о порядке работы с заявками/операциями? Люди регулярно задают одни и те же вопросы.

Freeongoo commented 3 years ago

@Dimantchick спасибо!

zlumyo commented 3 years ago

@Dimantchick предложение хорошее, но это за рамками SDK. Создайте запрос в главном репо invest-openapi