Анатолий (Автор тем)

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

Страницы: 1
Где к терминалу QUIK привязана гиря?, Проблема с крайней заторможенностью одного из моих двух терминалов.
 

У меня одновременно запущены два терминала QUIK 9.2.3.15. Брокер БКС. Количество графиков в обоих примерно одинаковое. Из индикаторов только объем используется.

Один терминал подключен к счету с единой денежной позицией, другой – только FORTS. Тот, который только FORTS – работает хорошо по крайней мере в нормальных условиях, когда нет очень сильных движений на рынке, а когда сильные движения есть – вполне удовлетворительно.

А вот тот, который с единой денежной позицией – очень напрягает в части отзывчивости интерфейса пользователя. В зависимости от везения начинает тормозить либо сразу с утра либо через часок-другой. Торможение заключается в появлении указателя мыши, сигнализирующего занятость приложения, сам терминал при этом, естественно, никак не реагирует на мои попытки дать какие-либо команды. Один "сеанс" такого торможение может длиться 10-120 секунд. И происходит очень часто – можно сказать постоянно. Обычно раз-два в минуту подвисает секунд на 10-20. Это очень много. Обращался в поддержку брокера, там предлагали для решения проблемы перезаказывать все данные со сменой соединения – как оказалось, точно такая же лотерея, как и при первом запуске с утра – либо работает, либо нет. Я уже не говорю, что соединение устанавливается минут 5 (когда пишу эти строки – зафиксировал рекорд – 10 минут и соединение так и не установлено).

Ни одной из вышеперечисленных проблем на терминале, подключенном к счёту FORTS, не наблюдается.

Единственная проблема, которой грешат оба моих терминала - – отставание данных графика на время до трёх минут, причём терминал, подключенный к «только FORTS» страдает этим редко.

Иногда на время помогает переподключиться на другое соединение. Но помогает далеко не всегда, причем корреляции между успехом и выполненным перед переподключением перезаказом данных я не уловил. В результате за торговый день не менее часа уходит только на упражнения со сменой соединения и переподключением.

Как-то ради эксперимента скопировал папку беспроблемного терминала, подключенного к FORTS и настроил его для работы со счетом с единой денежной позицией – и о, чудо – такие же тормоза, как и ранее.

Я не в Москве, интернет не идеальный, что правда, ничуть не мешает отлично работать терминалу, подключенному к FORTS и одновременно смотреть, например, HD ролик в YouTube.

Список обновляемых инструментов и параметров формируется «умным» заказом. Настроил получение только необходимых параметров котировок только для необходимых инструментов – результат не изменился. Журналом обезличенных сделок не пользуюсь. Для сохранения получаемых инструментов и параметров установлен флажок «Только данные, отражающие текущее состояние». Обновление текущих значений установлено по запросу, 1 раз в 15 секунд. Компьютер мощный, памяти много, накопитель шустрый.

Документы «FAQ: Возможные проблемы с производительностью и рекомендации по их устранению» и «FAQ: Оптимизация производительности клиентского места QUIK», прочитал, *.log файлы чищу, но это не помогает.

Прошу объяснить, где к терминалу QUIK может быть привязана гиря и конструктивно помочь с решением проблемы.

Доступ к Settings.line из кода индикатора, Пропадает доступ к массиву line структуры Settings в индикаторе после добавления индикатора на график и последующего изменения какого-либо параметра.
 
Обнаружил, что после добавления индикатора на график и последующего изменения какого-либо параметра данного индикатора в коде индикатора обращение к Settings.line даёт nil, при этом кастомные параметры индикатора, объявленные в "корне" структуры Settings остаются доступными. QUIK 8.13.0.106. Немного поискав по форуму подобной проблемы не обнаружил - прошу извинить, если плохо искал.

Код:
Скрытый текст

Инструкция по воспроизведению проблемы:
1) Добавить индикатор на график в любую область и закрыть модальное окно свойств окна графика, если применимо.
2) Наблюдать поочередно сообщения "Init: line is NOT nil" и "OnCalculate(index==1): line is NOT nil", т.е. доступ к line есть.
3) Открыть свойства этого графика, перейти на параметры индикатора и изменить какой-либо кастомный параметр в Settings, например Param2, кликнуть "OK".
4) Наблюдать поочерёдно сообщения "OnChangeSettings: line is nil" и "OnCalculate(index==1): line is nil", т.е. доступа к line нет.

Доступ к line необходим, чтобы синхронизировать цвета текста меток с цветами линий.
Прошу определить, является ли вышеописанное поведение в виде получения nil по ссылке Settings.line ошибкой в QUIK, моей ошибкой либо моими завышенными ожиданиями.
Заранее спасибо.
Сообщения QTABLE_LBUTTONUP и QTABLE_RBUTTONUP, Расширение информационных функций сообщений
 
Ситуация:
В моей библиотеке используются таблицы рабочего стола QUIK и, соответственно, обрабатываются оконные сообщения. Когда пользователь нажимает, например, левую кнопку мыши над ячейкой одной из таких таблиц и затем, не отпуская кнопки, переносит курсор мыши на другую пользовательскую таблицу - сообщение QTABLE_LBUTTONUP приходит с tid таблицы, над которой кнопка была отпущена. Но если пользователь отпустил кнопку не над пользовательской таблицей, а над любым другим произвольным местом окна QUIK или над свободном от ячеек месте пользовательской таблицы - никакое сообщение не приходит и это не позволяет создать полноценную обработку событий от мыши для реализации достаточно вменяемого и функционального "псевдографического"  пользовательского интерфейса.

Предложения:
1) Расширить информационные функции сообщений QTABLE_LBUTTONUP и QTABLE_RBUTTONUP таким образом, что в случае, если отпускание кнопки, нажатой над пользовательской таблицей, происходит не над пользовательской таблицей, то сообщение QTABLE_LBUTTONUP (или QTABLE_RBUTTONUP соответственно) приходит в обработчик, зарегистрированный для таблицы, над которой кнопка была нажата, но с tid = 0.
2) Расширить информационные функции сообщений QTABLE_LBUTTONUP и QTABLE_RBUTTONUP таким образом, что в случае, если отпускание кнопки, нажатой над пользовательской таблицей, происходит над (любой) пользовательской таблицей в свободном от ячеек пространстве, то сообщение QTABLE_LBUTTONUP (или QTABLE_RBUTTONUP соответственно) приходит в обработчик, зарегистрированный для таблицы, над которой кнопка отпущена с tid, равным её tid и c par1==nil и par2==nil. nil - это как вариант, можно взять любую константу на ваше усмотрение.
Расширение интерфейса QLUA, Пользовательские пункты контекстного меню таблиц, функция открытия окна заявки с заранее заданными параметрами
 

Предложения касаются дополнений к программному интерфейсу QLUA.

1)

Реализовать функцию, создающую окно ввода новых заявок. В функцию в качестве параметра должна передаваться таблица, аналогичная таблице, передаваемой в качестве параметра в функцию sendTransaction(). Таким образом можно будет в скрипте заранее заполнить нужные параметры.

Справка по функции:

Функция предназначена для Открытия окна ввода новой заявки.

Формат вызова:

Код
NUMBER openNewOrderWindow(TABLE transaction)

Функция возвращает 1, если пользователь нажал "ОК", 0 - в ином случае

Параметр transaction - таблица, аналогичная по составу таблице, передаваемой в функцию sendTransaction().

Пример:

Код
openNewOrderWindow ({    ["CLIENT_CODE"]="777777",    ["ACCOUNT"]="MB0007777777",    ["EXECUTION_CONDITION"]="PUT_IN_QUEUE"    ["TRANS_ID"]="777777"    ["CLASSCODE"]="CETS"    ["SECCODE"]="USD000UTSTOM"    ["ACTION"]="NEW_ORDER"    ["OPERATION"]="B"    ["TYPE"]="L"    ["PRICE"]="63.3000"    ["QUANTITY"]="12"})

2)

Реализовать возможность добавления пользовательского пункта меню в контекстное меню каждого вида стандартных таблиц QUIK. При выборе пользователем этого пункта меню должен вызывается callback в пользовательском скрипте, в который должно передаваться имя класса окна (например, “quotes”, ”trades” и т.п.), идентификатор пользовательского пункта меню и таблица, содержащая значения текущей строки стандартной таблицы интерфейса QUIK. Регистрация callback пользовательского скрипта может производиться одновременно с регистрацией в QUIK параметров пункта меню.

Пример:

Где-то в коде инициализации:

Код
registerUserMenuItem("quotes", "Создать заявку и стоп заявку", USER_MAKE_ORDER_AND_STOP_ORDER, UserMenuItemCallback)

В результате вызова этой функции в контекстное меню всех таблиц котировок должен добавиться пункт меню "Создать заявку и стоп-заявку". При выборе пользователем этого пункта меню должен вызваться callback:

Код
function UserMenuItemCallback(table_class, menu_item_id, table_line)    if (table_class == "quotes") then        if (menu_item_id == USER_MAKE_ORDER_AND_STOP_ORDER) then            trans1 = PrepareOrderTransaction(table_line) --подготовить данные для заявки            trans2 = PrepareOrderTransaction(table_line) --подготовить данные для заявки            ProcessOrders({trans1, trans2})        elseif (menu_menu_item_id == USER_ANOTHER_FUNCTION) then            --сделать ещё что-нибудь полезное        else            message("Не реализовано")        end    elseif (table_class == "orders") then        --что-то сделать на радость всем    endend 

Примерные прототипы функций:

Код
NUMBER registerUserMenuItem(STRING table_class, STRING menu_item_text, NUMBER menu_item_id, FUNCTION callback)UserMenuItemCallback(STRING table_class, NUMBER menu_item_id, TABLE table_line)

Реализация этих двух пунктов позволит существенно разнообразить возможности и увеличить гибкость пользовательского интерфейса QUIK с помощью скриптов QLUA.

Страницы: 1
Наверх