Таблица всех сделок

Страницы: 1 2 След.
RSS
Таблица всех сделок
 
Добрый день, вопрос к разработчикам.

Колбеки оналлтраде приходят по разным инструментам не обязательно в порядке возрастания времени. Таблица всех сделок терминала на взгляд формируется сразу в хронологическом.

Какой подход использует терминал для упорядочивания?

Спасибо.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Здравствуйте Михаил,
В рамках одного инструмента хронология всегда соблюдена, если это не так то это форс мажорная ситуация.
ни терминал, ни сервер, ни шлюз, абсолютно никак специально не упорядочивают данные а транслируют в той хронологии которая едет с биржи.
И эта хронология хранится на сервере.
Есть еще ситуация докачки данных, например если у пользователя была включена опция "Получать информацию по всем сделкам с текущего момента" а потом он ее отключил, то терминал получит пропущенные ранее данные и добавит их в таблицу,согласно той хронологии которая хранится на сервере.
 
Цитата
Sergey Gorokhov пишет:
Здравствуйте Михаил,
В рамках одного инструмента хронология всегда соблюдена, если это не так то это форс мажорная ситуация.
Да, Сергей, это понятно. Вопрос звучал про "по разным инструментам".

Пример. в таблице всех сделок заказаны сбер и газп. Судя по колбекам ничто не мешает сделке по сберу раньше, чем сделка по газп при том, что таймштамп газа раньше. Тем не менее в таблице всех сделок, построенных по этим 2 инструментам, порядок хронологический. Значит, идет какая-то обработка. Вот и вопрос - каков ее принцип?  
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru пишет:
Значит, идет какая-то обработка. Вот и вопрос - каков ее принцип?
Михаил, да нет там никакой обработки, все льется в том порядке как пришло с биржи. Другой вопрос, на сколько адекватна ситуация когда хронология относительно разных инструментов идет по разному. Нужен конкретный пример, чтобы можно было дать точный ответ. Если не затруднит, укажите точное время/дату, когда и что шло не так.
 
Ок. Пишем тестик


last = datetime(0)
function OnAllTrade(trade)
-- Заменяем время в сделке на объект datetime
trade.datetime = datetime(trade.datetime)

log.write(trade)
if trade.datetime < last then
log.write("********  Опоздашка")
else
last = trade.datetime
end
end      

Получаем:

12:23:38 {repoterm=0,price=153.81,trade_num=1281821722,yield=0,value=66138.3,qty=43,reporate=0,class_code="QJSIM",repovalue=0,accruedint=0,tradenum=1281821722,flags=0,datetime={week_day=6,hour=8,ms=0,mcs=0,year=2015,month=5,sec=15,min=56,day=9},sec_code="GAZP",seccode="GAZP",period=1,repo2value=0,settlecode=""}
12:23:38 {repoterm=0,price=75.39,trade_num=1281821759,yield=0,value=6031.2,qty=8,reporate=0,class_code="QJSIM",repovalue=0,accruedint=0,tradenum=1281821759,flags=0,datetime={week_day=6,hour=8,ms=0,mcs=0,year=2015,month=5,sec=19,min=56,day=9},sec_code="SBER",seccode="SBER",period=1,repo2value=0,settlecode=""}
12:23:38 {repoterm=0,price=75.39,trade_num=1281821760,yield=0,value=2261.7,qty=3,reporate=0,class_code="QJSIM",repovalue=0,accruedint=0,tradenum=1281821760,flags=0,datetime={week_day=6,hour=8,ms=0,mcs=0,year=2015,month=5,sec=19,min=56,day=9},sec_code="SBER",seccode="SBER",period=1,repo2value=0,settlecode=""}
12:23:38 {repoterm=0,price=75.41,trade_num=1281821769,yield=0,value=25639.4,qty=34,reporate=0,class_code="QJSIM",repovalue=0,accruedint=0,tradenum=1281821769,flags=0,datetime={week_day=6,hour=8,ms=0,mcs=0,year=2015,month=5,sec=21,min=56,day=9},sec_code="SBER",seccode="SBER",period=1,repo2value=0,settlecode=""}
12:23:38 {repoterm=0,price=104440,trade_num=139255273,yield=0,value=318909.63,qty=3,reporate=0,class_code="SPBFUT",repovalue=0,accruedint=0,tradenum=139255273,flags=1025,datetime={week_day=5,hour=16,ms=221,mcs=221000,year=2015,month=5,sec=0,min=0,day=8},sec_code="RIM5",seccode="RIM5",period=1,repo2value=0,settlecode="T1"}
12:23:38 ********  Опоздашка


