os.time() меняется на несколько мс раньше os.sysdate() Ниже разница между os.time() в момент смены секунды и os.sysdate() (при системном таймере 15.625 ms).
Код
for i = 1, 10 do
local t
local t0 = os.time()
repeat t = os.time() until t0 ~= t
local s = os.sysdate()
message(string.format("%.3f ms", 1000 * (t - os.time(s)) - s.mcs / 1000))
end
Каждый блок - отдельный запуск скрипта в одном и том же терминале.
Скрытый текст
14.518 ms 14.472 ms 14.517 ms 14.517 ms 14.517 ms 14.517 ms 14.478 ms 14.517 ms 14.473 ms 14.517 ms
Скрытый текст
7.808 ms 7.805 ms 7.849 ms 7.808 ms 7.809 ms 7.810 ms 7.804 ms 7.807 ms 7.798 ms 7.298 ms
Скрытый текст
3.062 ms 3.062 ms 3.104 ms 3.060 ms 3.062 ms 3.062 ms 3.058 ms 3.104 ms 2.679 ms 2.682 ms
Скрытый текст
14.115 ms 14.078 ms 14.117 ms 14.116 ms 14.116 ms 14.118 ms 14.116 ms 14.116 ms 14.116 ms 14.116 ms
Почему при перезапуске скрипта дельта меняется?
Функция getDepoEx может приводить к зависаниям терминала
Пользователь
Сообщений: Регистрация: 02.01.2026
25.02.2026 11:01:22
В некоторых случаях функция getDepoEx может приводить к зависаниям терминала. Мне удалось локализовать проблему. Так, при открытом графике с включенной настройкой показывать уровень позиции, запрос позиции через getDepoEx по инструменту, график которого открыт, может приводить к зависанию. Предлагаю заинтересованным подтвердить или опровергнуть это. Для этого нужно скачать архив рабочего места QUIK по ссылке: Распаковать в любое место на диске и запустить info.exe В окне "Доступные скрипты" добавить скрипт getDepoEx.lua (лежит в архиве) и запустить его.
Код
function OnInit()
getDepoEx("NC0011100000", "10547", "SBER", "NL0011100043", 20260216)
end
Можно удалить файл info.wnd, чтобы запустить info.exe без настроек. А затем открыть график Сбербанка и включить в настройках графика "уровень позиции".
Кому мешает контекстное меню в таблицах рабочего места QUIK, созданных на Lua?
Пользователь
Сообщений: Регистрация: 02.01.2026
20.02.2026 11:18:51
В QUIK, наверное, с версии 9, в таблицах рабочего места QUIK, созданных на Lua, добавили всплывающее контекстное меню "Сортировать ...", которое вызывается при клике правой клавишей мышки в любой ячейке таблицы. На мой взгляд это меню лишнее, поскольку дублирует функционал сортировки из контекстного меню при клике на название столбца. Кроме того, сортировка включается кликом по названию столбца с зажатой клавишей Ctrl или Shift. Всплывающее контекстное меню забирает три колбэка QTABLE_RBUTTONDOWN, QTABLE_RBUTTONDBLCLK, QTABLE_RBUTTONUP, на которые можно было бы повесить полезные пользовательские функции. Нет, фактически колбэки срабатывают, но пользоваться ими не удобно из-за всплывающего меню, которое потом надо закрывать. Возможно разработчики решили, что это стильно, модно, молодёжно. Но лично мне не удобно. Напишите в комментариях, вам мешает это контекстное меню?
Как зарегистрировать пожелание?
Пользователь
Сообщений: Регистрация: 02.01.2026
20.02.2026 10:00:53
Как тут зарегистрировать пожелание?
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
Пользователь
Сообщений: Регистрация: 02.01.2026
16.02.2026 14:26:33
В документе "Использование Lua в Рабочем месте QUIK.pdf" на стр. 5-8 приведено описание событийной модели, как одного из подходов написания скриптов Lua в Рабочем месте QUIK. На стр. 8 приведён пример скрипта NumberOfTradesOnCallbacks.lua
Вопросы: 1) Гарантирует ли данный подход, что все данные по сделкам, которые получит терминал с момента запуска скрипта, будут обработаны скриптом в колбэке OnTrade? 2) Может ли быть такое, что данные на рабочее место поступили, а колбэк не был вызван?
getDepoEx в OnInit вешает терминал
Пользователь
Сообщений: Регистрация: 02.01.2026
15.02.2026 22:27:20
Вот такой код вешает QUIK 12.8.3.4 при открытом графике SBER с включенной настройкой показывать уровень позиции.
Код
function OnInit()
getDepoEx("NC0011100000", "10547", "SBER", "NL0011100043", 20260216)
end
на архив рабочего места. Зависает в т.ч. без подключения к серверу. При запуске скрипта после подключения - может зависнуть, а может и не зависнуть
Может ли уменьшиться количество свечей на графике в течение дня?
Пользователь
Сообщений: Регистрация: 02.01.2026
05.02.2026 19:06:46
Сегодня в 10:12 на минутном графике Сбербанка (TQBR) CreateDataSource показала 66725 свечей. После я перезагрузил QUIK (12.8.3), а когда подключился к тому же серверу, то свечей стало меньше - 65776 (в 10:59). Через час, в 11:59 - 65836 свечей.
Лишние вызовы OnAllTrade
Пользователь
Сообщений: Регистрация: 02.01.2026
02.02.2026 17:20:47
При перезаказе обезличенных сделок суммарное количество вызовов OnAllTrade больше, чем есть сделок на самом деле. QUIK-Junior 12.8.3 и 12.5.0
Код
local run = false
function OnStop()
run = nil
end
local a = 0
function OnAllTrade(alltrade)
if run ~= true then return end
a = a + 1
end
function main()
local n, m
while run ~= nil and 0 < getNumberOf("all_trades") do -- ожидание перезаказа обезличенных сделок
n = getNumberOf("all_trades")
sleep(1)
end
if run ~= nil then
run = true
message("start: " .. a)
repeat
sleep(1)
m = getNumberOf("all_trades")
until not run or n <= m
run = false
message("getNumberOf: " .. m .. "\nOnAllTrade: " .. a)
end
end
Результат:
Цитата
getNumberOf: 194038 OnAllTrade: 239930
В таблице обезличенных сделок количество совпадает с тем, что показывает getNumberOf.
Задавать списки классов и кодов инструментов, для которых будут вызываться колбэки OnAllTrade, OnParam, OnQuote в Lua-скрипте
Пользователь
Сообщений: Регистрация: 02.01.2026
31.01.2026 18:02:49
В Lua сделать возможным задавать списки классов и кодов инструментов, для которых будут вызываться колбэки OnAllTrade, OnParam, OnQuote в Lua-скрипте.
Пояснение: Сейчас, если в Lua-скрипте, заданы функции обратного вызова, в частности OnAllTrade, OnParam, OnQuote, то они будут вызываться для всех инструментов, данные по которым поступают в терминал, что влечёт высокий оверхэд на вызов этих самых колбэков. Под вызовом колбэков понимается именно их вызов терминалом. Не путать с исполнением Lua-кода пользовательской функции.
Нули в индикаторе там, где должны быть пустые интервалы
Пользователь
Сообщений: Регистрация: 02.01.2026
02.01.2026 23:50:08
Пишу индикатор. При отсутсвии свечки OnCalculate не рассчитывает значение (когда на одну диаграмму добавляется несколько графиков). Но если сохранить индикатор в текстовый файл (ПКМ - Сохранить данные в файл), то на месте нерассчитанных значений будут нули. На примере Moving Average: