Гарантируется ли вызов колбэка при получении Квиком новых данных?

Страницы: 1
RSS
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
 
В документе "Использование Lua в Рабочем месте QUIK.pdf" на стр. 5-8 приведено описание событийной модели, как одного из подходов написания скриптов Lua в Рабочем месте QUIK.
На стр. 8 приведён пример скрипта NumberOfTradesOnCallbacks.lua

Вопросы:
1) Гарантирует ли данный подход, что все данные по сделкам, которые получит терминал с момента запуска скрипта, будут обработаны скриптом в колбэке OnTrade?
2) Может ли быть такое, что данные на рабочее место поступили, а колбэк не был вызван?
 
Цитата
Йцукен написал:
В документе "Использование Lua в Рабочем месте QUIK.pdf" на стр. 5-8 приведено описание событийной модели, как одного из подходов написания скриптов Lua в Рабочем месте QUIK.
На стр. 8 приведён пример скрипта NumberOfTradesOnCallbacks.lua

Вопросы:
1) Гарантирует ли данный подход, что все данные по сделкам, которые получит терминал с момента запуска скрипта, будут обработаны скриптом в колбэке OnTrade?
2) Может ли быть такое, что данные на рабочее место поступили, а колбэк не был вызван?
1 да
2 нет
 
Колбек вызывается перед записью в таблицу сделок
-----------------------
Если колбек не вызван, то и записи в таблицу не будет
 
Цитата
Йцукен написал:
На стр. 8 приведён пример скрипта NumberOfTradesOnCallbacks.lua
Вы его запустить пробовали?
Цитата
D:\Work\Lua\DEV\Фуфло.lua:12: attempt to index a nil value (global 'table_of_trades')
Далеко не все примеры скриптов в документации работоспособны.
Всё пройдет. Но это не точно.
 
Пока гарантированность не будет указана в документации, то все это спекуляции. Я, конечно, могу предположить, что если документация банально написана плохо, то многие моменты там не будут указаны.
Но тогда, необходимо хотя бы подтверждение от поддержки.
 
Я в 6:50:00 при начале приёма заявок, когда сервера перегружены, не раз наблюдал потери onTransReply.
 
Цитата
Serge123 написал:
Я в 6:50:00 при начале приёма заявок, когда сервера перегружены, не раз наблюдал потери onTransReply.
Вопрос поставлен так:
2) Может ли быть такое, что данные на рабочее место поступили, а колбэк не был вызван?

В вашем случае ответ на транзакцию QUIK получил, в таблице транзакций отображался?
 
onTransReply все же не столь показателен, т.к. таблицы транзакций нет.
 
Цитата
Nikolay написал:
Но тогда, необходимо хотя бы подтверждение от поддержки.
Да чё-то они не отвечают.
 
Добрый день,

Подтверждаем: при получении терминалом новой записи или обновления существующей гарантируется вызов соответствующей функции обратного вызова.
 
Цитата
Anton Belonogov написал:
Добрый день,

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

"при получении"

если вернуться к начальному сообщению этой ветки, то ответ  вменяемого индивида, не отягощенного соусом карри, должен звучать так:

для данных, которые получены ДО запуска скрипта, никаких колбеков не будет. Для данных, которые получены ТЕРМИНАЛОМ  ПОСЛЕ запуска скрипта и реалтайм связывания  все колбеки гарантированно придут один за другим в порядке их прихода в терминал.
 
tohoki,

Если вернуться к начальному сообщению, там нет вопроса, что будет происходить "ДО запуска скрипта".
Там были другие вопросы, на которые и был дан ответ.

А Вас мы просим сохранять культурный тон общения и не пытаться грубить другим участникам (в том числе специалистам поддержки QUIK) - в противном случае мы будем вынуждены заблокировать Вам доступ к этому форуму.
 
Цитата
Anton Belonogov написал:
tohoki,