При этом в ТВС все по порядку идет.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
В визуальной Таблице всех сделок, очевидно, сделки сортируются по номеру сделки. В этом можно наглядно убедиться заказав сначала все сделки по одной (нескольким) бумаге, а через некоторое время после заполнения ТВС заказав все сделки ещё по другой (другим) бумаге.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Серж пишет:
В визуальной Таблице всех сделок, очевидно, сделки сортируются по номеру сделки
Думаю, что не по номеру. Судите сами:

[img]data:image/png;base64,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X6qkjMNU4BOfvzUMw+VP/sX9DzzyNW99SirKcVUHwShAfur1ub/1i9KjaGhv3rx58+bN29LtwX+vt/D1l8Prngjf9cXw9i+Fd305fP8LuA4bXnlCdhC79723T7/3pUM79dCLYxtLhOjjvd/3xPTUcy/dGY+HV57fnHroxd++8tWPf/bmfd/2u5Gpw/GXrn/l3Ot+S/ZHx9agKs/D6Pd+3xPjQ6ap2Ng5bYdTP/FrN8fIfOhfPBXZV62deujF33hMcRCMogZkanwYhhs3Xh69Hp+H3ft9T0RDe/O2q3b3v4jevHnzts4W/saV8Lonwnd9Kbzlevj+F6I6TP5IP6rDzj5855733bznfTdP/cDNUz9wMzx0t736qOahm+Ghm48/eXsYhp/8qY/9q8fuPsf6yZ/62Nj/m7/1mV/++N0f7J/7pt94///68nMv3Xn45545+4ZPRaYORdj9Dzxy7nUfjfrlsTXotE3rsBs3Xj73Tb/x21duH5iEh25+5uk7jz95Ozx089D5B3/0hV/4na/euHXnwudujxaee+nOjVt3fubnL9y48fLzL9w48/efndpXrYWHbj7z/J3//v94NnLQGsUKyIXP3R6G4SO//smDg3/wR1849x//UlSGnvum34hc9ubNmzdv3rytpd2tw974dHjwevj+F0499KL1+7AzZ84MLz935syZ0z9089XnYT98654P3Dn1gVunPnArvO92eN/tQ0H26vOnH7hbon3i3700DMPH/+zlT3z+5jAM//wX//hr3v3s2D8Mw8c/e+P+Bx45++bP3rh151c+fuvcN//Gme9/ITJ1+I3Uudd/NOofNIBBxzYK37h15yO//slzf/uXTv3AzY994sXnX7gxDMNzL9350L/4wn3f8/ih88aNl4dheP7F2x/62U/c96ZPnfqBm49fuz0Mw0d+64vn/vYv/erv3xiG4fJnn5/aV62pbA+E1VFAQD5x9e6v0z7+mb+6/4FH7nvTp8azv/wHXz2MG/Hx5s2bN2/evC3cwkNf1Vv4+svhddfCG6+HB5891GGHwuvsjyi/0D9z5szp//bW6X94854fv3VX7AMvn/7h4dTDd049fOeeD5xoh6/Vpj33velP7n/gkfve8pnDwb3vvj7tP5w69Jz7xl85+86nVVPnvvFX1P7o67xDLQIGjYzc/8Aj00HPvu3quW/5zfsfeOTc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[/img]
 
