SmartQuant Discussion

Automated Quantitative Strategy Development, SmartQuant Product Discussion and Technical Support Forums
It is currently Tue Jan 28, 2020 12:23 am

All times are UTC + 3 hours




Post new topic Reply to topic  [ 36 posts ]  Go to page Previous  1, 2, 3  Next
Author Message
 Post subject: Re: OSL FIX
PostPosted: Thu May 12, 2011 3:43 pm 
Offline

Joined: Thu Jun 03, 2010 5:15 pm
Posts: 159
Location: Russia
Да уж, не до лингвистического анализа было. Зато теперь событийная модель цельная в голове.
Ещё, кстати, незаслуженно пропущено свойство Order.IsReplaced.


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Mon May 16, 2011 8:18 pm 
Offline

Joined: Thu Jun 03, 2010 5:15 pm
Posts: 159
Location: Russia
Потестировал версию 3.1.5 + пообщался с брокером. Работает. Но! Фикс был бы таким солнечным, если бы не реплейс. Все вопросы и нюансы связаны с тем, что реплейс - это снятие_старой/выставление_новой заявок, поэтому в репортах могут приходить данные по уже снятой заявке, в то время как новая уже живёт на бирже. Для тех, кто идёт по моим стопам, если таковые имеются, жёсткое правило: слать реквест только дождавшись ответа на предыдущий, то есть PendingReplace эмулировать в коде. При этом корректных ответов может быть два: Replaced (при успехе) и Rejected (при ошибке перестановки).
=============
Теперь новый нюанс: отработка Replace при одновременном PartiallyFilled привела к неожиданным результатам, см. скриншот.
Все транзакции приняты от брокера верно, я сравнивал по логам фикса. Единственным неожиданным моментом явилось запихивание частичного исполнения LastQty=3 в транзакцию с PendingReplace, а потом приход PartiallyFilled с пустым LastQty. В принципе, ничего страшного, но меня смутила отработка этой ситуации моим кодом.

Что я делаю: в событиях OnOrderFilled и OnOrderPartiallyFilled учитываю исполнившееся количество, буквально
Code:
if (order.LastQty > 0)
    Log("Исполнено лотов: " + order.LastQty)
и вот что было в логе:
Code:
Исполнено лотов: 1
Исполнено лотов: 4
Исполнено лотов: 2
Исполнено лотов: 17
Исполнено лотов: 17
Исполнено лотов: 2
то есть, 17 лотов каким-то образом записались повторно.

Вопрос, видимо, к Алексею, могло так случиться, что событие OnOrderPartiallyFilled произошло вне очереди по PendingReplace статусам?
Ну, и вообще, что Вы думаете по поводу корректности такой последовательности со стороны брокера?


Attachments:
oq_partfil_replace.jpg
oq_partfil_replace.jpg [ 44.06 KiB | Viewed 9888 times ]
Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Tue May 17, 2011 4:40 pm 
Offline

Joined: Thu Jun 03, 2010 5:15 pm
Posts: 159
Location: Russia
Предыдущий вопрос можно упростить до вопроса, почему по приходу транзакции PendingReplace (третья строчка сверху на скриншоте) не обновились параметры order?


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Tue May 17, 2011 5:04 pm 
Offline
Site Admin

Joined: Thu Jul 17, 2003 10:39 am
Posts: 1478
ну тут ничего странного нет - Вы посылаете реплейз, но пока он обрабатывается случается филл и в итоге мы получаем репорт с ExecType=Trade(или PartialFill), OrdStatus=PendingReplace. ExecType Вы не видите, но именно по нему распознается большинство изменений с заявкой нашим ордер менеджментом, а OrdStatus собственно показушное свойство, ибо оно говорит в каком статусе заявка в данный момент, но совершенно не отражает что с ней произошло и почему был послан репорт.

_________________
SmartQuant Development Team


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Tue May 17, 2011 5:24 pm 
Offline

