|
|
AlexF7Стаж: 10 лет 11 месяцевСообщений: 1436 | | | | Здравствуйте! Собираю стакан для FORTS_FUTAGGR20_REPL и FORTS_FUTAGGR50_REPL. INSERT и UPDATE приходят. Правильно я понимаю, что когда приходит объем и цена равная нулю, то по этому replD надо удалить запись. DELETE не вызывается.
Подскажите пожалуйста, как грамотно делать? Спасибо большое.
| |
|
DaemonСтаж: 10 лет 11 месяцевОткуда: ЕкатеринбургСообщений: 114 | | | | RTFM: replAct – признак того, что запись удалена. При удалении записи на сервере в поле replAct заносится значение ее replID. Если replAct = 0 – запись активна (не удалена). ВАЖНО! Если поток открывается без установки флага RT_REMOVE_DELETED и используется в режиме «базового» клиента репликации, то следует учитывать, что в базе данных клиента репликации будут присутствовать удаленные на сервере записи. При обработке надо анализировать значение поля replAct.
| |
|
AlexF7Стаж: 10 лет 11 месяцевСообщений: 1436 | | | | Daemon писал(а): | RTFM: replAct – признак того, что запись удалена. При удалении записи на сервере в поле replAct заносится значение ее replID. Если replAct = 0 – запись активна (не удалена). ВАЖНО! Если поток открывается без установки флага RT_REMOVE_DELETED и используется в режиме «базового» клиента репликации, то следует учитывать, что в базе данных клиента репликации будут присутствовать удаленные на сервере записи. При обработке надо анализировать значение поля replAct. |
Спасибо.
| |
|
AlexF7Стаж: 10 лет 11 месяцевСообщений: 1436 | | | | Я раньше стакан собирал через FORTS_FUTAGGR_REPL (неограниченная глубина). Сейчас он не транслируется. Там все было через INSERT. Я конечно догоняю как собрать стакан на FORTS_FUTAGGR20_REPL.
Хотелось бы, что бы доку расписали подробнее по этому вопросу, и сюда кинули пример (официальный) для тех ребят, которые видят стакан первый раз в своей жизни. По тому, что это еще одна грабля на которую спотыкаются juniors.
Это я делаю для FAQ.
| |
|
Савинич АлексейСтаж: 12 лет 5 месяцевОткуда: Московская БиржаСообщений: 338 | | | | Разбираем случай, когда глубина стакана равна 2. Как должен выглядеть стакан буду писать в виде (price/volume).
1) Сейчас 12:00:01. Появилась заявка на покупку с ценой 5 и объемом 10 по новому инструменту с isin_id=12345. Приехали новые четыре записи. Стакан полностью заполнился нулевыми значениями.
replID=1 replRev=1 isin_id=12345 price=0 volume=0 moment='12:00:01' dir=1
replID=2 replRev=2 isin_id=12345 price=0 volume=0 moment='12:00:01' dir=1
replID=3 replRev=3 isin_id=12345 price=0 volume=0 moment='12:00:01' dir=2
replID=4 replRev=4 isin_id=12345 price=0 volume=0 moment='12:00:01' dir=2 Приехал апдейт записи. В одной из записей поменялась цена и объем.
replID=1 replRev=5 isin_id=12345 price=5 volume=10 moment='12:00:01' dir=1 В стакане Bid Ask 5/10
2) Сейчас 12:00:02. Появилась заявка на покупку с ценой 4 и объемом 10 Приехал апдейт записи
replID=2 replRev=6 isin_id=12345 price=4 volume=10 moment='12:00:02' dir=1 В стакане Bid Ask 5/10 4/10
3) Сейчас 12:00:03. Появилась заявка на продажу с ценой 8 и объемом 10 Приехал апдейт записи
replID=3 replRev=7 isin_id=12345 price=8 volume=10 moment='12:00:03' dir=2 В стакане Bid Ask 5/10 8/10 4/10
4) Сейчас 12:00:04. Появилась заявка на продажу с ценой 7 и объемом 10 Приехал апдейт записи
replID=4 replRev=8 isin_id=12345 price=7 volume=10 moment='12:00:04' dir=2 В стакане Bid Ask 5/10 7/10 4/10 8/10
5) Сейчас 12:00:05. Появилась еще одна заявка на покупку с ценой 4 и объемом 5 Приехал апдейт записи. У заявки с ценой 4, т.е. с replID=2 изменился объем.
replID=2 replRev=9 isin_id=12345 price=4 volume=15 moment='12:00:02' dir=1 В стакане Bid Ask 5/10 7/10 4/15 8/10
6) Сейчас 12:00:06. Удалилась/свелась заявка на покупку с ценой 5 и объемом 10 Приехал апдейт записи. Значения цены и объема обнулились для replID=1. Так как такой заявки больше нет.
replID=1 replRev=10 isin_id=12345 price=0 volume=0 moment='12:00:06' dir=1 В стакане Bid Ask 4/15 7/10 8/10
7) Сейчас 12:00:07. Появилась заявка на покупку с ценой 5 и объемом 8 Приехал апдейт записи
replID=1 replRev=11 isin_id=12345 price=5 volume=8 moment='12:00:07' dir=1 В стакане Bid Ask 5/8 7/10 4/15 8/10
8) Сейчас 12:00:08. Появилась заявка на покупку с ценой 6 и объемом 10 Приехал апдейт записи. Запись с ценой 4 теперь не входит в стакан. Она заменена на цену 6.
replID=2 replRev=12 isin_id=12345 price=6 volume=10 moment='12:00:08' dir=1 В стакане Bid Ask 6/10 7/10 5/8 8/10
9) Сейчас 12:00:09. Удалилась/свелась заявка на покупку с ценой 6 и объемом 10 Приехал апдейт записи. Заявка с ценой 6 удалена, поэтому в стакан возвращается заявка с ценой 4.
replID=2 replRev=13 isin_id=12345 price=4 volume=15 moment='12:00:02' dir=1 В стакане Bid Ask 5/8 7/10 4/15 8/10
Надо еще заметить, что при добавлении новой заявки, когда происходит поиск нулевых записей, агрегилка может выбрать случайный replID, т.е. не факт, что в первом пункте произойдет апдейт записи с replID=1, а не с replID=2. И еще момент, ночью или при смене номера торговой сессии, удаляются физически все записи из всех стаканов и Вы получите StreamDatumDeleted. И последнее. Несмотря на то, что в стаканах ограниченной глубины нет удалений, т.е. как правильно заметил Daemon, все равно желательно отслеживать replAct. Это стандартный метод работы Плаза2.
| | | | | Последний раз редактировалось автором 25.02.2010 11:27, всего редактировалось 1 раз |
|
Alexander56Стаж: 10 лет 10 месяцевОткуда: ОренбургСообщений: 218 | | | | А как сделать, чтобы приходили инсерты именно с isin_id=12345? Другими словами, как организовать фильтрацию данных по инструменту в потоке/таблице?
С уважением, Александр
| |
|
AlexF7Стаж: 10 лет 11 месяцевСообщений: 1436 | | | | Alexander56 писал(а): | А как сделать, чтобы приходили инсерты именно с isin_id=12345? Другими словами, как организовать фильтрацию данных по инструменту в потоке/таблице?
С уважением, Александр |
Для меня это ОГРОМНАЯ ПРОБЛЕМА. могу поток отключить , могу схему кастомную создать, но не могу отключить инструменты, которые мне не нужны. Короче, полная "Ванкуверская олимпиада". ((((((((((((((((((((((((((((((((
Получаю много траффика, который мне НЕ НУЖЕН.
С уважением, Алексей.
P.S.
Плиз, кто нибудь включите фильтрацию. SOS SOS SOS
| | | | | Последний раз редактировалось автором 02.03.2010 15:50, всего редактировалось 5 раз |
|
Савинич АлексейСтаж: 12 лет 5 месяцевОткуда: Московская БиржаСообщений: 338 | | | | В данный момент фильтрация данных по инструменту не предусмотрена
| |
|
AlexF7Стаж: 10 лет 11 месяцевСообщений: 1436 | | | | Савинич Алексей писал(а): | В данный момент фильтрация данных по инструменту не предусмотрена |
Не совсем понял, простите пожалуйста.
Алексей, скажите пожалуйста. Фильтрация инструментов у Вас стоит в планах на будущее или Вы от нее полностью отказались. Спасибо большое.
С уважением, Алексей.
| | | | | Последний раз редактировалось автором 04.03.2010 09:43, всего редактировалось 1 раз |
|
Савинич АлексейСтаж: 12 лет 5 месяцевОткуда: Московская БиржаСообщений: 338 | | | | На текущий момент не стоит даже в планах. Что будет в будущем я Вам сказать не могу. Возможно мы к этому придем.
| |
|
AlexF7Стаж: 10 лет 11 месяцевСообщений: 1436 | | | | Спасибо большое Алексей, за разъяснение.
P.S. Верно сказал про эту ситуацию Дольф Лундгрен...эх, золотые слова: " Отсюда, мать твою, выход только через крышу "....
| |
|
Alexander56Стаж: 10 лет 10 месяцевОткуда: ОренбургСообщений: 218 | | | | как написано в P2ClientGate.pdf о orders_aggr из FORTS_FUTAGGR20_REPL: "Записи в таблице могут обновляться полностью, т.е. обновляться может не только объём котировки (volume), но и ИНСТРУМЕНТ..."
Я правильно понимаю, что если мы при состоянии потока DS_STATE_REMOTE_SNAPSHOT получили для определенного Инструмента записи с replID в диаразоне с 2161 по 2200, то после перехода потока в DS_STATE_ONLINE никакой гарантии, что и дальше котировки по этому Инструменту будут приходить с replID из того же первоначального диапазона нет?
С уважением, Александр
| |
|
Дмитрий ГлотиковСтаж: 14 лет 4 месяцаОткуда: Московская биржаСообщений: 590 | | | | Alexander56 писал(а): | как написано в P2ClientGate.pdf о orders_aggr из FORTS_FUTAGGR20_REPL: "Записи в таблице могут обновляться полностью, т.е. обновляться может не только объём котировки (volume), но и ИНСТРУМЕНТ..."
Я правильно понимаю, что если мы при состоянии потока DS_STATE_REMOTE_SNAPSHOT получили для определенного Инструмента записи с replID в диаразоне с 2161 по 2200, то после перехода потока в DS_STATE_ONLINE никакой гарантии, что и дальше котировки по этому Инструменту будут приходить с replID из того же первоначального диапазона нет? |
Да, в некоторых нечастых случаях сервис построения агрегированных стаканов может реинициализировать таблицу в середине торгов. Кроме того, таблица реинициализируется при переходе от дневной сессии к вечерней. И идентификаторы "перемешаются". Поэтому рассчитывать на неизменность id нельзя.
| |
|
Alexander56Стаж: 10 лет 10 месяцевОткуда: ОренбургСообщений: 218 | | | | Спасибо, Дмитрий!
Мне важно, чтобы в периоды между такими нечастыми событиями записи в orders_aggr, относящиеся к одному инструменту, имели replID из непрерывного(!!!) диапазона. Так как только в этом случае, я считаю, мы можем говорить о "предыдущей" котировке.
У меня "безбазовый" клиент, для каждого используемого инструмента есть локальная копия кусочка orders_aggr[0..39]:
orders_aggr[orders_aggr_new_entry.replID mod 40]:=orders_aggr_new_entry; // это при StreamDataInserted
P.S. вопрос 1. Так, диапазон для replID по одному инструменту будет непрерывным? вопрос 2. Достаточно ли StreamLifeNumChanged и StreamDatumDeleted, чтобы отследить, что таблица orders_aggr реинициализирована?
С уважением, Александр.
| | | | | Последний раз редактировалось автором 09.03.2010 10:34, всего редактировалось 2 раза |
|
AlexF7Стаж: 10 лет 11 месяцевСообщений: 1436 | | | | Дмитрий спасибо за ответ!
Я бы хотел поподробнее узнать, как можно отследить реинициализацию?
Дмитрий если не секрет, скажите пожалуйста, что это за нечастые случаи?
С уважением, Алексей.
| | | | | Последний раз редактировалось автором 09.03.2010 15:19, всего редактировалось 1 раз |
|
|