В предыдущем сообщении нажмите "цитировать" - и увидите рисунок
 
Здравствуйте,
Цитата
Дмитрий пишет:
Цитата
Серж пишет:
В визуальной Таблице всех сделок, очевидно, сделки сортируются по номеру сделки
Думаю, что не по номеру. Судите сами:
По номеру и по времени, НО в разрезе класса.
На разных торговых площадках, нумерация сделок и время может быть разным.
 
Цитата
Sergey Gorokhov пишет:
Здравствуйте,
Цитата
Дмитрий пишет:
Цитата
Серж пишет:
В визуальной Таблице всех сделок, очевидно, сделки сортируются по номеру сделки
Думаю, что не по номеру. Судите сами:
По номеру и по времени, НО в разрезе класса.
На разных торговых площадках, нумерация сделок и время может быть разным.
Правильный ли я делаю из всего этого вывод?

Никогда нельзя полагаться, что содержимое строки с номером N для таблицы всех сделок (и иных таблиц) будет неизменным в течение сессии?  
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru пишет:
Никогда нельзя полагаться, что содержимое строки с номером N для таблицы всех сделок (и иных таблиц) будет неизменным в течение сессии?
Да, такое может быть при докачке данных
 
Цитата
Sergey Gorokhov пишет:
Цитата
s_mike@rambler.ru пишет:
Никогда нельзя полагаться, что содержимое строки с номером N для таблицы всех сделок (и иных таблиц) будет неизменным в течение сессии?
Да, такое может быть при докачке данных
Sergey Gorokhov, Вы имели в виду физический номер строки, на который ссылаемся при обращении к таблице всех сделок с помощью функции getItem, или номер строки в таблице всех сделок, которую мы видим на экране?
 
Цитата
Дмитрий пишет:
физический номер строки, на который ссылаемся при обращении к таблице всех сделок с помощью функции getItem
 
Цитата
Sergey Gorokhov пишет:
По номеру и по времени, НО в разрезе класса.
В разрезе класса достаточно сортировки по номеру сделки. Или нет?
А как сортируются сделки в визуальной таблице, по разным классам? Почему в примере #7 сделка со временем 23:49:43 вклинилась в между сделками со временем 23:49:51?

Цитата
Sergey Gorokhov пишет:
Цитата
Дмитрий пишет:
физический номер строки, на который ссылаемся при обращении к таблице всех сделок с помощью функции getItem
В таблице Lua "all_trades" при докачке данных (если не использовать функцию "Получить заново данные по всем сделкам") новые сделки добавляются в конец таблицы. Те, что были в таблице остаются на своих местах.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Серж пишет:
В разрезе класса достаточно сортировки по номеру сделки. Или нет?
Да достаточно.
Цитата
Серж пишет:
А как сортируются сделки в визуальной таблице, по разным классам?
в визуальной таблице, данные отображаются в том порядке как они хранятся на сервере (если не настроена какая либо сортировка)
Цитата
Серж пишет:
Почему в примере #7 сделка со временем 23:49:43 вклинилась в между сделками со временем 23:49:51?
потому что сделка из другого класса.
Цитата
Серж пишет:
В таблице Lua "all_trades" при докачке данных (если не использовать функцию "Получить заново данные по всем сделкам") новые сделки добавляются в конец таблицы. Те, что были в таблице остаются на своих местах.
В этом месте все действительно так, мой предыдущий ответ Михаилу был не верен.
Порядок данных в хранилище терминала, всегда соответствует порядку загрузки данных с сервера.
А порядок данных в визуальной таблице всегда соответствует порядку на сервере QUIK (если не настроено иное)
Это значит что:
Если докачки данных не было, то есть терминал подключен с начала сессии, в хранилище данных терминала и в визуальной таблице порядок совпадает и он такой же как на сервере.
Если докачка данных была, но была очистка данных или была смена торговой сессии, то порядок в хранилище и в визуальной таблице также будет такой же как на сервере.
Если очистки данных не было, то в хранилище данных терминала порядок будет отличаться от того что представлен в визуальной таблице
 
