Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
Пользователь
Сообщений: Регистрация: 02.01.2026
16.02.2026 14:26:33
В документе "Использование Lua в Рабочем месте QUIK.pdf" на стр. 5-8 приведено описание событийной модели, как одного из подходов написания скриптов Lua в Рабочем месте QUIK. На стр. 8 приведён пример скрипта NumberOfTradesOnCallbacks.lua
Вопросы: 1) Гарантирует ли данный подход, что все данные по сделкам, которые получит терминал с момента запуска скрипта, будут обработаны скриптом в колбэке OnTrade? 2) Может ли быть такое, что данные на рабочее место поступили, а колбэк не был вызван?
Пользователь
Сообщений: Регистрация: 30.01.2015
16.02.2026 16:08:49
Цитата
Йцукен написал: В документе "Использование Lua в Рабочем месте QUIK.pdf" на стр. 5-8 приведено описание событийной модели, как одного из подходов написания скриптов Lua в Рабочем месте QUIK. На стр. 8 приведён пример скрипта NumberOfTradesOnCallbacks.lua
Вопросы: 1) Гарантирует ли данный подход, что все данные по сделкам, которые получит терминал с момента запуска скрипта, будут обработаны скриптом в колбэке OnTrade? 2) Может ли быть такое, что данные на рабочее место поступили, а колбэк не был вызван?
1 да 2 нет
Пользователь
Сообщений: Регистрация: 30.01.2015
16.02.2026 16:09:46
Колбек вызывается перед записью в таблицу сделок ----------------------- Если колбек не вызван, то и записи в таблицу не будет
Пользователь
Сообщений: Регистрация: 22.02.2023
16.02.2026 18:07:40
Цитата
Йцукен написал: На стр. 8 приведён пример скрипта NumberOfTradesOnCallbacks.lua
Вы его запустить пробовали?
Цитата
D:\Work\Lua\DEV\Фуфло.lua:12: attempt to index a nil value (global 'table_of_trades')
Далеко не все примеры скриптов в документации работоспособны.
Всё пройдет. Но это не точно.
Пользователь
Сообщений: Регистрация: 27.01.2017
20.02.2026 15:10:12
Пока гарантированность не будет указана в документации, то все это спекуляции. Я, конечно, могу предположить, что если документация банально написана плохо, то многие моменты там не будут указаны. Но тогда, необходимо хотя бы подтверждение от поддержки.
Пользователь
Сообщений: Регистрация: 27.12.2022
21.02.2026 15:01:48
Я в 6:50:00 при начале приёма заявок, когда сервера перегружены, не раз наблюдал потери onTransReply.
Пользователь
Сообщений: Регистрация: 02.01.2026
21.02.2026 15:15:56
Цитата
Serge123 написал: Я в 6:50:00 при начале приёма заявок, когда сервера перегружены, не раз наблюдал потери onTransReply.
Вопрос поставлен так: 2) Может ли быть такое, что данные на рабочее место поступили, а колбэк не был вызван?
В вашем случае ответ на транзакцию QUIK получил, в таблице транзакций отображался?
Пользователь
Сообщений: Регистрация: 27.01.2017
21.02.2026 15:51:37
onTransReply все же не столь показателен, т.к. таблицы транзакций нет.
Пользователь
Сообщений: Регистрация: 02.01.2026
04.03.2026 15:07:33
Цитата
Nikolay написал: Но тогда, необходимо хотя бы подтверждение от поддержки.
Да чё-то они не отвечают.
QUIK clients support
Сообщений: Регистрация: 15.03.2022
05.03.2026 05:31:19
Добрый день,
Подтверждаем: при получении терминалом новой записи или обновления существующей гарантируется вызов соответствующей функции обратного вызова.
Подтверждаем: при получении терминалом новой записи или обновления существующей гарантируется вызов соответствующей функции обратного вызова.
главное, что написано в предыдкщем сообщении на индусском языке это
"при получении"
если вернуться к начальному сообщению этой ветки, то ответ вменяемого индивида, не отягощенного соусом карри, должен звучать так:
для данных, которые получены ДО запуска скрипта, никаких колбеков не будет. Для данных, которые получены ТЕРМИНАЛОМ ПОСЛЕ запуска скрипта и реалтайм связывания все колбеки гарантированно придут один за другим в порядке их прихода в терминал.
Если вернуться к начальному сообщению, там нет вопроса, что будет происходить "ДО запуска скрипта". Там были другие вопросы, на которые и был дан ответ.
А Вас мы просим сохранять культурный тон общения и не пытаться грубить другим участникам (в том числе специалистам поддержки QUIK) - в противном случае мы будем вынуждены заблокировать Вам доступ к этому форуму.
Если вернуться к начальному сообщению, там нет вопроса, что будет происходить "ДО запуска скрипта". Там были другие вопросы, на которые и был дан ответ.
А Вас мы просим сохранять культурный тон общения и не пытаться грубить другим участникам (в том числе специалистам поддержки QUIK) - в противном случае мы будем вынуждены заблокировать Вам доступ к этому форуму.
мне все равно.
ваш форум бесполезен.
вы ошибки не исправляете годами и даже десятилетиями.
зато обидчивость как у индийского слова во время гона.
Пользователь
Сообщений: Регистрация: 30.01.2015
06.03.2026 06:12:18
Цитата
tohoki написал: 1) Гарантирует ли данный подход, что все данные по сделкам, которые получит терминал с момента запуска скрипта, будут обработаны скриптом в колбэке OnTrade?
В вопросе темы спрашивается именно "с момента запуска скрипта". ------------------ Следовательно, ответ, данный разработчиками именно об этом. -------------------- Замечу, что ранее я дал более короткий ответ на вопрос темы. ----------------- Но автору нужно было подтверждение от разработчиков. Они его дали.
Пользователь
Сообщений: Регистрация: 12.05.2020
06.03.2026 11:01:04
Цитата
Anton Belonogov написал: Подтверждаем: при получении терминалом новой записи или обновления существующей гарантируется вызов соответствующей функции обратного вызова.
Здравствуйте. Есть скорость v1 (количество/сек.) появления событий, по которым должны запускаться коллбеки. И есть скорость выполнения коллбеков v2 (количество/сек.) в скриптах пользователя. Пока v1 <= v2 можно как то, наверное, гарантировать. Но скоростью v2 QUIK не управляет. Например, пользователь в тексте коллбека, по недоразумению, написал строку: sleep(3000) и на 3 сек. все коллбеки, во всех выполняемых скриптах перестали обрабатываться. Или выполняет долгую обработку в коллбеке. Единственное, что можно бы было гарантировать в этих условиях - это выдачу сообщения о ситуации, когда v1 > v2. Но я таких сообщений никогда не видел (даже в экспериментах). Или я что то не понимаю?
Пользователь
Сообщений: Регистрация: 20.03.2023
11.03.2026 18:30:19
Так коллбеки в том же потоке, что и прием данных и запись в таблицы. То есть поставили вы в коллбеке sleep и данные не принимаются, новых событий нет.
Пользователь
Сообщений: Регистрация: 12.05.2020
11.03.2026 18:54:24
Цитата
paluke написал: То есть поставили вы в коллбеке sleep и данные не принимаются, новых событий нет.
И торги на бирже остановлены ?
Цитата
paluke написал: Так коллбеки в том же потоке, что и прием данных
написал: Так коллбеки в том же потоке, что и прием данных
Вы это проверяли?
Пока скрипт обрабатывает колбэк, он или другие скрипты могут отправлять транзакции на сервер из main. Но новые данные с сервера скрипты не получат, пока поток колбэков не освободится.
Скрытый текст
Код
local function getTime(t)
if t == nil then t = os.sysdate() end
return string.format('%02u:%02u:%02u.%03u', t.hour, t.min, t.sec, t.ms)
end
local function info(s)
PrintDbgStr(getTime() .. " " .. s)
end
function OnTransReply(trans_reply)
info(getTime(trans_reply.date_time) .. " OnTransReply")
end
function OnOrder(order)
info(getTime(order.datetime) .. " OnOrder trans_id=" .. order.trans_id)
end
local start
function OnParam()
start = true
function OnParam() end
info("Start OnParam")
sleep(3000)
info("End OnParam")
end
local run = true
function OnStop()
run = nil
end
function main()
while run and not start do sleep(0) end
local n = getNumberOf("orders")
local m = n
info(" orders: " .. n)
if run then
for TransID = 1, 5 do
transaction.TRANS_ID = ''..TransID
if sendTransaction(transaction) == '' then info("sendTransaction trans_id=" .. transaction.TRANS_ID) end
end
while run do
n = getNumberOf("orders")
if n > m then m = n; info(" orders: " .. n) end
sleep(0)
end
end
end
Видно, что транзакции отправлены в 18:41:29, и в туже секунду выставлены заявки (вторая колонка со временем). Но информация по заявкам и транзакциям обработана спустя 3 сек (первая колонка со временем)