1. На сколько я знаю, из Луа нельзя управлять тем, куда будет выводиться индикатор. Луа только считает значения
2. Обращаться можно, но хлопотно. Для этого есть функция CreateDataSource и дальше придется перебирать все свечи
3. на сколько я знаю Size не может уменьшиться. Обрезание начальных баров происходит только при входе в Квик. (или возможно при смене сессии). Кстати поправьте меня разработчики, если я ошибаюсь.
Какая у вас задача? При открытии квика, или про пересоединении к серверу, индикатор строится заново, и функция OnCalculate запускается столько раз, сколько у вас свечей на этом графике. index при этом номер свечи. от 0 до последней
Недавно решал подобную задачу, вот вам пример, не полный конечно:
function ReadFromFile () local f = io.open("filename","r+") -- Если файл не существует if f == nil then message("===ERR."..param_client..": не найден файл: "..filename) return else for line in f:lines() do ........ здесь line - это строка из файла, которую придется обрабатывать ... и можете здесь вызывать ту функцию, которая должна срабатывать при колбеке end end
Ну и к слову, работает, даже если CreateDataSource(param.classcode, param.code_bumagi, INTERVAL_TICK) не делать. Но у меня таблица обезличенных сделок открыта.
Не приходят события OnAllTrade при закрытой Таблице обезличенных сделок, События OnAllTrade приходят только при открытой таблице, в настройках все заказал.
Sergey Gorokhov написал: Чтобы в OnAllTrade что-то поехало, нужно инициировать заказ таблицы обезличенных сделок. Это делается либо путем открытия таблицы в терминале, либо через CreateDataSource с тиковым интервалом.
function onAllTrade (alltrade) --Функция вызывается терминалом QUIK при получении обезличенной сделки. print_perem("alltrade.price",alltrade.price) end
В настройках Заказ данных все включено.
Даже таблица обезличенных сделок по этому инструменту открыта и в нее данные поступают. Но почему-то onAllTrade все равно не срабатывает.
Не приходят события OnAllTrade при закрытой Таблице обезличенных сделок, События OnAllTrade приходят только при открытой таблице, в настройках все заказал.
Не приходят события OnAllTrade при закрытой Таблице обезличенных сделок, События OnAllTrade приходят только при открытой таблице, в настройках все заказал.
Sergey Gorokhov написал: Все правильно, функция OnAllTrade возвращает данные поступающие в таблицу обезличенных сделок, но никак не заказывает данные. для заказа данных используйте CreateDataSource с тиковым интервалом.
А поясните пожалуйста этот момент. В документации этого ничего не написано, поэтому не понятно. Все другие функции ONххххххх работают прекрасно, независимо от того, что открыто и что заказано. Зачем здесь по-другому? И надо бы хотя бы в документации это написать, с примером.
Для работы с SetTableNotificationCallback хочу попробовать научиться разделять одиночный клик мышки и двойной, путем измерения времени между двумя событиями. Подробнее об этом здесь https://forum.quik.ru/forum10/topic2293/
Подскажите, как в QLUA определить время системы с точностью до миллисекунд? Заранее спасибо!
Пытаюсь в SetTableNotificationCallback научить различать различные события, такие как: - одиночное нажатие мышки - двойное нажатие мышки - одиночное нажатие мышки с нажатой кнопкой Ctrl - двойное нажатие мышки с нажатой кнопкой Ctrl
Пока возникают проблемы, и не могу понять, как их обойти. Может кто-то поделится опытом?
Сначала про мышку: Как описывалось в теме https://forum.quik.ru/messages/forum10/message13087/topic1440/#message13087 при двойном нажатии срабатывает сразу серия событий QTABLE_LBUTTONDOWN QTABLE_LBUTTONUP QTABLE_LBUTTONDBLCLK QTABLE_LBUTTONUP Это крайне неудобно, потому что если на одиночный клик совершается какое-то действие, то при двойном щелчке приходится это действие отменять. Я не специалист по Windows, но в ее настройках, есть параметр, отвечающий за скорость двойного нажатия мышки. Почему бы в QLUA не использовать этот параметр, и не проверять сначала, было ли двойное нажатие мышки, или одиночное, и уже потом возвращать окончательное событие - ОДНО. Это как пожелание к доработке.
Второе: по поводу нажатия клавиш. Например нужно обработать событие - одиночное нажатие мышки с нажатой кнопкой Ctrl Кое как я выкрутился из положения, и как только нажимается Ctrl записываю в переменную значение, что нажата Ctrl. И все дальнейшие события обрабатываю с учетом того, то Ctrl нажата. Проблема в том, что если нажать Ctrl и потом сразу отпустить, то при отпускании никакого события не срабатывает, и систем продолажет помнить, что Ctrl нажата. И следующее событие обрабатывает, как будто Ctrl нажата, хотя она давно отпущена. Просьба доработать этот вопрос каким-нибудь образом. Хотя бы сделать возврат события "отпущена клавиша", как это сделано с кнопкой мышки.
еще один вопрос, и как вариант, пожелание к доработке: можно ли менять цвет нулевой строки (т.е. строки с заголовком в таблице)? Если нет, то просьба зарегистрировать как пожелание. В этом случае можно буде очень удобно использовать эту строку под различные кнопки, причем которые не уезжают при прокрутке таблицы вниз.
И если я правильно понял, то если использовать DebugView, то значения переменных будут выводиться там, а обычные сообщения в обычном окне для message, и лично мне кажется, будет сложно совмещать по времени, что после чего следовало. Или такой проблемы не возникает?
swerg написал: От обычного message отличается тем, что отладочный вывод вы видите только при запущенном внешнгем перехватчике таких сообщений (например - DebugView).
Я пока решал эту проблему путем переменной PrintOtladka, и если она была равна True, то вывод шел средствами обычных message, а если False, то вывода не было. Так что результат одинаковый, но без лишней библиотеки. А как она по скорости? Быстрее чем обычный message?
Люди добрые, а можете объяснить про debugview что это за зверь? Специально отдельную тему создал, чтобы проще было потом найти нужную информацию https://forum.quik.ru/forum10/topic2290/
В одной из веток прочитал про отладчик (вернее про вывод отладочной информации) на экран. Речь шла о debugview. Понял, что его надо откуда качать и как-то ставить, но не нашел в документации к Lua и Квику никаких упоминаний о нем. Подскажите, что это за зверь такой, где его качать и как ставить и как пользоваться?
Конечно придется единоразово в настройках задать некоторые параметры - размер проскальзывания например. Но они требуют единоразового ввода и редко требуют изменений.
Осмелюсь предположить, что автор просьбы имел ввиду именно новое выставление стоп заявки. И действительно, чтобы ее выставить (не имея какого-нибудь робота) придется основательно помучаться вводя разные циферки. Но если сделать функционал, что если кликнуть на треугольничек о сделке на графике (когда они отображаются) (можно еще в счетании с Ctrl или Шифр) и тащить мушку верх или вниз, то в зависимости от этого выставляется стоп заявка. А еще можно сделать допустим при Ctrl - ставится стоп, а при Shift - тейк профит. В общем можно сделать очень удобно для пользователей
Уже видел обсуждение этого вопроса ранее, но там ни к чему толком не пришли.
Поднему этот же вопрос снова. Вопрос к разработчиким (возможно как пожелание к доработке): например мне нужно запустить проигрывание аудифайла Если я запускаю os.execute("vlc.exe имя_файла") то у меня запускается сначала досовское окно, а потом запускается окно самого VLC плеера. Почему так? Это так сказать не очень удобно. Кто-нибудь может подсказать, как эту проблему решить?
Для себя пока решил эту проблему так, чтобы это досовоское окно хотя бы исчезало сразу. Выполняю команду os.execute("start vlc.exe имя_файла") В этом случае окно дос запускается, запускает VLC в отдельном окне, и само ДОС окно закрывается.
Здравствуйте. Подниму эту тему, потому что озадачился этой же проблемой. Можно ли как-то из одного скрипта, запустить другой, но так, чтобы его работа выполнялась аналогично тому, как если бы мы его запустили из панели ЛуаСкриптов? Т.е. полностью независимо от запускающего его скрипта и полностью со своими переменными.
1) очень поддерживаю! в одной кнопке стало очень неудобно. Уж меню пока еще не очень загружено. 2) отвечу за разработчиков - шаблон можно удалить - когда начинаешь вводить фигуру, и если зайти в выбор шаблона, то справа есть крестик, для удаления.
При создании своей таблицы средствами QLUA можно менять ширину столбиков, всех кроме того, в котором будет писаться номер строки. Однако этот номер строки зачастую совсем не нужен, а занимает приличное количество места. Подскажите, можно ли как-то изменить его ширину? В частности до нуля. Заранее спасибо.
Для тех, кто не хочет ждать реализации моей просьбы, решение проблемы оказалось очень простым. Качаете программу твикер для винды - winaerotweaker Можно скачать отсюда http://winreview.ru/forum/viewforum.php?f=1 Там меняете толщину рамок на "ноль"
Невооруженным взглядом видно, что толщина границ окон сильно выросла, и занимает чудовищное количество места. Сегодня я наконец поборол эту проблему, за счет изменения параметров Windows 10, влияющих на толщину окон. Я понимаю желание разработчиков Квика использовать некоторые значения из свойств Windows, но подумайте каково пользователям, которые настроили терминал идеально под себя, а потом ставят другую винду, и видят дикую несуразицу. Более того, если приходится переключаться с одной винды на другую (а в переходный период это часто случается), невозможно иметь общие настройки. Одним словом просьба к разработчикам, хранить все настройки окон в файлах *.wnd и не использовать свойства операционной системы. В дополнение, если уж кто-то будет просить "широкие рамки", в чем я сильно сомневаюсь, то можно сделать такую опцию в настройках терминала.
Хочу обратиться к разработчикам с просьбой убрать "глюк", или сделать его настраиваемым. Речь пойдет о ширине рамок у окон в квике. Дело в том, что раньше я работал на Windows 7. И там окна выглядели вот так
Столкнулся с такой проблемой. У меня есть служебная переменная (пусть ее имя будет А) которая может принимать значение "ххх UD" или "ххх UD+" Где ххх - может быть любой текст. В зависимости от наличия знака "+" будут совершаться разные действия. И тут возникает ошибка в операторе if с таким условием:
if string.find(A, "UD+") ~= nil then данный оператор, всегда возвращает номер найденного вхождения, независимо от того, какое значение имеет переменная А, с плюсом или нет. Ощущение, ощущение, что при поиске, этот плюс просто отбрасывается.
Большая просьба исправить данную ошибку в операторе, ведь + это такой же символ как и все остальные. Я думаю подобная проблема и с другими символами. Я пробовал делать так: if string.find(A, "UD\+") ~= nil then но это не помогает.
Почему-то не на всех копиях квика заработало, поэтому еще переписал:
Settings = { Name = "Day Open Price", line = { { Name = "Open", Color = 0xd7ff, Type = TYPE_POINT, Width = 2 } } }
function Init() return #Settings.line end
price_begin_day = nil
function OnCalculate(indx) -- если новый день, то сохраняем цену начала дня if T(indx).hour <= 10 and T(indx).min == 0 then price_begin_day = O(indx) end return price_begin_day end
Т.к. идея понравилась, подправил предложенный скрипт. Вот результат:
Settings = { Name = "Day Open Price", line = { { Name = "Open", Color = 0xd7ff, Type = TYPE_POINT, Width = 2 } } }
function Init() return #Settings.line end
function OnCalculate(indx) local dt = T(indx) -- если новйы день, то сохраняем цену начала дня if dt.day ~= last_day then prece_begin_day = O(indx) last_day = dt.day end return prece_begin_day end
Она будет выполняться в случае совершения любой сделки. В качестве параметра trade будет передаваться переменная типа таблица с этой сделкой. Там уже можно найти поля цены, количества и т.д.
Скажите, а где-то есть тема или подписка на рассылку новостей о выходе новых версий квика? Если нет, то просьба к разработчикам - можно создать одну тему (например в этом разделе форума) и в нее постить сообщения о выходах новых версий. А желающие могут подписаться на эту тему и получать сообщения на почту. А тему можно сделать закрытую, чтобы посторонние не могли в ней ничего обсуждать.