Сергей (Автор тем)

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

Страницы: 1
Как отключить контекстное меню в таблицах создаваемых в Lua?, События по правой кнопке перестали срабатывать в новой версии
 
Добрый день!

Обновился до QUIK версии 8.7.0.6 и появилась следующая проблема:
В таблицах, создаваемых Lua скриптом, теперь при клике правой кнопкой в каждой ячейке появляется контекстное меню с настройками сортировки.
В итоге коллбэк, который в скрипте навешивается на событие QTABLE_RBUTTONDBLCLK, не работает. У меня этот эвент активно используется, и я не могу его ничем заменить.
Как разрешить эту ситуацию ?
Мультимониторность, Есть шанс на такую фичу?
 
Здравствуйте!

Планируется ли ввести поддержку нескольких мониторов в QUIK. Хотелось бы одновременно видеть содержимое одной вкладки на первом мониторе, и второй вкладки - на втором мониторе.
Медленный getItem для таблицы depo_limits, Работает медленно на последних версиях
 
Скрипт на Lua,
Обычный обход item'ов таблицы "depo_limits".

Код
local items_num = getNumberOf("depo_limits")
for i = 0, items_num - 1 do
  local table_item = getItem("depo_limits", i)
  --дальнейшие действия с table_item
end 
Цикл работает чрезвычайно медленно, что приводит к тормозам моего скрипта. Всего кол-во строк в таблице (items_num) чуть более ста.
Трассировка говорит, что вызов getItem занимает 0,015 с. Можно посчитать, что каждый такой цикл занимает 1,5с.


Проявляется на новых версиях QUIK'а. Последняя версия QUIK где работает нормально - 7.19.3.1.

В связи с этим больше не обновляю QUIK.


Данный код просто лишь загружает в мою таблицу баланс по инструменту. Кол-во отслеживаемых инструментов более сотни, можете посчитать, сколько у меня занимает инциализация таблицы (1,5с x 100 = 150сек это в лучшем случае).

SearchItems работает аналогично для этой таблицы. Остальные таблицы кажется отрабатывают корректно, но проверял не все.

Поле "Позиция" в доске опционов, Баг
 
Здравствуйте,


Начиная с версии 7.16, поле Позиция в доске опционов иногда показывает неправильное значение. Какой-то конкретной закономерности не заметил, но что-то точно не так. В версиях 7.14 и ранее это поле всегда показывало корректное значение.
QLua и БД, QLua и БД
 
Есть проблема, с которой борюсь довольно давно, но к сожалению, так ее и не удалось решить, и похоже все дело именно в связке QUIK-QLua-Lua.
Я написал скрипт на Lua, который периодически записывает данные о параметрах опционов (волатильность и т.д.) в БД, чтобы в дальнейшем использовать данную информацию для сложных запросов. Для записи в БД пробовал пользоваться несколькими сторонними библиотеками: LuaSQL (https://keplerproject.github.io/luasql/) и LuaSQLite3 (http://lua.sqlite.org/index.cgi/index). При этом в случае LuaSQL пробовал реализацию для sqlite и mysql.
Сами библиотеки прикрутить к QUIK'у удалось, хотя это непросто. Но итоговый результат к сожалению печальный: скрипт работает определенное время, делает записи в БД, как надо, но потом QUIK просто падает (без дампа, без всего). Если записи в БД делать два раза в секунду, то падает через несколько минут. Если писать раз в минуту (как изначально мной предполагалось), то падает через полчаса, а может через пару часов. Мне нужна стабильная работа в течение всего дня. За одну итерацию пишу около сотен строк в БД, что полная ерунда для современных мощностей. Смотрел на использование ЦП QUIK'ом во время работы скрипта - все нормально. Пробовал запись как из потока main, так и из функций обратного вызова - результат один и тот же.
То, что один и тот же результат воспроизводится для различных библиотек и различных СУБД, говорит о том, что дело не в них, а в QUIK'е или QLua. Если записывать все нужные данные просто в файл csv, а не в БД, то все стабильно работает. По опыту могу сказать, что падение может быть вызвано ошибкой при одновременном доступе к одному участку памяти в QUIK'е или запил памяти, но так как у меня нет исходного кода ни qlua.dll, ни quik.exe, то я не могу ничего сказать и сделать. Неужели моя задача никак не решается с использованием QUIK? Хотелось бы получить ответ от разработчиков. Я могу дать код скрипта, если нужно. Пробовал на версиях QUIK 7.14 и 7.16.
SearchItems: утечки памяти
 
Многократные вызовы SearchItems для поиска нужного инструмента в таблице лимитов по бумагам приводят к утечкам памяти, которые не может устранить сборщик мусора Lua.

Следующий метод возвращает баланс по заданному инструменту и коду клиента:
Код
function TradeItem:get_balance()
   local res = 0
   if self.bal_func == nil then
      self.bal_func = function(t) return t.limit_kind == 2 and t.client_code == self.clientcode and t.sec_code == self.seccode end
   end
   local sec_table = SearchItems("depo_limits", 0, getNumberOf("depo_limits") - 1, self.bal_func)
   if sec_table and #sec_table > 0 then 
      local table_item = getItem("depo_limits", sec_table[1])
      if table_item then
         res = table_item.currentbal
      end
   end
   return res
end
Вызывается этот метод часто (несколько раз в секунду) и приводит к серьезным утечкам памяти (объем используемой памяти проверяю через функцию collectgarbage("count")). За день работы набирается больше 2 Гб.

Если я буду искать нужный инструмент просто прямым перебором всех строк в таблице, то все нормально.

Могут ли разработчики взглянуть на данную проблему? Версия QUIK 7.5.0.72, Lua версии 5.1.
Доходность облигаций - как получить по цене заявки?, Доходность облигаций - как получить по цене заявки?
 
Как известно, информацию о котировках в стакане можно получить с помощью функции getQuoteLevel2.
Но она возвращает только цены и количество заявок.
В интерфейсе же QUIK, если в таблицу котировок добавить столбец "Доходность", доступна также информация о доходности облигации, вычисленной для каждой котировки в стакане. Как мне программно ее получить?
По сути нужна функция getYield(price), возвращающая для конкретной облигации доходность по цене заявки.
Страницы: 1
Наверх