Цитата
Sergey Gorokhov пишет:
Порядок данных в хранилище терминала, всегда соответствует порядку загрузки данных с сервера.
А порядок данных в визуальной таблице всегда соответствует порядку на сервере QUIK (если не настроено иное)
А чему соответствует порядок строк в файле, созданном с помощью пункта контекстного меню визуальной таблицы всех сделок "Сохранить в файл обезличенные сделки из таблицы", а также пункта "Сохранить в файл все обезличенные сделки"?
 
Цитата
Sergey Gorokhov пишет:
Цитата
Серж пишет:
Почему в примере #7 сделка со временем 23:49:43 вклинилась в между сделками со временем 23:49:51?
потому что сделка из другого класса.
Это значит, что сделка пришла на сервер именно в таком порядке?
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Серж пишет:
Это значит, что сделка пришла на сервер именно в таком порядке?
Скорее всего так и есть.
 
"в хранилище данных терминала порядок будет отличаться от того что представлен в визуальной таблице"


Таким образом, подыживаем:


Использовать для накопления истории и работы с таблицей всех сделок терминала (getitem) в готовом виде невозможно по причине неопределенной последовательности сделок в ней. Отследить в луа все возможные моменты, когда может измениться порядок следования сделок нереально.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Sergey Gorokhov пишет:
Цитата
Серж пишет:
А как сортируются сделки в визуальной таблице, по разным классам?
в визуальной таблице, данные отображаются в том порядке как они хранятся на сервере (если не настроена какая либо сортировка)
Можете пояснить, каким образом достигается синхронизация порядка отображения сделок в ТВС с сервером?
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Серж пишет:
Можете пояснить, каким образом достигается синхронизация порядка отображения сделок в ТВС с сервером?
На сервере, таблица всех сделок хранится в соответствии с порядком получения записей, каждой записи присваивается порядковый номер в хранилище.  Ровно этот порядковый номер затем и используется на клиентском месте при отображении всех-сделок.
 
получается что у другого брокера номера сделок другие?
 
Цитата
Макс Крутой пишет:
получается что у другого брокера номера сделок другие?
Не вижу связи между порядковым номером записи и номером сделки.
 
Цитата
Sergey Gorokhov пишет:
На сервере, таблица всех сделок хранится в соответствии с порядком получения записей, каждой записи присваивается порядковый номер в хранилище.Ровно этот порядковый номер затем и используется на клиентском месте при отображении всех-сделок.
Т.е., вместе со сделкой на клиентское место передаётся её порядковый номер в хранилище сервера?
Раннее вы писали:
Цитата
Sergey Gorokhov пишет:
да нет там никакой обработки, все льется в том порядке как пришло с биржи.
Получается, что на клиентском месте в ТВС обработка всё-таки осуществляется?
Но для Lua-скрипта это не имеет никакого значения. В Lua можно только самостоятельно отсортировать по номеру сделки в рамках одного класса и по времени по нескольким классам.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Серж пишет:
Т.е., вместе со сделкой на клиентское место передаётся её порядковый номер в хранилище сервера?
да так и есть. предвидя следующий вопрос, доступа к этому параметру нет.
Цитата
Серж пишет:
Получается, что на клиентском месте в ТВС обработка всё-таки осуществляется?
Осуществляется, в том порядке как приехало с биржи.
Цитата
Серж пишет:
В Lua можно только самостоятельно отсортировать по номеру сделки в рамках одного класса и по времени по нескольким классам.
Да верно
 
Цитата
Sergey Gorokhov пишет:
Цитата
Серж пишет:
Т.е., вместе со сделкой на клиентское место передаётся её порядковый номер в хранилище сервера?
да так и есть. предвидя следующий вопрос, доступа к этому параметру нет.
Это я уже понял.

Вопрос в другом: в ТВС есть несоответствие времени сделок на разных площадках:

Получается сервер брокера получает сделки с задержкой, как минимум, в 2 сек по одной из площадок? Или шлюз брокера?
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Серж пишет:
Получается сервер брокера получает сделки с задержкой, как минимум, в 2 сек по одной из площадок? Или шлюз брокера?
а может просто время на торговых площадках не синхронизировано?
 
Цитата
Sergey Gorokhov пишет:
Цитата
Серж пишет:
Получается сервер брокера получает сделки с задержкой, как минимум, в 2 сек по одной из площадок? Или шлюз брокера?
а может просто время на торговых площадках не синхронизировано?
Вот это прикол?! А разве брокер не обязан проводить торги по мировому времени?
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Серж пишет:
А разве брокер не обязан проводить торги по мировому времени?
Не брокер. Биржа, конечно же.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Серж пишет:
Не брокер. Биржа, конечно же.
Кажется этот вопрос надо задать бирже.
Однако трудно представить чтобы все биржи мира синхронизировали свои часы по одному источнику.
Как Вы наверное в курсе NTP источников очень много.
К тому же, отставание времени может быть не только из за биржи, но и из за проблем на стороне брокера.
 
Я хочу сказать, что, если время на торговых площадках биржи не синхронизировано, то это - повод для судебного разбирательства. Поэтому этот вариант, как наименее вероятный я отметаю.
Так что вернёмся к вопросу:
Цитата
Серж пишет:
Получается сервер брокера получает сделки с задержкой, как минимум, в 2 сек по одной из площадок? Или шлюз брокера?
Как такое может быть? 2 сек задержки на сервере (шлюзе) брокера - это достаточно много.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Sergey Gorokhov пишет:
Однако трудно представить чтобы все биржи мира синхронизировали свои часы по одному источнику.
Разговор об одной бирже, просто это - разные торговые площадки.
Цитата
Sergey Gorokhov пишет:
К тому же, отставание времени может быть не только из за биржи, но и из за проблем на стороне брокера.
Так а я о чём?
Надо делать так, как надо. А как не надо - делать не надо.
 
Серж,
При всем уважении я не буду давать диагноз без проведения какой-либо экспертизы.
Возможных причин задержек великое множество.
И каждую из них нужно начинать исследовать через брокера а не через этот форум.
Я могу только накинуть пару десятков возможных вариантов и то не факт что попаду пальцем в небо.
 
ДД
1 ."Затеваю" связанный вопрос в соседней ветке (по тематике ближе)
2. Возможно, "интерессанты" уже с проблемой разобрались,
  НО, как говорится, истина должна быть известна всем интересующимся.
В свете вышесказанного такой вопрос:
Допустим у биржи несколько "торговых площадок" (не я ввел данное утверждение).
Вопрос: А не по принципу ли брокеров с биржей они должны работать?
Поясняю (на всякий случай): Есть "Центральный офис" (ЦО), в котором фиксируются и обрабатываются все заявки по МЕРЕ ПОПАДАНИЯ в этот самый ЦО?
Если заявки должны быть обработаны в соответствии со временем прихода на торговую площадку, ТО:
Варианты развития событий, очевидно, -- следующие:
1. Конечный вердикт по принятию решения в чью пользу состоится сделка решается путем:
     а) по принципу первенства прихода в ЦО;
     б) руководствуясь принципом: если со всех офисов, пришли "следующие" транзакции, то опоздавших -- НЕТ;
     в) назначением таймаута, после которого заявка с какой-либо торговой площадки обрабатывается не по времени заявки, а по времени прихода в ЦО;
     г) "А, ПОФИГ", "используем" заявки, как НАМ "УДОБНЕЕ".
Поэтому несколько изменяю вопрос.
Как же (не синхронизируется время, а) упорядочиваются и обрабатываются заявки не бирже (ЦО), (как это выглядит для сервера QUIK)?
 