Если вернуться к начальному сообщению, там нет вопроса, что будет происходить "ДО запуска скрипта".
Там были другие вопросы, на которые и был дан ответ.

А Вас мы просим сохранять культурный тон общения и не пытаться грубить другим участникам (в том числе специалистам поддержки QUIK) - в противном случае мы будем вынуждены заблокировать Вам доступ к этому форуму.
мне все равно.

ваш форум бесполезен.

вы ошибки не исправляете годами и даже десятилетиями.

зато обидчивость как у индийского слова во время гона.
 
Цитата
tohoki написал:
1) Гарантирует ли данный подход, что все данные по сделкам, которые получит терминал с момента запуска скрипта, будут обработаны скриптом в колбэке OnTrade?
В вопросе темы спрашивается именно "с момента запуска скрипта".
------------------
Следовательно, ответ, данный разработчиками именно об этом.
--------------------
Замечу, что  ранее я дал более короткий ответ на вопрос темы.
-----------------
Но автору нужно было подтверждение от разработчиков.
Они его дали.  
 
Цитата
Anton Belonogov написал:
Подтверждаем: при получении терминалом новой записи или обновления существующей гарантируется вызов соответствующей функции обратного вызова.
   Здравствуйте.
 Есть скорость  v1 (количество/сек.) появления событий, по которым должны запускаться коллбеки. И есть скорость выполнения коллбеков  v2 (количество/сек.) в скриптах пользователя.  Пока v1 <= v2 можно как то, наверное, гарантировать. Но скоростью v2 QUIK не управляет. Например, пользователь в тексте коллбека, по недоразумению, написал строку: sleep(3000) и на 3 сек. все коллбеки, во всех выполняемых скриптах перестали обрабатываться.  Или выполняет долгую обработку  в коллбеке.  Единственное, что можно бы было гарантировать в этих условиях - это выдачу сообщения о ситуации, когда v1 > v2. Но я таких сообщений никогда не видел (даже в экспериментах).
 Или я что то не понимаю?
 
Так коллбеки в том же потоке, что и прием данных и запись в таблицы. То есть поставили вы в коллбеке sleep и данные не принимаются, новых событий нет.
 
Цитата
paluke написал:
То есть поставили вы в коллбеке sleep и данные не принимаются, новых событий нет.
   И торги на бирже остановлены :smile: ?
Цитата
paluke написал:
Так коллбеки в том же потоке, что и прием данных
   Вы это проверяли?
 
Цитата
TGB написал:
Цитата
paluke написал:
Так коллбеки в том же потоке, что и прием данных
Вы это проверяли?

Пока скрипт обрабатывает колбэк, он или другие скрипты могут отправлять транзакции на сервер из main. Но новые данные с сервера скрипты не получат, пока поток колбэков не освободится.

Скрытый текст
Результат:
Скрытый текст
 
1.
Цитата
Йцукен написал:
transaction.TRANS_ID = ''..TransID
   В выложенном коде отсутствует таблица transaction (шаблон заявки). Результат вашего теста показывает, что все коллбеки обрабатываются в одном потоке и когда он блокируется (в OnParam на 3000 млс.), все коллбеки перестают обрабатываться, но данные в QUIK при этом приходят (это видно в потоке main). Понятно, что для того, чтобы события коллбеков при этом не терялись, в QUIK должна быть внутренняя служебная(ые) очередь. Эта очередь может гарантировать отсутствие потерь событий только при
Цитата
TGB написал:
v1 <= v2
 
Цитата
TGB написал:
В выложенном коде отсутствует таблица transaction (шаблон заявки).
Там были транзакции ACTION="NEW_ORDER"

Цитата
TGB написал:
но данные в QUIK при этом приходят (это видно в потоке main).

А я вижу, что новые данные в main доступны только после выхода из OnParam. Когда эти данные пришли - не вижу.
Код
18:41:29.218  Start OnParam                 
18:41:29.218                orders: 58
...
18:41:32.234  End OnParam                 
...
18:41:32.234                orders: 59
 
