Заполнение флагов для заявок с tif=FOK

Страницы: 1
RSS
Заполнение флагов для заявок с tif=FOK
 
Возникла проблема при попытке интерпретации флагов, получаемых при обработке OnOrder(), биржа SPB.

Я отправляю:
2018-10-01 15:10:55.731 lvl 4: {["Условие исполнения"]="Снять остаток",ACTION="Ввод заявки",CLASSCODE="SPBXM",
                               ["Комментарий"]="comment",TRANS_ID="540",["К/П"]="Продажа",["Количество"]="50",["Цена"]="100.97",
                               ["Инструмент"]="SQ",["Торговый счет"]="AAAAA",["Класс"]="SPBXM",["Тип"]="Лимитированная"}

В ответ получаю набор сообщений:
2018-10-01 15:10:55.746 lvl 4: OnTransReply()
2018-10-01 15:10:55.746 lvl 4: {sec_code="SQ",price=100.97,client_code="BBBBB",balance=0,time=151400,status=3,
                               class_code="SPBXM",trans_id=540,exchange_code="3988228638",date_time={week_day=1,
                               hour=15,ms=963,mcs=963583,day=1,month=10,sec=0,year=2018,min=14},uid=1183,flags=393217,
                               result_msg="Заявка 39882286380 успешно зарегистрирована.",brokerref="BBBBB",firm_id="CCCCC",
                               quantity=50,order_num=39882286380,server_trans_id=1863,account="AAAAA"}
2018-10-01 15:10:55.761 lvl 4: OnOrder()
2018-10-01 15:10:55.761 lvl 4: {withdraw_datetime={week_day=1,hour=15,ms=962,mcs=962914,day=1,month=10,sec=0,year=2018,min=14},
                               price=100.97,value_entry_type=0,balance=1,repo_value_balance=0,value=5048.5,qty=50,passive_only_order=0,
                               class_code="SPBXM",activation_time=0,userid="",expiry=-1,flags=286,linkedorder=0,ordernum=39882286380,
                               sec_code="SQ",canceled_uid=0,side_qualifier=0,client_code="BBBBB",visible=0,firmid="CCCCC",
                               datetime={week_day=1,hour=15,ms=962,mcs=962914,day=1,month=10,sec=0,year=2018,min=14},yield=0,
                               reject_reason="Истекло время действия",capacity=0,acnt_type=0,repo2value=0,start_discount=0,
                               min_qty=0,ext_order_flags=0,exec_type=3,order_num=39882286380,repovalue=0,repoterm=0,
                               accruedint=0,account="AAAAA",seccode="SQ",uid=0,brokerref="BBBBB",exchange_code="3988228638",
                               settlecode="T2",price2=0,trans_id=0,bank_acc_id=""}
2018-10-01 15:10:55.761 lvl 4: OnOrder()
2018-10-01 15:10:55.761 lvl 4: {withdraw_datetime={week_day=1,hour=15,ms=962,mcs=962914,day=1,month=10,sec=0,year=2018,min=14},
                               price=100.97,value_entry_type=0,balance=1,repo_value_balance=0,value=5048.5,qty=50,
                               passive_only_order=0,class_code="SPBXM",activation_time=0,userid="",expiry=-1,
                               flags=286,linkedorder=0,ordernum=39882286380,sec_code="SQ",
                               canceled_uid=0,side_qualifier=0,client_code="BBBBB",visible=0,firmid="CCCCC",
                               datetime={week_day=1,hour=15,ms=962,mcs=962914,day=1,month=10,sec=0,year=2018,min=14},yield=0,
                               reject_reason="Истекло время действия",capacity=0,acnt_type=0,repo2value=0,start_discount=0,
                               min_qty=0,ext_order_flags=0,exec_type=3,order_num=39882286380,repovalue=0,repoterm=0,
                               accruedint=0,account="AAAAA",seccode="SQ",uid=1183,brokerref="BBBBB",
                               exchange_code="3988228638",settlecode="T2",price2=0,trans_id=540,bank_acc_id=""}

Если я правильно обрабатываю поле, то мне пришли следующие флаги:
flag1 - Заявка снята
flag2 - Заявка на продажу
flag3 - Заявка лимитная
flag4 - Разрешить сделки по разным ценам
flag8 - Снять остаток