Цитата
Дмитрий написал:
Цитата
Sergey Gorokhov пишет:
Порядок данных в хранилище терминала, всегда соответствует порядку загрузки данных с сервера.
А порядок данных в визуальной таблице всегда соответствует порядку на сервере QUIK (если не настроено иное)
А чему соответствует порядок строк в файле, созданном с помощью пункта контекстного меню визуальной таблицы всех сделок "Сохранить в файл обезличенные сделки из таблицы", а также пункта "Сохранить в файл все обезличенные сделки"?
Так и не ответили на мой вопрос... Все же хотелось бы узнать - при сохранении сделок таким вот образом в файл они записываются в него точно в той последовательности, в какой были сохранены в таблице всех сделок терминала, или же в отсортированном виде?
И если в отсортированном, то каким образом?
 
Цитата
Дмитрий написал:
Цитата
Дмитрий написал:
 
Цитата
Sergey Gorokhov  пишет:
Порядок данных в хранилище терминала, всегда соответствует порядку загрузки данных с сервера.
А порядок данных в визуальной таблице всегда соответствует порядку на сервере QUIK (если не настроено иное)
А чему соответствует порядок строк в файле, созданном с помощью пункта контекстного меню визуальной таблицы всех сделок "Сохранить в файл обезличенные сделки из таблицы", а также пункта "Сохранить в файл все обезличенные сделки"?
Так и не ответили на мой вопрос... Все же хотелось бы узнать - при сохранении сделок таким вот образом в файл они записываются в него точно в той последовательности, в какой были сохранены в таблице всех сделок терминала, или же в отсортированном виде?
И если в отсортированном, то каким образом?

В файл сохраняется в том же порядке как на сервере, без сортировок.
 
Цитата
PFelix написал:
ДД
1 ."Затеваю" связанный вопрос в соседней ветке (по тематике ближе)
2. Возможно, "интерессанты" уже с проблемой разобрались,
  НО, как говорится, истина должна быть известна всем интересующимся.
В свете вышесказанного такой вопрос:
Допустим у биржи несколько "торговых площадок" (не я ввел данное утверждение).
Вопрос: А не по принципу ли брокеров с биржей они должны работать?
Поясняю (на всякий случай): Есть "Центральный офис" (ЦО), в котором фиксируются и обрабатываются все заявки по МЕРЕ ПОПАДАНИЯ в этот самый ЦО?
Если заявки должны быть обработаны в соответствии со временем прихода на торговую площадку, ТО:
Варианты развития событий, очевидно, -- следующие:
1. Конечный вердикт по принятию решения в чью пользу состоится сделка решается путем:
     а) по принципу первенства прихода в ЦО;
     б) руководствуясь принципом: если со всех офисов, пришли "следующие" транзакции, то опоздавших -- НЕТ;
     в) назначением таймаута, после которого заявка с какой-либо торговой площадки обрабатывается не по времени заявки, а по времени прихода в ЦО;
     г) "А, ПОФИГ", "используем" заявки, как НАМ "УДОБНЕЕ".
Поэтому несколько изменяю вопрос.
Как же (не синхронизируется время, а) упорядочиваются и обрабатываются заявки не бирже (ЦО), (как это выглядит для сервера QUIK)?

Интересно почему Вы задаете вопрос к бирже здесь, а не на форуме самой биржи, что было бы куда правильней?
Как уже несколько раз было сказано и еще раз повторим, со стороны QUIK записи отправляются клиенту тогда когда их получит сервер и в том порядке как их получит сервер, и не важно какое время у конкретной записи, никаких принудительных задержек в этом месте нет и не будет, т.к. любые принудительные задержки есть великое зло. Существуют естественные задержки (даже у света есть скорость) с которыми ничего сделать нельзя, а есть не естественные задержки (вина провайдера или проблемы у брокера/биржи) и с ними можно и нужно бороться.
Касаемо времени на сделках, до тех пор пока биржи всего мира не начнут синхронизировать свои часы с одним единым источником (NTP сервером), никакой гарантии синхронизации времени на сделках разных площадок не будет.
Даже если речь про одну биржу с разными торговыми площадками, все равно синхронизация не гарантируется, чтобы убедиться достаточно посмотреть на сделки по акциям и фьючерсам.
И надо учиться с этим жить.
 