Joined: Thu Jun 03, 2010 5:15 pm
Posts: 159
Location: Russia
Понял. У этой транзакции был ExecType=1 (PARTIAL_FILL) и она сгенерировала событие OnPartiallyFilled. Почему тогда LastQty вместо 3 было 17?

UPD: Нашёл ещё один подобный случай, два подряд PendingReplace, исполненный 1 лот во втором, который я вообще не увидел в коде. Интуитивно чувствую, что объяснение одно, а именно: LastQty каким-то образом берётся из предшествующего этим двум PendingReplace сообщения. Посмотрите, пожалуйста.
Просто я учитываю позиции в коде самостоятельно, и, соответственно, в этих местах терял позиции.


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Wed May 18, 2011 10:33 am 
Offline
Site Admin

Joined: Thu Jul 17, 2003 10:39 am
Posts: 1478
Даже не знаю, что можно смотреть. В случае с фикс-провайдерами, что пришло в репорте то и попадает к нам, то есть если в репорте стоит LastQty=17, значит 17, а не 3.
Единственно, что можно проанализировать - это реквесты/репорты по заявке, которая вызывает сомнения в правильности полей. Из логов. Можете их найти и мне переслать?
Вариант ошибки брокера или его собственного трактования мессаг все-таки существует...

_________________
SmartQuant Development Team


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Mon Aug 01, 2011 6:22 pm 
Offline

Joined: Thu Jun 03, 2010 5:15 pm
Posts: 159
Location: Russia
Алексей, добрый день.
Хотел спросить о сообщении MarketDataRequestReject. Сейчас его отработка заключается в удалении из системы исходных запросов и его записи в ProviderErrors. Однако в реальности брокер иногда перезапускает данные по отдельным биржам, присылая MarketDataRequestReject'ы с текстом 'connection lost'. Подразумевается, что, получив реджекты, я переподпишусь на данные. Но в OQ у меня нет возможности делать это в автоматическом режиме, взаимодействие с МД завязано на ручные операции, поэтому приходится мониторить ошибки провайдера и вручную перелогинивать адаптер.

А вопрос такой: видите ли Вы необходимость в функционале переподписки на МД?
Пробежал по свойствам адаптеров - нигде нет подобного, неужели все поставщики настолько надёжны, что сам реджект считается ошибкой?


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Tue Aug 02, 2011 9:50 am 
Offline
Site Admin

Joined: Thu Jul 17, 2003 10:39 am
Posts: 1478
Я, честно говоря, не сталкивался с такой ситуацией, когда реджект используется в качестве сообщения о том, что с каналом данных что-либо произошло. В не-фикс плагинах, в такой ситуации просто выдается информационное сообщение от АПИ, что произошел сбой с данными, но дальше АПИ сама восстанавливает их поток, если это конечно возможно. Да и в фикс плагинах такое использование довольно странно в том плане, что реджект все-таки на реквест придуман, а если случилось что-то с соединением, то я вижу эту проблему в другом месте, а если с соединением между брокером и биржей, то просто тишина в данных наступала.

_________________
SmartQuant Development Team


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Tue Aug 02, 2011 11:19 am 
Offline

Joined: Thu Jun 03, 2010 5:15 pm
Posts: 159
Location: Russia
Я не говорил о канале данных. Я говорил, что брокер сам перезапускает трансляцию даты, сбрасывая имеющиеся подписки. С точки зрения FIX вроде всё правильно, эти реджекты приходят на те самые первые реквесты, то есть:
- реквест
- снапшоты
- реджект
Как в этом случае запросить данные заново, не перезапуская адаптер или солюшен?


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Tue Aug 02, 2011 12:41 pm 
Offline
Site Admin

Joined: Thu Jul 17, 2003 10:39 am
Posts: 1478
Я и имел ввиду, что ситуация типа

1. реквест
2. данные
3. данные
...
N. реджект

