ПоискПоиск  ПравилаПравила  ПользователиПользователи  ПрофильПрофиль  РегистрацияРегистрация  ВходВход
Форум «Техническая поддержка»
Форум для разработчиков и пользователей программного обеспечения, использующегося на бирже.

Раздел тех.поддержки | Форма обратной связи Тех.поддержка ОАО Московская Биржа: +7 (495) 733-9507, 287-7691
[PLAZA2] Как собрать стакан (глубина 20, 50)?
Новая тема   Ответить на тему
На страницу Пред.  1, 2, 3 ... , 13, 14, 15  След.
 Предыдущая тема :: Следующая тема 
 Автор  Сообщение 
Bell
Стаж: 9 лет 8 месяцев
Сообщений: 2217
Пн Дек 17, 2012 19:45 (спустя 2 года 9 месяцев 22 дня) Ответить с цитатой Получить постоянный адрес сообщения
westtrd, если я правильно понимаю, абстракцией данных в Плазе является таблица, а не стакан. Поэтому коммит относится ко всей таблице. Во время апдейта таблицы формирую список (на основе фиксированного массива - по Вашим советам) обновившихся стаканов. По коммит создаю событие, которое по этому списку апдейтит собственные структуры приложения. Точнее, в цикле по этому списку вызывается делегат для каждого изменившегося стакана. Можно наверно было бы формировать мультикаст делегат и не проходить в своем цикле, но это детали, не знаю, будет ли так быстрее.

Резюме: обрабатываю каждый коммит, для каждого коммита обновляю небольшой список изменившихся стаканов. Честно говоря, других вариантов не вижу. 
 
westtrd
Стаж: 6 лет 6 месяцев
Откуда: Belarus
Сообщений: 1034
Вт Дек 18, 2012 11:31 (спустя 2 года 9 месяцев 22 дня) Ответить с цитатой Получить постоянный адрес сообщения
Цитата:
Означает момент завершения получения очередного блока данных. К моменту прихода
этого сообщения можно считать, что данные полученные по данной подписке, находятся в
непротиворечивом состоянии и отражают таблицы в синхронизированном между собой состоянии.
Данное сообщение не содержит дополнительных данных и его поля data и data_size не используются. 


Исходя из этого, все верно. Резюме тоже верное. Вопрос был в другом, я попытался взглянуть на эту проблему с другой стороны, а именно - как бы я решал эту проблему, связанную с коммитами в случае ограниченных стаканов (то есть, передача банального массива с маской). Но это мне представляется плохо решаемым по причине тяжелого SQL-ного прошлого.

В части архитектуры - тоже верно вроде все, за исключением того, как вы планируете решать проблему, связанную с медленными подписчиками или затыками со стороны подписчиков. В общем случае, без зеркальных стаканов не обойтись. 
 
Bell
Стаж: 9 лет 8 месяцев
Сообщений: 2217
Вт Дек 18, 2012 12:03 (спустя 2 года 9 месяцев 22 дня) Ответить с цитатой Получить постоянный адрес сообщения
westtrd писал(а):
Вопрос был в другом, я попытался взглянуть на эту проблему с другой стороны, а именно - как бы я решал эту проблему, связанную с коммитами в случае ограниченных стаканов (то есть, передача банального массива с маской). Но это мне представляется плохо решаемым по причине тяжелого SQL-ного прошлого. 

Так и сейчас на фортс обычное дело, если коммит приходит для изменения единственного инструмента - RI.
Цитата:
В части архитектуры - тоже верно вроде все, за исключением того, как вы планируете решать проблему, связанную с медленными подписчиками или затыками со стороны подписчиков. В общем случае, без зеркальных стаканов не обойтись. 

Так же как и Вы, делаю развязку. Только Вы это делаете в самом начале, а я позже. Стаканы мне в конечном счете не нужны, много копировать не надо. А коллбэк у меня отрабатывается пока очень быстро: парсинг и вставка в сортированный стакан 500 нс под .net Это оценочно, по специальным тестам, т.к. непосредственный замер дает под Виндой интервал порядка разрешения счетчика. Т.о., задержка коллбэка пока не напрягает. Хотя заметил такую вещь, что если специально задерживаюсь в коллбэке (например, вывожу что-то на экран), участок коллбэка до этой тяжелой операции почему-то тоже начинает отрабатывать в среднем на 1-2 мкс дольше. То есть замедление в коллбэке может замедлять систему и в других местах. 
 