Цитата
Sergey Gorokhov написал:
В файл сохраняется в том же порядке как на сервере, без сортировок.

Если без сортировок, то они должны сохраняться в том порядке, в котором  они записаны в хранилище терминала.
И как следует из приведенной ниже цитаты, в  файл информация о сделках при этом совсем не обязательно должна сохраняться в том же порядке, как на  сервере.
Цитата
Sergey Gorokhov написал:
Порядок данных в хранилище терминала, всегда соответствует порядку загрузки данных с сервера.А порядок данных в визуальной таблице всегда соответствует порядку на сервере QUIK (если не настроено иное)Это значит что:Если докачки данных не было, то есть терминал подключен с начала сессии, в хранилище данных терминала и в визуальной таблице порядок совпадает и он такой же как на сервере.Если докачка данных была, но была очистка данных или была смена торговой сессии, то порядок в хранилище и в визуальной таблице также будет такой же как на сервере.Если очистки данных не было, то в хранилище данных терминала порядок будет отличаться от того что представлен в визуальной таблице
Или все-таки сортировка присутствует и она происходит так же, как по умолчанию в визуальной таблице всех сделок - по порядковому номеру сделки в хранилище сервера, который передается в терминал вместе со сделкой, но не виден пользователю и средствам QLUA?
 
Дмитрий,
Принудительной сортировки в QUIK нет, уже миллион раз было сказано, сколько можно повторять?
Данные поступают на сервер УЖЕ в отсортированном виде, за этим следит биржа.
По этому, нарушение хронологии в QUIK исключено.
По этому, данные в хранилище сервера и данные в хранилище терминала всегда идут в одинаковом порядке
По этому, НЕТ никакой разницы при сохранении в файл, будут ли данные в том порядке как в терминале или же в том порядке как на сервере.
Естественно, речь про рамки одного рынка.
Если говорить про разные рынки, то как УЖЕ было несколько раз сказано, на разных рынках никакой синхронизации между биржами нет и не может быть в принципе, пока они не синхронизируют часы, а это они естественно делать не будут.
 
Цитата
Sergey Gorokhov написал:
данные в хранилище сервера и данные в хранилище терминала всегда идут в одинаковом порядкеПо этому, НЕТ никакой разницы при сохранении в файл, будут ли данные в том порядке как в терминале или же в том порядке как на сервере.
А как тогда понимать вот эти ваши слова, которые процитированы ниже?
Цитата
Sergey Gorokhov написал:
Если очистки данных не было, то в хранилище данных терминала порядок будет отличаться от того что представлен в визуальной таблице

Отсюда и возник этот вопрос о том, в каком порядке сохраняются сделки в текстовый файл:
Цитата
Дмитрий написал:
Или все-таки сортировка присутствует и она происходит так же, как по умолчанию в визуальной таблице всех сделок - по порядковому номеру сделки в хранилище сервера, который передается в терминал вместе со сделкой, но не виден пользователю и средствам QLUA?
 
Цитата
Дмитрий написал:
А как тогда понимать вот эти ваши слова, которые процитированы ниже?
А что не так? не вижу противоречий.
В Визуальной таблице данные могут быть в любом порядке, как отсортируете или отфильтруете.
Но в хранилище терминала эти данные не поменяют своего места.
 
Цитата
Дмитрий написал:
А как тогда понимать вот эти ваши слова, которые процитированы ниже?
Перечитал еще раз, теперь понятно в чем вопрос.

При дозаказе, данные в хранилище терминала действителньо могут находиться не в том месте.
Т.к. хранилище наполняется в конец файла.
Но в QUIK в визуальной таблице данные будут отсортированы по индексу записи.
От сюда и ответ на вопрос, данные сохраняются в файл по индексу записи.
 