Цитата
Йцукен написал:
А я вижу, что новые данные в main доступны только после выхода из OnParam. Когда эти данные пришли - не вижу.
  Да в main их не видно, но я имею ввиду QUIK. Если вы сделаете задержку в OnParam 10000, то это не значит, что биржа будет ждать перед отсылкой данных о выставлении заявки 10 сек. пока один из 100000 терминалов QUIK не разблокирует свой поток обработки коллбеков.
 
Цитата
TGB написал:
для того, чтобы события коллбеков при этом не терялись, в QUIK должна быть внутренняя служебная(ые) очередь. Эта очередь может гарантировать отсутствие потерь событий только при  
Цитата
TGB написал:
v1 <= v2
Не только очередь, а еще ack флаги. Сама очередь ничего не гарантирует.
 
Цитата
Nikolay написал:
Не только очередь, а еще ack флаги. Сама очередь ничего не гарантирует.
   В данном случае я не пишу как должна быть устроена очередь (об этом я пишу в другой ветке).  Я написал, что очередь требуется чтобы не терять события коллбеков при v1 <= v2.
 
Цитата
TGB написал:
Да в main их не видно, но я имею ввиду QUIK. Если вы сделаете задержку в OnParam 10000, то это не значит, что биржа будет ждать перед отсылкой данных о выставлении заявки 10 сек. пока один из 100000 терминалов QUIK не разблокирует свой поток обработки коллбеков.
А, вы про OnTransReply? Похоже, что вы правы. Поскольку сервер QUIK не делает повторной попытки направить ответ по транзакции, то можно предположить, что пока терминал обрабатывал колбэк OnParam, то данные с сервера таки получены и сохранены в память.
 
Цитата
TGB написал:
Цитата
Да в main их не видно, но я имею ввиду QUIK. Если вы сделаете задержку в OnParam 10000, то это не значит, что биржа будет ждать перед отсылкой данных о выставлении заявки 10 сек. пока один из 100000 терминалов QUIK не разблокирует свой поток обработки коллбеков
На самом деле все совершенно не так.
Даже если терминал заблокирует свой поток, ПК не перестанет принимать пакеты от сервера QUIK в буфер.
А данные с биржи вообще не доходят напрямую до терминала QUIK.
Сервер биржи вообще не видит эти терминалы,
пусть все 10000 заблокируют свои потоки, серверу биржи все это по ... колено.
------------------
Сервер биржи передает все на сервер брокера.
Лишь если терминал QUIK будет на выделенном сервере в дата центре,
то возможно в этом случае он будет принимать что-то прямо с сервера биржи
да и то через специальный терминал фактически сервер брокера.
===============
Таким образом, сервер биржи видит лишь сервера брокеров и передает им всю информацию.
Сервер брокера либо ее обрабатывает либо нет и передает ее на ПК клиентов.
OC на ПК принимает эту информацию в буфер и раздает по портам приложений.  
Если приложение спит и не просыпается то буфер будет накапливать и ждать.
Если буфер полон, то ОС должна остановить передачу с сервера брокера и тот будет накапливать и потом по запросу передаст все на ПК клиента.  
 
Цитата
Йцукен написал:
А, вы про OnTransReply? Похоже, что вы правы. Поскольку сервер QUIK не делает повторной попытки направить ответ по транзакции, то можно предположить, что пока терминал обрабатывал колбэк OnParam, то данные с сервера таки получены и сохранены в память.
Похоже, предыдущий вывод преждевременный: если отключить интернет через несколько секунд после отправки транзакций, когда ответ по транзакциям уже должен прийти, то никаких новых данных в main не будет. Т.е., версия с буфером не подтверждается.

Скрытый текст
Результат:
Скрытый текст
 
В коде выше опечатка. Должно быть так:
Скрытый текст

И соответственно вывод будет:
Скрытый текст
Страницы: 1
Читают тему
Наверх