Oleg Vazhnev
Стаж: 8 лет 1 месяц
Сообщений: 1381
Вт Дек 18, 2012 12:08 (спустя 2 года 9 месяцев 22 дня) Ответить с цитатой Получить постоянный адрес сообщения
Bell под .net и виндой вполне можно мерить с точностью до микросекунды где-то. Всё на что уходит меньше одного тика (обычно это как раз где-то в районе 500 нс помоему) вообще я не считаю за время Smile
Вообще для .net 500 нс это очень быстро. У меня слегка другие скорости Smile

Я пока что так и не посмотрел когда у меня комиты приходят, но обязательно посмотрю и отпишусь. 
 
Bell
Стаж: 9 лет 8 месяцев
Сообщений: 2217
Вт Дек 18, 2012 12:16 (спустя 2 года 9 месяцев 22 дня) Ответить с цитатой Получить постоянный адрес сообщения
Непоредственное измерение дает мне 2-3 мкс, но если поставить подряд 2 вызова StopWatch, то будет 1-2 мкс, поэтому так сложно сказать. 
 
Oleg Vazhnev
Стаж: 8 лет 1 месяц
Сообщений: 1381
Вт Дек 18, 2012 15:52 (спустя 2 года 9 месяцев 22 дня) Ответить с цитатой Получить постоянный адрес сообщения
Попробовал сейчас ещё раз замерить как часто приходит Commit. Получить задержки близкие к 0 миллисекунд получились только на старте пока что. Так что похоже по Commit действительно можно считать что данных по стаканам больше нет.

Но по документации вообще то Commit всего лишь означает что данные находятся в синхронизированном состоянии. Мне же нужно знать что данные а) находятся в синхронизированном состоянии и б) данных больше нет.

Пока что я просто считаю что Commit и означает что данных больше нет, но гарантий что биржа не начнёт выдавать например по 3 Commitа на апдейт я так понимаю нет.

15:45:52:788286 FutAggr MsgTnBegin delta = 0
15:45:52:813407 FutAggr MsgTnCommit delta = 26
15:45:52:813579 FutAggr MsgTnBegin delta = 26
15:45:52:816382 FutAggr MsgTnCommit delta = 3
15:45:52:816632 FutAggr MsgTnBegin delta = 3
15:45:52:823808 FutAggr MsgTnCommit delta = 7
15:45:52:823896 FutAggr MsgTnBegin delta = 7
15:45:52:824872 FutAggr MsgTnCommit delta = 1
15:45:52:824921 FutAggr MsgTnBegin delta = 1
15:45:52:824982 FutAggr MsgTnCommit delta = 0
15:45:52:881777 FutAggr MsgTnBegin delta = 57
15:45:52:881849 FutAggr MsgTnCommit delta = 57
15:45:52:909612 FutAggr MsgTnBegin delta = 28
15:45:52:909669 FutAggr MsgTnCommit delta = 28
15:45:52:961242 FutAggr MsgTnBegin delta = 51
15:45:52:961303 FutAggr MsgTnCommit delta = 51
15:45:53:014792 FutAggr MsgTnBegin delta = 54
15:45:53:014850 FutAggr MsgTnCommit delta = 54
15:45:53:050632 FutAggr MsgTnBegin delta = 36
15:45:53:050682 FutAggr MsgTnCommit delta = 36
15:45:53:134735 FutAggr MsgTnBegin delta = 84
15:45:53:134791 FutAggr MsgTnCommit delta = 84
15:45:53:179127 FutAggr MsgTnBegin delta = 44
15:45:53:179199 FutAggr MsgTnCommit delta = 44
15:45:53:241614 FutAggr MsgTnBegin delta = 63
15:45:53:241689 FutAggr MsgTnCommit delta = 63
15:45:53:274734 FutAggr MsgTnBegin delta = 33
15:45:53:274798 FutAggr MsgTnCommit delta = 33
15:45:53:297597 FutAggr MsgTnBegin delta = 23
15:45:53:297669 FutAggr MsgTnCommit delta = 23 
 
Последний раз редактировалось автором 18.12.2012 15:53, всего редактировалось 2 раза
Alexander56
Стаж: 7 лет 8 месяцев
Откуда: Оренбург
Сообщений: 218
Вт Дек 18, 2012 17:00 (спустя 2 года 9 месяцев 22 дня) Ответить с цитатой Получить постоянный адрес сообщения
modelka, может быть удастся обнаружить какую-нибудь закономерность в интервалах меджу коммитами, если в лог выводить информацию о смене состояния потока. 
 