Хочу вернуться к данной теме.
При перезаказе данных в течение торговой сессии по обезличенным сделкам (кнопка "Получить заново данные по обезличенным сделкам", настройка "Получать информацию по всем обезличенным сделкам с текущего момента" отключена) нарушается порядок следования сделок в хранилище.


В таблице параметр index - это индекс строки, получаемой функцией
Код
SearchItems('all_trades', 0, getNumberOf('all_trades')-1, function(class_code,sec_code) return sec_code == 'SiU9' and class_code == 'SPBFUT' end, 'class_code,sec_code')

Перезаказ был осуществлен примерно в 12:04. Как видно, первые несколько строк идут с этим временем, далее хронология начинается с начала веченей сессии.
На мой взгляд, это косяк, надо исправить.
А то приходится закрывать QUIK и вручную удалять файл alltrade.dat, чтобы восстановить порядок следования сделок.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель написал:
Хочу вернуться к данной теме.
При перезаказе данных в течение торговой сессии по обезличенным сделкам (кнопка " Получить заново данные по обезличенным сделкам ", настройка "Получать информацию по всем обезличенным сделкам с текущего момента"  отключена ) нарушается порядок следования сделок в хранилище.

 
В таблице параметр index - это индекс строки, получаемой функцией
Код
   SearchItems ( 'all_trades' ,  0 ,  getNumberOf ( 'all_trades' ) -  1 ,  function (class_code,sec_code)  return  sec_code  =  =   'SiU9'   and  class_code  =  =   'SPBFUT'   end ,  'class_code,sec_code' )  

Перезаказ был осуществлен примерно в 12:04. Как видно, первые несколько строк идут с этим временем, далее хронология начинается с начала веченей сессии.
На мой взгляд, это косяк,  надо исправить .
А то приходится закрывать QUIK и вручную удалять файл alltrade.dat, чтобы восстановить порядок следования сделок.
Добрый день.
Воспроизвести описанное Вами поведение не удалось, т.е все сделки идут по времени.
Просьба прислать нам архив рабочего места QUIK на quiksupport@arqatech.com (на момент возникновения проблемы, т.е нужно еще раз воспроизвести)
Также дополните проблема только по сделкам срочного рынка?
 
Egor Zaytsev,
Цитата
Старатель написал:
При перезаказе данных в течение торговой сессии по обезличенным сделкам
Ключевые слова здесь "в течение". Если вы тестируете на демо, да ещё когда торги не активны, то, очевидно, что не воспроизводится. Запустите на боевом QUIK в момент высокой активности торгов, чтобы сделки поступали в терминал непрерывно.
Что касается других площадок, я не проверял.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель написал:
Egor Zaytsev ,
Цитата
Старатель написал:
При перезаказе данных  в течение торговой сессии  по обезличенным сделкам
Ключевые слова здесь "в течение". Если вы тестируете на демо, да ещё когда торги не активны, то, очевидно, что не воспроизводится. Запустите на боевом QUIK в момент высокой активности торгов, чтобы сделки поступали в терминал непрерывно.
Что касается других площадок, я не проверял.
Проверили, сделку идут также по времени. Ждем запрошенную информацию для разбора.
 
Отправил на почту архив сделок alltrade.dat
В таблице такие данные:

и по многим другим бумагам.
Надо делать так, как надо. А как не надо - делать не надо.
 
Что-то по этой теме определилось, именно по последним вопросам? Что настрого запретить делать юзерам во время сессии?
 
Цитата
Anton написал:
Что-то по этой теме определилось, именно по последним вопросам? Что настрого запретить делать юзерам во время сессии?
Добрый день.
С вопросом описанным пользователем выше не разобрались. Мы запросили дополнительную информацию, к сожалению, ответа не получили.
 
Цитата
Egor Zaytsev написал:
к сожалению, ответа не получили.
Спасибо, Егор, понял. Скрины есть, инфы нет, паранойка не спит, все дела.
Страницы: 1 2 След.
Читают тему
Наверх