Вы категорически против чего? Против того что бы функция MouseClick нормально работала или против того что бы сортировку через заголовок столбца не трогали?
Получается что надо очень быстро второй раз нажимать на клавишу. Потому что у меня сразу на первый клик выводится меню, а второй уже никому не интересен. Не успеваю :). Возможно что это только моя проблема связанная с тем, что у меня Винда стоит на Parallels. Ладно, обойдусь колесом. Все таки прошу рассмотреть необходимость вывода меню на ячейке данных при том, что меню сортировки так же выводится при клике на заголовок столбца, а ячейка данных задействована для обработки пользовательскиx функций qLua.
function MouseClick(t_id, msg, par1, par2) .... if msg==QTABLE_LBUTTONDBLCLK and par1==1 and par2==2 then message("левый батон") end
if msg==QTABLE_RBUTTONDBLCLK and par1==1 and par2==2 then message("правый батон") end end
При двойном клике на ячейку данных левой клавишей выходит "левый батон". При двойном клике правой клавишей выходит меню: -------- Сортировать по "<имя столбца>" Сортировать по умолчанию -------- а мессаджа нет.
Раз сто покликал и каким то чудом один раз получил и меню и мессадж одновременно. У меня к вам вопрос: меню сортировки при клике на ячейку данных, если вы его так же сделали при клике на заголовок столбца?
В последних версиях в терминал внесены значительные улучшения. Улучшения пишу честно, без скобок. Например если кликнуть правой клавишей мыши по заголовку пользовательской таблицы, предлагается сортировка столбца. Точно так же сортировка предлагается если таким образом кликнуть и в ячейке с данными. Великолепно! Только теперь при двойном клике по ячейке данных функция MouseClick(...) перестала возвращать QTABLE_LBUTTONDBLCLK. А надо :(. Вполне хватило бы оформить вызов сортировки только кликом на заголовок. Что делать?
Вдогонку зарегистрируйте пожалуйста еще необходимость позиционирования координат таблицы функцией SetWindowPos() не относительно экрана, а относительно текущего окна Quik. Думаю всем понятно почему.
Мы понимаем важность и сложность вашего труда и мелочность наших пожеланий. Однако найдите немного времени, что бы хоть немного облегчить жизнь тем, кто имеет счастье писать скрипты на Qlua. Создав убогое подобие интерфейса в виде пользовательских таблиц пожалуйста сделайте шаг в сторону удобства и необходимых доработок: 1. Возможность убирать заголовок. 2. Возможность убирать столбец нумерации 3. Возможность привязывать таблицу к конкретной вкладке Quik.
Последнее особенно актуально ввиду полного бардака с размещением таблиц после перезагрузки.
Все это вам уже излагалось, однако может быть уже пора продвинуться дальше ответа "будет рассмотрено" ? И может быть однажды мы дождемся чуда, которое позволит вводить данные в переменную непосредственно в ячейке таблицы ...
Еще одна проблема прорисовалась. Если после скролла и пропадания окон восстановить окна загрузкой из файла .wnd, то исчезает фильтр получения обезличенных сделок. Приходится либо после скролла убивать процесс Квика что бы загрузится со старта, либо загружаться с .wnd и заново оформлять фильтр. Очень погано :(
- поставил заново quik на PlayOnMac v4.3.4, 64-bit, встроенный wine 4.11-staging - поставил ключи, установил соединение с брокером (втб) -обновил до 8.03.14, quik нормально начал шуршать данными в таблицах. - ничего не настраивал и не ставил. - запустил скрипт с ошибкой: -- is_run = true
function main() a=1 while is_run do if a=1 then end sleep(50) end end
function OnStop() is_run = false end -- - вывалился в дамп, занавес.
Хотели бы всё же обозначить, что данную ситуацию мы хотели бы изучить по возможности более детально. Для этого нам необходимо знать точную версию терминала и иметь пример скрипта с ошибкой, приводящей к сбою. Если это возможно, то просим уточнить версию терминала - 8.0.x - какое число стоит на месте "x"? Также хотели бы уточнить - если Вам удалось локализовать причину возникновения сбоя в коде скрипта, не могли бы Вы, пожалуйста, предоставить минимальный достаточный для воспроизведения код скрипта, вместо оригинала?
В любом случае, ожидаем Вашего письма. Заранее благодарим за предоставленную информацию.
У нас описываемое Вами поведение терминала не воспроизвелось. Пожалуйста, напишите нам на quiksupport@arqatech.com. В письме просим прислать следующий список файлов для диагностики описываемого Вами поведения терминала:
1. архив рабочего места QUIK без файлов ключа *.txk, но с файлами настроек *.wnd с которыми поведение (падение) воспроизводится, если выявлена какая-либо зависимость от конфигурации рабочего места; 2. оригинал скрипта с наличием неисправленной ошибки; 3. если не затруднит - просим предоставить также минимальный самодостаточный аналог этого скрипта (2), с которым падение воспроизводится; 4. файлы дампа полученные с использованием скриптов из п. (2), (3).
Добрый день Андрей!
Проблемы нестабильной работы с вываливанием в дамп присутствали при работе Quik 8.0х установленного чрез PlayOnMac c wine v1.41 в режиме x64. Несколько раз проверил убирая и возвращая ошибку. Вылечилось покупкой Parallels Deskctop 12 и установкой системы на Win7, тут вроде все стабильно. Дамп, .wnd и скрин ошибки вышлю, скрипт извините не могу - три тысячи строк не считая подгружаемых файлов.
В принципе мне уже не критично, но похоже в 64-разрядной версии от PlayOnMac и wine придется отказаться.
Andrey Bezrukov написал: Здравствуйте, Kolossi. Да, терминал QUIK 8.0 может быть установлен на компьютеры с macOS при помощи PlayOnMac. С особенностями процесса установки терминала предлагаем ознакомиться в следующей инструкцией . Обращаем Ваше внимание на то, что терминал QUIK разрабатывается и тестируется под ОС Windows, использование на ПК с другими ОС (например, macOS) может приводить к ошибкам, недокументированным особенностям и др. непредвиденному поведению терминала.
Андрей спасибо за ответ! Однако в указаной инструкции описана установка 32-битной версии. Такая уже стоит и до 8 не обновляется. Я так понимаю, что все дело в 32-х битной версии Wine. Стоит последняя 4.11-staging. Вообще у кого-нибудь работает 8.0 под wine?
Очень бы хотелось иметь возможность привязывать пользовательские таблицы к конкретным вкладкам Квика. Например иметь такую опцию в функции CreateTable() или SetWindowPos(...)
Сейчас для того, что бы открыть таблицу в определенной вкладке, нужно запускать скрипт робота находясь в ней. Если скриптов несколько, то бегать по вкладкам запуская их. Кроме того при закрытии терминала или аварийном перезапуске пользовательские таблицы вновь открываются во вкладке вкладке, которая была открыта на момент выхода из Квика. Робот обижается :)
Сергей, спасибо за ваши попытки помочь. Давайте попробуем воспроизвести ситуацию.
Пусть у вас в цикле getDepoEx(...).currentball получает количество бумаг определенного тикера периода T2. Т.е. той бумаги, которая у вас реально есть в портфеле.
В настройках Квика стоит "Очищать данные после смены даты ...на сервере" и "Восстанавливать связь с 9-30 до ...
С вечера запустите скрипт и если он живым доедет до 10-00 следующего утра, я посыплю голову пеплом и закрою вопрос или попробую поискать причину вне Квика.
if getDepo Ex ( "MC0003300000" , "555555" , "SU26225RMFS1" , "L01-00000F00" , 2 ) then
message ( "getDepoEx~=nil" )
else
message ( "getDepoEx is nil" )
end
Может у Вас версия терминала старая?
Новая. Вы не внимательно читаете. Ошибка выскакивает только в момент коннекта с сервером в первый раз за текущие сутки. Т.е. в терминале стоит реконнект начиная с 9-30 утра и в Основных настройках стоит "Очищать данные после смены даты ...на сервере". Вот в момент первого реконнекта это и происходит. Дальше все нормально работает.
PS У вас nil, потому что стоит не ваш счет клиента 555555 и другие параметры тоже не ваши.
Kolossi написал: Если бы она возвращала nil, я бы сюда не обращался. Скрипт останавливается с ошибкой : attempt to index a nil value
А это сообщение разве не говорит что значение nil?
Не говорит, это сообщение о причине остановки скрипта.
сообщение о причине остановки скрипта, как раз и говорит о том что Вы пытаетесь получить параметр таблицы которая есть nil Как уже было сказано и еще раз повторим, что для решения проблемы надо сделать проверку на nil
Еще раз попробую объяснить. Я не тупой и не начинающий :) И пример с type тоже не зря привел. Сама проверка на nil, останавливает скрипт !!!. Т.е. в конструкции
if getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2) then y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal end
первая строка останавливает скрипт с диагнозом : attempt to index a nil value
Ну вот и спамером обозвали :(, не со зла я :) . Надеюсь админ почистит. По ситуации мне не понятно, почему такой проблемы нет в других функциях получения данных из таблиц типа getParamEx и др . Завтра на открытии попробую посмотреть getDepo(...)
Kolossi написал: Добрый день ! Столкнулся с проблемой при использовании данной функции. ... y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
Добрый день!
Вы любите рисковать)) В lua, как в динамически типизированном языке, стоит всегда добавлять проверки на null, а потом уже доставать из переменной значения, как из таблицы:
Код
local depo = getDepo Ex ( "MC0003300000" , " 555555 " , "SU26225RMFS1" , "L01 - 00000F00" , 2 )
local currentbal = depo and depo.currentbal
or 0 -- например
Пробовал, сама первая строка, которую вы предлагаете вышибает скрипт. Повторюсь, только в момент подключения к серверу в первый раз за сутки, когда очищаются данные на сервере (как прописано в настройках Квика). Дальше в течении дня все работает корректно.
Kolossi написал: Добрый день ! Столкнулся с проблемой при использовании данной функции. ... y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
Добрый день!
Вы любите рисковать)) В lua, как в динамически типизированном языке, стоит всегда добавлять проверки на null, а потом уже доставать из переменной значения, как из таблицы:
Код
local depo = getDepo Ex ( "MC0003300000" , " 555555 " , "SU26225RMFS1" , "L01 - 00000F00" , 2 )
local currentbal = depo and depo.currentbal
or 0 -- например
Пробовал, сама первая строка, которую вы предлагаете вышибает скрипт. Повторюсь, только в момент подключения к серверу в первый раз за сутки, когда очищаются данные на сервере (как прописано в настройках Квика). Дальше в течении дня все работает корректно.
Kolossi написал: Добрый день ! Столкнулся с проблемой при использовании данной функции. ... y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
Добрый день!
Вы любите рисковать)) В lua, как в динамически типизированном языке, стоит всегда добавлять проверки на null, а потом уже доставать из переменной значения, как из таблицы:
Код
local depo = getDepo Ex ( "MC0003300000" , "555555" , "SU26225RMFS1" , "L01-00000F00" , 2 )
local currentbal = depo and depo.currentbal
or 0 -- например
Пробовал, сама первая строка, которую вы предлагаете вышибает скрипт. Повторюсь только в момент подключения к серверу в первый раз за сутки, когда очищаются данные на сервере (как прописано в настройках Квика). Дальше в течении дня все работает корректно.
Kolossi написал: Возможно это баг разработчиков. Но я не могу придумать как это обойти, кроме как останавливать скрипт на время обновления данных. Подскажите если кого озарит
Почему именно баг? Вы же сами сказали что данных нет. А раз данных нет то и возвращать естественно нечего. И даже в документации про это сказано:
Цитата
В случае ошибки функция возвращает «nil».
остается только добавить проверку на nil
Если бы она возвращала nil, я бы сюда не обращался. Скрипт останавливается с ошибкой : attempt to index a nil value
Получаю ошибку несуществующего аргумента в момент очистки таблиц при первом за текущие сутки коннекте к серверу 9-30. Дальше работает корректно, все данные из таблицы лимитов получаются, при переконнекте скрипт не вылетает.
Попробовал посмотреть что она в этот момент возвращает ... y=type(getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2)) ...
получил: bad argument #1 to type (value expected)
Выборки из других таблиц getParamEx, getPortfolioInfoEx работают как и должны круглосуточно.
Возможно это баг разработчиков. Но я не могу придумать как это обойти, кроме как останавливать скрипт на время обновления данных. Подскажите если кого озарит
Lua не работает с таблицами QUIK, а берет информацию напрямую с сервера брокера. Поэтому в этом месте рекомендуем обратиться к брокеру и если брокер затруднится в разборе проблемы, то инициируйте обращение к нам. Будем разбираться.
Начинается обычный пинг-понг и пользователь в качестве мячика :( -- По вопросу написания и использования скриптов, прошу обращаться в техническую поддержку разработчика ПО Quik: http://arqatech.com/ru/support/
С уважением,
Владислав Сидельников Эксперт Департамент брокерского обслуживания Банк ВТБ (ПАО) --
Вчера (пятница 29/06/18) произошел странный сбой, который обошелся мне в приличную сумму. С утра перестал отвечать основной сервер брокера ВТБ и все переключились на Сервер2. Ближе к обеду я обратил внимание на некорректное выставление заявок скриптом QUIK. После разбирательства выяснилось, что функция getQuoteLevel2() возвращает данные, которые не соответствуют содержимому стакана.
Конкретный трейс - в открытом стакане Алросы нижний оффер 98.64, верхний бид 98.62. Картинка статичная, сделок нет.