При этом заявка была исполнена (на время не обращайте внимание, у меня рассинхронизация между логом и сервером, OnTrade к сожалению записывал):




1. Насколько я понимаю, флаги в данном случае заполнились неверно? И причина описанная в reject_reason тоже невалидная? Как правильно определить что заявка с типом FOK была исполнена при обработке OnOrder ?
2. Почему по бирже СПБ приходят два одинаковых callback в OnOrder ?
 
Включил запись OnTrade, этот пример получился даже интереснее:


Отправил:
2018-10-01 16:53:26.626 lvl 4: {["Условие исполнения"]="Снять остаток",ACTION="Ввод заявки",CLASSCODE="SPBXM",["Комментарий"]="BBBBB/",TRANS_ID="1031",["К/П"]="Покупка",["Количество"]="20",["Цена"]="99.22",["Инструмент"]="SQ",["Торговый счет"]="AAAAA",["Класс"]="SPBXM",["Тип"]="Лимитированная"}

Получил:
2018-10-01 16:53:26.641 lvl 4: OnTransReply()
2018-10-01 16:53:26.641 lvl 4: {sec_code="SQ",price=99.22,client_code="BBBBB",balance=0,time=165631,status=3,class_code="SPBXM",trans_id=1031,exchange_code="3988808505",date_time={week_day=1,hour=16,ms=880,mcs=880171,day=1,month=10,sec=31,year=2018,min=56},uid=1183,flags=262145,result_msg="Заявка 39888085050 успешно зарегистрирована.",brokerref="BBBBB/",firm_id="CCCCC",quantity=20,order_num=39888085050,server_trans_id=1863,account="AAAAA"}
2018-10-01 16:53:26.683 lvl 4: OnTrade -<
2018-10-01 16:53:26.683 lvl 4: {price=99.22,settle_date=20181003,trade_num=36712950,lower_discount=0,exchange_comission=0,value=992.2,qty=10,reporate=0,clearing_bank_accid="",class_code="SPBXM",userid="",tradenum=36712950,flags=0,canceled_datetime={week_day=1,hour=0,ms=0,mcs=0,day=1,month=1,sec=0,year=1601,min=0},datetime={week_day=1,hour=16,ms=877,mcs=877885,day=1,month=10,sec=31,year=2018,min=56},clearing_firmid="",kind=1,canceled_uid=0,ordernum=39888085050,sec_code="SQ",system_ref="",block_securities=0,repoterm=0,broker_comission=0,period=1,client_code="BBBBB",linked_trade=0,firmid="ALRBM",account="AAAAA",yield=0,seccode="SQ",trans_id=1031,upper_discount=0,repo2value=0,start_discount=0,tech_center_comission=0,trade_currency="USD",accrued2=0,order_num=39888085050,repovalue=0,exchange_code="3671295",accruedint=0,settle_currency="USD",cpfirmid="",uid=1183,brokerref="BBBBB/",station_id="3988808505",price2=0,clearing_comission=0,settlecode="T2",bank_acc_id=""}
2018-10-01 16:53:26.683 lvl 4: OnTrade -<
2018-10-01 16:53:26.683 lvl 4: {price=99.22,settle_date=20181003,trade_num=36712950,lower_discount=0,exchange_comission=0,value=992.2,qty=10,reporate=0,clearing_bank_accid="",class_code="SPBXM",userid="",tradenum=36712950,flags=0,canceled_datetime={week_day=1,hour=0,ms=0,mcs=0,day=1,month=1,sec=0,year=1601,min=0},datetime={week_day=1,hour=16,ms=877,mcs=877885,day=1,month=10,sec=31,year=2018,min=56},clearing_firmid="",kind=1,canceled_uid=0,ordernum=39888085050,sec_code="SQ",system_ref="",block_securities=0,repoterm=0,broker_comission=0,period=1,client_code="BBBBB",linked_trade=0,firmid="ALRBM",account="AAAAA",yield=0,seccode="SQ",trans_id=1031,upper_discount=0,repo2value=0,start_discount=0,tech_center_comission=0,trade_currency="USD",accrued2=0,order_num=39888085050,repovalue=0,exchange_code="3671295",accruedint=0,settle_currency="USD",cpfirmid="",uid=1183,brokerref="BBBBB/",station_id="3988808505",price2=0,clearing_comission=0,settlecode="T2",bank_acc_id=""}
2018-10-01 16:53:26.683 lvl 4: OnTrade -<
2018-10-01 16:53:26.684 lvl 4: {price=99.22,settle_date=20181003,trade_num=36712950,lower_discount=0,exchange_comission=0,value=992.2,qty=10,reporate=0,clearing_bank_accid="",class_code="SPBXM",userid="",tradenum=36712950,flags=0,canceled_datetime={week_day=1,hour=0,ms=0,mcs=0,day=1,month=1,sec=0,year=1601,min=0},datetime={week_day=1,hour=16,ms=877,mcs=877885,day=1,month=10,sec=31,year=2018,min=56},clearing_firmid="",kind=1,canceled_uid=0,ordernum=39888085050,sec_code="SQ",system_ref="",block_securities=0,repoterm=0,broker_comission=0,period=1,client_code="BBBBB",linked_trade=0,firmid="ALRBM",account="AAAAA",yield=0,seccode="SQ",trans_id=1031,upper_discount=0,repo2value=0,start_discount=0,tech_center_comission=0,trade_currency="USD",accrued2=0,order_num=39888085050,repovalue=0,exchange_code="3671295",accruedint=0,settle_currency="USD",cpfirmid="",uid=1183,brokerref="BBBBB/",station_id="3988808505",price2=0,clearing_comission=0,settlecode="T2",bank_acc_id=""}
2018-10-01 16:53:26.684 lvl 4: OnOrder()
2018-10-01 16:53:26.684 lvl 4: {withdraw_datetime={week_day=1,hour=16,ms=877,mcs=877885,day=1,month=10,sec=31,year=2018,min=56},price=99.22,value_entry_type=0,balance=10,repo_value_balance=0,value=1984.4,qty=20,passive_only_order=0,class_code="SPBXM",activation_time=0,userid="",expiry=-1,flags=282,linkedorder=0,ordernum=39888085050,sec_code="SQ",canceled_uid=0,side_qualifier=0,client_code="BBBBB",visible=0,firmid="ALRBM",datetime={week_day=1,hour=16,ms=877,mcs=877885,day=1,month=10,sec=31,year=2018,min=56},yield=0,reject_reason="Вследствие возможной кросс-сделки",capacity=0,acnt_type=0,repo2value=0,start_discount=0,min_qty=0,ext_order_flags=0,exec_type=3,order_num=39888085050,repovalue=0,repoterm=0,accruedint=0,account="AAAAA",seccode="SQ",uid=0,brokerref="BBBBB/",exchange_code="3988808505",settlecode="T2",price2=0,trans_id=0,bank_acc_id=""}
2018-10-01 16:53:26.684 lvl 4: OnOrder()
2018-10-01 16:53:26.685 lvl 4: {withdraw_datetime={week_day=1,hour=16,ms=877,mcs=877885,day=1,month=10,sec=31,year=2018,min=56},price=99.22,value_entry_type=0,balance=10,repo_value_balance=0,value=1984.4,qty=20,passive_only_order=0,class_code="SPBXM",activation_time=0,userid="",expiry=-1,flags=282,linkedorder=0,ordernum=39888085050,sec_code="SQ",canceled_uid=0,side_qualifier=0,client_code="BBBBB",visible=0,firmid="ALRBM",datetime={week_day=1,hour=16,ms=877,mcs=877885,day=1,month=10,sec=31,year=2018,min=56},yield=0,reject_reason="Вследствие возможной кросс-сделки",capacity=0,acnt_type=0,repo2value=0,start_discount=0,min_qty=0,ext_order_flags=0,exec_type=3,order_num=39888085050,repovalue=0,repoterm=0,accruedint=0,account="AAAAA",seccode="SQ",uid=1183,brokerref="BBBBB/",exchange_code="3988808505",settlecode="T2",price2=0,trans_id=1031,bank_acc_id=""}

3. Зачем так много вызовов OnTrade?
4. Почему причина снятия заявки теперь reject_reason="Вследствие возможной кросс-сделки"?
 
Цитата
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, проверьте этот момент.
Однако ошибка про кросс курсы, в данном случае не понятна.  Как уже было сказано и еще раз повторим, про нее может ответить только Ваш брокер. У нас нет совершенно никакой возможности определить причины ее возникновения.
Вероятная причина уже была озвучена, но без брокера это лишь догадки, не более.
Страницы: 1
Читают тему
Наверх