для меня является странной. В самом протоколе не сказано, что такого не может быть, но также не сказано что может, так что трактовать это на соответствие правилам можно по-разному :D

Теперь по делу... Перезапросить данные из стратегии нельзя - нет такой функциональности. Самый, наверно, простой способ - это дисконнект/коннект провайдеру сделать - в этом случае он перезапросит все данные сам. Но опять-таки сделать это можно только руками.

_________________
SmartQuant Development Team


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Tue Aug 02, 2011 1:25 pm 
Offline

Joined: Thu Jun 03, 2010 5:15 pm
Posts: 159
Location: Russia
Так и делаем, что превращает автоматический комплекс в ручной, увы.

Но ведь можно из адаптера послать новые реквесты и "сообщить" всему опенкванту об этих новых запросах?


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Tue Aug 02, 2011 1:54 pm 
Offline
Site Admin

Joined: Thu Jul 17, 2003 10:39 am
Posts: 1478
Quote:
Но ведь можно из адаптера послать новые реквесты и "сообщить" всему опенкванту об этих новых запросах?

Так прямо в лоб - нет. Все-таки провайдер - это хвост, а опенквант - собака.
Максимум, что здесь можно автоматизировать - это добавить в провайдер функциональность(опцию) "авто-реподписки" в описанном Вами случае, но всяких "но" возникает много...Как отделить "нормальный" реджект от "ненормального", когда собственно производить попытку подписаться опять - вопрос имеет смысл, если ситуация связана с connection lost, сколько попыток делать и т.д.

_________________
SmartQuant Development Team


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Tue Aug 02, 2011 5:51 pm 
Offline

Joined: Thu Jun 03, 2010 5:15 pm
Posts: 159
Location: Russia
Да, я имел в виду опцию "авто-реподписки" как Вы её описали. Реджекты сброса трансляции выглядят так:
Code:
8=FIX.4.2,9=100,35=Y,49=XXXX,56=YYYY,34=1004944,52=20110802-14:12:25,262=110802095534 46,58=connection lost,10=224
8=FIX.4.2,9=100,35=Y,49=XXXX,56=YYYY,34=1004945,52=20110802-14:12:25,262=110802095534 58,58=connection lost,10=228
8=FIX.4.2,9=100,35=Y,49=XXXX,56=YYYY,34=1004946,52=20110802-14:12:25,262=110802095534 36,58=connection lost,10=225
...
В то время как другие реджекты так:
Code:
8=FIX.4.2,9=135,35=Y,49=XXXX,56=YYYY,34=1045075,52=20110802-14:38:25,262=110802183825 78,58=Failed to identify instrument where 55 equals RIM1,10=202

То есть, различение только в тексте ошибки, значит, "нормальный" реджект можно определить только по заранее известной строке или по времени жизни исходного запроса. Второй вариант мне нравится больше, поскольку не нужно вводить количество повторов реподписки: если реджект придёт сразу, то и повторять запрос не нужно.
Нормальное время жизни запроса можно принять не меньшее HeartBtInt. Период повтора может быть отдельным параметром, а может быть равен ReconnectInterval.
Что скажете?


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Thu Aug 04, 2011 9:35 am 
Offline
Site Admin

Joined: Thu Jul 17, 2003 10:39 am
Posts: 1478
Пока в "туду" занесу.
Есть еще над чем подумать и время выкроить.

_________________
SmartQuant Development Team


Top
 Profile  
 
 Post subject: Re: OSL FIX
PostPosted: Sat Aug 13, 2011 3:35 pm 
Offline

Joined: Wed Sep 22, 2010 2:50 pm
Posts: 17
zyko, подскажите, сколько стоит osl fix? подключение и абонентка. Прошлый раз звонил - сослались на дочернюю структуру и не смогли назвать цифры.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 36 posts ]  Go to page Previous  1, 2, 3  Next

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group