Йцукен (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
os.sysdate()
 
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

Каждый блок - отдельный запуск скрипта в одном и том же терминале.
Скрытый текст
Скрытый текст
Скрытый текст
Скрытый текст

Почему при перезапуске скрипта дельта меняется?
Функция getDepoEx может приводить к зависаниям терминала
 
В некоторых случаях функция getDepoEx может приводить к зависаниям терминала.
Мне удалось локализовать проблему. Так, при открытом графике с включенной настройкой показывать уровень позиции, запрос позиции через getDepoEx по инструменту, график которого открыт, может приводить к зависанию.
Предлагаю заинтересованным подтвердить или опровергнуть это.
Для этого нужно скачать архив рабочего места QUIK по ссылке: https://cloud.mail.ru/public/rrAb/8FTpZstGW
Распаковать в любое место на диске и запустить info.exe
В окне "Доступные скрипты" добавить скрипт getDepoEx.lua (лежит в архиве) и запустить его.
Код
function OnInit()
  getDepoEx("NC0011100000", "10547", "SBER", "NL0011100043", 20260216)
end

Можно удалить файл info.wnd, чтобы запустить info.exe без настроек. А затем открыть график Сбербанка и включить в настройках графика "уровень позиции".
Кому мешает контекстное меню в таблицах рабочего места QUIK, созданных на Lua?
 
В QUIK, наверное, с версии 9, в таблицах рабочего места QUIK, созданных на Lua, добавили всплывающее контекстное меню "Сортировать ...", которое вызывается при клике правой клавишей мышки в любой ячейке таблицы.

На мой взгляд это меню лишнее, поскольку дублирует функционал сортировки из контекстного меню при клике на название столбца. Кроме того, сортировка включается кликом по названию столбца с зажатой клавишей Ctrl или Shift.
Всплывающее контекстное меню забирает три колбэка QTABLE_RBUTTONDOWN, QTABLE_RBUTTONDBLCLK, QTABLE_RBUTTONUP, на которые можно было бы повесить полезные пользовательские функции.
Нет, фактически колбэки срабатывают, но пользоваться ими не удобно из-за всплывающего меню, которое потом надо закрывать.
Возможно разработчики решили, что это стильно, модно, молодёжно. Но лично мне не удобно.
Напишите в комментариях, вам мешает это контекстное меню?
Как зарегистрировать пожелание?
 
Как тут зарегистрировать пожелание?
Гарантируется ли вызов колбэка при получении Квиком новых данных?, Вопросы разработчикам QUIK
 
В документе "Использование Lua в Рабочем месте QUIK.pdf" на стр. 5-8 приведено описание событийной модели, как одного из подходов написания скриптов Lua в Рабочем месте QUIK.
На стр. 8 приведён пример скрипта NumberOfTradesOnCallbacks.lua

Вопросы:
1) Гарантирует ли данный подход, что все данные по сделкам, которые получит терминал с момента запуска скрипта, будут обработаны скриптом в колбэке OnTrade?
2) Может ли быть такое, что данные на рабочее место поступили, а колбэк не был вызван?
getDepoEx в OnInit вешает терминал
 
Вот такой код вешает QUIK 12.8.3.4 при открытом графике SBER с включенной настройкой показывать уровень позиции.
Код
function OnInit()
  getDepoEx("NC0011100000", "10547", "SBER", "NL0011100043", 20260216)
end

Ссылка на архив рабочего места. Зависает в т.ч. без подключения к серверу. При запуске скрипта после подключения - может зависнуть, а может и не зависнуть  :what:
Может ли уменьшиться количество свечей на графике в течение дня?
 
Сегодня в 10:12 на минутном графике Сбербанка (TQBR) CreateDataSource показала 66725 свечей.
После я перезагрузил QUIK (12.8.3), а когда подключился к тому же серверу, то свечей стало меньше - 65776 (в 10:59). Через час, в 11:59 - 65836 свечей.
Лишние вызовы OnAllTrade
 
При перезаказе обезличенных сделок суммарное количество вызовов 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-скрипте
 
В Lua сделать возможным задавать списки классов и кодов инструментов, для которых будут вызываться колбэки OnAllTrade, OnParam, OnQuote в Lua-скрипте.

Пояснение:
Сейчас, если в Lua-скрипте, заданы функции обратного вызова, в частности OnAllTrade, OnParam, OnQuote, то они будут вызываться для всех инструментов, данные по которым поступают в терминал, что влечёт высокий оверхэд на вызов этих самых колбэков.
Под вызовом колбэков понимается именно их вызов терминалом. Не путать с исполнением Lua-кода пользовательской функции.
Нули в индикаторе там, где должны быть пустые интервалы
 
Пишу индикатор. При отсутсвии свечки OnCalculate не рассчитывает значение (когда на одну диаграмму добавляется несколько графиков).
Но если сохранить индикатор в текстовый файл (ПКМ - Сохранить данные в файл), то на месте нерассчитанных значений будут нули.
На примере Moving Average:
Цитата
CHU2 [SPBFUT],1,20251130,175500,94927.555556
CHU2 [SPBFUT],1,20251130,175900,95014.000000
CHU2 [SPBFUT],1,20251130,180100,95059.111111
CHU2 [SPBFUT],1,20251130,180400,0.000000
CHU2 [SPBFUT],1,20251130,180900,0.000000
CHU2 [SPBFUT],1,20251130,181200,0.000000
CHU2 [SPBFUT],1,20251130,181300,0.000000
CHU2 [SPBFUT],1,20251130,181700,0.000000
CHU2 [SPBFUT],1,20251130,182100,95076.111111
При этом, если сохранить стандартный квиковский индикатор с тогой же диаграммы, то он будет без нулей:
Цитата
CHU2 [SPBFUT],1,20251130,175500,94927.555556
CHU2 [SPBFUT],1,20251130,175900,95014.000000
CHU2 [SPBFUT],1,20251130,180100,95059.111111
CHU2 [SPBFUT],1,20251130,182100,95076.111111
Вопрос: как в самописном индикаторе сделать так же?

Пробовал возвращать и nil и ничего не возвращать в OnCalculate
Код
function OnCalculate(index)
  ...
  if v ~= nil then return v
  else return nil end
end
Код
function OnCalculate(index)
  ...
  if v ~= nil then return v end
end
Результат одинаковый.
Страницы: 1
Наверх