rst9
Стаж: 10 лет 1 месяц
Сообщений: 1428
Вт Дек 18, 2012 17:51 (спустя 2 года 9 месяцев 22 дня) Ответить с цитатой Получить постоянный адрес сообщения
Alexander56 писал(а):
может быть удастся обнаружить какую-нибудь закономерность в интервалах меджу коммитами 

это богатая идея! можно еще потом попробовать посчитать корреляцию с ценами на фьюч на индекс! все граали наши!!! 
 
Последний раз редактировалось автором 18.12.2012 17:51, всего редактировалось 1 раз
Oleg Vazhnev
Стаж: 8 лет 1 месяц
Сообщений: 1381
Пт Фев 15, 2013 12:58 (спустя 2 года 11 месяцев 22 дня) Ответить с цитатой Получить постоянный адрес сообщения
а зачем транслируются строки с нулевым объёмом и ценой? можно ли их просто игнорировать? кусок лога:

xxyy SiM3 replID = 21219 replRev = 26421 replAct = 0 price = 0,00000 volume = 0 dir = 1
xxyy SiM3 replID = 21221 replRev = 26423 replAct = 0 price = 0,00000 volume = 0 dir = 1
xxyy SiM3 replID = 21223 replRev = 26425 replAct = 0 price = 0,00000 volume = 0 dir = 1
xxyy SiM3 replID = 21225 replRev = 26427 replAct = 0 price = 0,00000 volume = 0 dir = 1
xxyy SiM3 replID = 21227 replRev = 26429 replAct = 0 price = 0,00000 volume = 0 dir = 1
xxyy SiM3 replID = 21229 replRev = 26431 replAct = 0 price = 0,00000 volume = 0 dir = 1
xxyy SiM3 replID = 21231 replRev = 26433 replAct = 0 price = 0,00000 volume = 0 dir = 1
xxyy SiM3 replID = 21232 replRev = 26434 replAct = 0 price = 0,00000 volume = 0 dir = 2
xxyy SiM3 replID = 21233 replRev = 26435 replAct = 0 price = 0,00000 volume = 0 dir = 1
xxyy SiM3 replID = 21234 replRev = 26436 replAct = 0 price = 0,00000 volume = 0 dir = 2
xxyy SiM3 replID = 21235 replRev = 26437 replAct = 0 price = 0,00000 volume = 0 dir = 1
xxyy SiM3 replID = 21236 replRev = 26438 replAct = 0 price = 0,00000 volume = 0 dir = 2
xxyy SiM3 replID = 21237 replRev = 26439 replAct = 0 price = 0,00000 volume = 0 dir = 1
xxyy SiM3 replID = 21238 replRev = 26440 replAct = 0 price = 0,00000 volume = 0 dir = 2
xxyy SiM3 replID = 21239 replRev = 26441 replAct = 0 price = 0,00000 volume = 0 dir = 1
xxyy SiM3 replID = 21240 replRev = 26442 replAct = 0 price = 0,00000 volume = 0 dir = 2
xxyy SiM3 replID = 21202 replRev = 34588 replAct = 0 price = 32499,00000 volume = 1 dir = 2
xxyy SiM3 replID = 21204 replRev = 36036 replAct = 0 price = 32347,00000 volume = 1 dir = 2
xxyy SiM3 replID = 21206 replRev = 37816 replAct = 0 price = 31884,00000 volume = 1 dir = 2
xxyy SiM3 replID = 21208 replRev = 39113 replAct = 0 price = 31851,00000 volume = 2 dir = 2
xxyy SiM3 replID = 21210 replRev = 39307 replAct = 0 price = 31999,00000 volume = 1 dir = 2
xxyy SiM3 replID = 21212 replRev = 39462 replAct = 0 price = 31904,00000 volume = 1 dir = 2
xxyy SiM3 replID = 21214 replRev = 40333 replAct = 0 price = 31599,00000 volume = 1 dir = 2
xxyy SiM3 replID = 21216 replRev = 41799 replAct = 0 price = 31494,00000 volume = 1 dir = 2 
 
Последний раз редактировалось автором 15.02.2013 12:59, всего редактировалось 1 раз
Савинич Алексей
Стаж: 9 лет 3 месяца
Откуда: Московская Биржа
Сообщений: 338
Пт Фев 15, 2013 14:43 (спустя 2 года 11 месяцев 22 дня) Ответить с цитатой Получить постоянный адрес сообщения
Прочитайте мой пост на первой странице.
forum.rts.ru/viewtopic.asp?p=82854#82854
Там разбирается такая ситуация. Пункт номер 6 например 
 
Oleg Vazhnev
Стаж: 8 лет 1 месяц
Сообщений: 1381
Пт Фев 15, 2013 15:02 (спустя 2 года 11 месяцев 22 дня) Ответить с цитатой Получить постоянный адрес сообщения
Савинич Алексей писал(а):
Прочитайте мой пост на первой странице.
forum.rts.ru/viewtopic.asp?p=82854#82854
Там разбирается такая ситуация. Пункт номер 6 например 


Спасибо, про удаление понятно. В общем то я смотрю что тема уже обсуждалась так что зря я сразу стал спрашивать надо было поискать Smile

Я попался на пункте 1, когда нулями заполняют изначально. На "коротких" стаканах у меня эти нули отсветили и попали в Ask как минимальная цена предложения Smile В общем я просто игнорирую такие записи и у меня вроде всё работает тьфу тьфу тьфу. 
 
Последний раз редактировалось автором 15.02.2013 15:10, всего редактировалось 2 раза
metrading
Стаж: 4 года 1 месяц
Сообщений: 29
Ср Окт 09, 2013 09:28 (спустя 3 года 7 месяцев 13 дней) Ответить с цитатой Получить постоянный адрес сообщения
Так и не понял, как собрать стакан используя "Потоки агрегированных стаканов"..
Имеют ли поля replID, replRev, replAct специальное значение в контексте сборки стакана?
Только по isin_id/price/volume/dir стакан собрать невозможно.
Все что говорит "Шлюз ФОРТС Plaza-2" (p2gate_ru.pdf) про "Потоки агрегированных стаканов" это:
>>>>>>>>>>>>>>>>
Таблица 22. Поля таблицы orders_aggr
Поле Тип Описание
replID i8 Служебное поле подсистемы репликации
replRev i8 Служебное поле подсистемы репликации
replAct i8 Служебное поле подсистемы репликации
isin_id i4 Уникальный числовой идентификатор инструмента
price d16.5 Цена котировки
volume i8 Объем агрегированной котировки
moment t Время последнего обновления котировки
dir i1 Направление котировки
Примечания:
• Записи в таблице могут обновляться полностью, т.е. обновляться может не только объём котировки
(volume), но и инструмент, цена, направление. В случае наступления такого события считается, что
предыдущая котировка вышла из стакана, а новая – появилась.
• В таблице могут присутствовать записи с нулевым объёмом (volume = 0). Такие записи следует
игнорировать. При этом, может происходит обнуление существующей котировки – это означает, что
котировка вышла из стакана или заполнение нулевой котировки какими либо значениями – это означает,
что котировка с новыми значениями вошла в стакан.
<<<<<<<<<<<<<<

Спасибо 
 
metrading
Стаж: 4 года 1 месяц
Сообщений: 29
Ср Окт 09, 2013 10:10 (спустя 3 года 7 месяцев 13 дней) Ответить с цитатой Получить постоянный адрес сообщения
Думаю разобрался: надо replID как ключ таблицы стакана использовать для update/insert и replAct для delete из таблицы. 
 
mezastel
Стаж: 4 года 10 месяцев
Сообщений: 12
Чт Окт 31, 2013 19:00 (спустя 3 года 8 месяцев 6 дней) Ответить с цитатой Получить постоянный адрес сообщения
Вопрос тем кто в теме: а чем отличается собирание стакана из _REPL потоков от собирания стакана из полного ордер лога? И что вообще лучше? И если я сделал изначально стакан из _REPL, можно ли потом его дополнять инфой из полного ордер лога, или это нереально? 
 
Oleg Vazhnev
Стаж: 8 лет 1 месяц
Сообщений: 1381
Сб Ноя 16, 2013 18:02 (спустя 3 года 8 месяцев 21 день) Ответить с цитатой Получить постоянный адрес сообщения
mezastel писал(а):
Вопрос тем кто в теме: а чем отличается собирание стакана из _REPL потоков от собирания стакана из полного ордер лога? И что вообще лучше? И если я сделал изначально стакан из _REPL, можно ли потом его дополнять инфой из полного ордер лога, или это нереально? 


обсуждалось уже где-то как-то ) из полного ордерлога можно все сделки например ещё попутно собрать.
дополнять не надо, надо заменять на полный ордерлог 
 
Показать сообщения:   
Новая тема   Ответить на тему
Список разделов форума -> Техническая поддержкаНа страницу Пред.  1, 2, 3 ... , 13, 14, 15  След.
Страница 14 из 15

Rambler's Top100 Rambler's Top100
Рейтинг@Mail.ru
Copyright © Московская биржа, 2006-2017.
Ваши предложения, замечания и вопросы
по работе форума направляйте на email: