Мы понимаем важность и сложность вашего труда и мелочность наших пожеланий. Однако найдите немного времени, что бы хоть немного облегчить жизнь тем, кто имеет счастье писать скрипты на 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. Картинка статичная, сделок нет.
Sergey Denegin написал: В луа для этого есть глобальная переменная _G через которую можно обратиться к любой переменной, или даже процедуре. например _G["a1"] выдаст значение переменной а1 а _G["a1"]["b2"] выдаст значение к элементу массива a1.b2
Подскажите пожалуйста человеку не знакомому достаточно подробно с lua. Как обработать переменную, имя которой представлено в строке? Например :
var1=0 a = "var" b = "1" c =a..b далее мне нужно например в конструкции if проверить значение переменной var1 имея переменную c. В некоторых языках для этого используется оператор $ там это выглядит так: if $c = 0 then ........ end
Как это сделать в lua?
Прошу извинить, что не нашел этого в руководстве :(
Алексей Дуванов написал: под wine (linux) 7.1.1 и 7.1.2 стало нормально открывать вкладку индикатора. Также отдельное спасибо, что-то подкрутили в модуле статвол (опционный аналитик) - теперь работает под вайном (правда есть небольшие косячки, но работать можно)
Алексей, а функция sleep(n) у вас под wine корректно работает? У меня false возвращает :(
Sergey Gorokhov написал: Здравствуйте, Попробуйте обновить версию до 7.1 Проверьте будет ли наблюдаться там указанная проблема? Дело в том что в версии 7.1 диалог настроек графиков был переделан и там используются другие контролы, поэтому проблем не должно быть
function dValue(i,param) local v = param or "C" if v=="O" then return O(i) elseif v=="H" then return H(i) elseif v=="L" then return L(i) elseif v=="C" then return C(i) elseif v=="V" then return V(i) elseif v=="M" then return H(i)+L(i)/2 elseif v=="T" then return H(i)+L(i)+C(i)/3 elseif v=="W" then return H(i)+L(i)+2*C(i)/4 else return C(i) end end
function Init() return 1 end function OnCalculate(index) if index <Settings.period then return nil else local sum=0 for i=index-Settings.period+1, index do sum=sum+C(i) end return sum/Settings.period end end
Egor Zaytsev написал: Сообщите еще версия QUIK и ссылку на файл dofile(getWorkingFolder().."\\Include\\ma.lua")
Егор, версия указана в первом сообщении. Ссылка на инкладник не принципиально, я могу эту функцию убрать, результат тот же простейший вариант: dofile(getWorkingFolder().."\\include\\ma.lua")
function dValue(i,param) local v = param or "C" if v=="O" then return O(i) elseif v=="H" then return H(i) elseif v=="L" then return L(i) elseif v=="C" then return C(i) elseif v=="V" then return V(i) elseif v=="M" then return H(i)+L(i)/2 elseif v=="T" then return H(i)+L(i)+C(i)/3 elseif v=="W" then return H(i)+L(i)+2*C(i)/4 else return C(i) end end
function Init() return 1 end function OnCalculate(index) if index <Settings.period then return nil else local sum=0 for i=index-Settings.period+1, index do sum=sum+C(i) end return sum/Settings.period end end
Добрый день. Подскажите начинающему как победить проблему. При добавлении индикатора, написаного на lua в появляющемся окне настроек индикатора отсутствует вкладка "Общие". Имеются только вкладки "Дополнительно" и "Уровни". В результате невозможно задать параметры индикатора. Quik версия 7.0.4.10 Спасибо