Если я правильно обрабатываю поле, то мне пришли следующие флаги: flag1 - Заявка снята flag2 - Заявка на продажу flag3 - Заявка лимитная flag4 - Разрешить сделки по разным ценам flag8 - Снять остаток
При этом заявка была исполнена (на время не обращайте внимание, у меня рассинхронизация между логом и сервером, OnTrade к сожалению записывал):
1. Насколько я понимаю, флаги в данном случае заполнились неверно? И причина описанная в reject_reason тоже невалидная? Как правильно определить что заявка с типом FOK была исполнена при обработке OnOrder ? 2. Почему по бирже СПБ приходят два одинаковых callback в OnOrder ?
bazuce написал: 1. Насколько я понимаю, флаги в данном случае заполнились неверно? И причина описанная в reject_reason тоже невалидная? Как правильно определить что заявка с типом FOK была исполнена при обработке OnOrder ?
Не понятно зачем гадать. Флаги описаны в документации QLUA.chm -Описание битовых флагов --Флаги для таблиц Заявки, Заявки на внебиржевые сделки, Сделки, Сделки для исполнения
Там написано
Цитата
бит 0 (0x1) Заявка активна, иначе – не активна бит 1 (0x2) Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена
у Вас флаги flags=286. В битовом представлении это число 100011110 Видим что 0x1 равен 0, а 0x2 равен 1. Согласно документации это значит что заявка снята. И на скриншоте она у Вас снята. И по reject_reason она снята. Почему Вы думаете что она исполнена совсем не понятно. Посмотрите сами в таблице заявок, колонка Статус
Цитата
bazuce написал: 2. Почему по бирже СПБ приходят два одинаковых callback в OnOrder ?
Они не одинаковые. Посмотрите параметры uid и trans_id Двойная отправка происходит как раз из-за обновления этих полей.
Цитата
bazuce написал: 3. Зачем так много вызовов OnTrade?
В отличии от OnOrder, тут другая история, Вы столкнулись с известной ошибкой повторной рассылки OnTrade. Данная ошибка нам известна и к сожалению, пока не исправлена, но обязательно будет.
Цитата
bazuce написал: 4. Почему причина снятия заявки теперь reject_reason="Вследствие возможной кросс-сделки"?
"кросс сделка" это потенциальная сделка с самим собой. Возможно в момент срабатывания заявки у Вас была активна другая заявка противоположного направления? В любом случае, как Вы на нее наткнулись подскажет только брокер.
Не понятно зачем гадать. Флаги описаны в документации QLUA.chm -Описание битовых флагов --Флаги для таблиц Заявки, Заявки на внебиржевые сделки, Сделки, Сделки для исполнения
Я не гадаю, это и есть интерпретация на основе документации
Цитата
у Вас флаги flags=286. В битовом представлении это число 100011110 Видим что 0x1 равен 0, а 0x2 равен 1. Согласно документации это значит что заявка снята. И на скриншоте она у Вас снята. И по reject_reason она снята. Почему Вы думаете что она исполнена совсем не понятно. Посмотрите сами в таблице заявок, колонка Статус
Это скриншот таблицы сделок, заявка была исполнена, есть биржевой номер.
Цитата
"кросс сделка" это потенциальная сделка с самим собой. Возможно в момент срабатывания заявки у Вас была активна другая заявка противоположного направления? В любом случае, как Вы на нее наткнулись подскажет только брокер.
Мне кажется Вы не совсем полностью рассмотрели второй пример или вообще не посмотрели, давайте опишу его словесно, чтобы стало понятнее:
1. Я отправил заявку с типом FOK (Полностью или отклонить), получил подтверждение что она принята с номером 39888085050 2. Я получил несколько экземпляров OnTrade с частичным исполнением заявки под номером 39888085050 3. Я получил OnOrder по уже частично исполненной заявке 39888085050 со статусом rejected="Вследствие возможной кросс-сделки", и флагами, что заявка снята. 4. После я получил вторую пачку сообщений OnTrade с второй частью исполнения на 10 лотов (не добавил кусок лога)
Является ли валидной ситуация в которой я получил две сделки и статус по заявке - снята с причиной rejected="Вследствие возможной кросс-сделки"?
Заявка отправляется с типом IOC. Это несколько меняет логику, получается по такому типу заявок можно получить флаг исполнения в сообщении получаемом при обработки OnOrder только при полном исполнении?
Что в первом, что во втором примере заявка исполнилась только частично
bazuce написал: Допустил ошибку в первом пункте, да и темы тоже.
Заявка отправляется с типом IOC. Это несколько меняет логику, получается по такому типу заявок можно получить флаг исполнения в сообщении получаемом при обработки OnOrder только при полном исполнении?
Что в первом, что во втором примере заявка исполнилась только частично
Заявка с типом IOC может исполниться частично, после чего сама снимается. В Вашем случае, она была частично исполнена после чего снята, это Вы и видите. Частичное исполнение должно быть видно в параметре ext_order_status, проверьте этот момент. Однако ошибка про кросс курсы, в данном случае не понятна. Как уже было сказано и еще раз повторим, про нее может ответить только Ваш брокер. У нас нет совершенно никакой возможности определить причины ее возникновения. Вероятная причина уже была озвучена, но без брокера это лишь догадки, не более.