вот таким образом у меня легко получается переопределить колбек, например OnAllTrade
Порядок создания callback-обработчиков
Пользователь
Сообщений: Регистрация: 20.04.2016
29.11.2016 21:26:16
я пользуюсь такой штукой:
все колбеки у меня описаны в теле основного макроса. затем, если мне надо без перезпуска этого макроса изменить текст какой-то процедуры, я по нажатию на определенную кнопку, запускаю командой dofile внешний файл lua, в котором в свою очередь идет вызов: dofile (getScriptPath().."\\. .\\хххххххх.lua") где хххххххх имя основного файла. Таким образом он его снова перекомпилирует, и если его текст был изменен, то все функции начинают работать "по-новому". У меня все перекрасно работает. можете попробовать
Блок Settings
Пользователь
Сообщений: Регистрация: 20.04.2016
28.11.2016 22:08:52
Цитата
swerg написал: можно ли строку, разделенную запятыми, преобразовать в таблицу lua
вопрос не совсем понятен. Можно сделать все что угодно, вопрос в какую таблицу вам надо преобразовать?
Отладка скриптов Lua для Quik., Как произвести отладку скрипта?
Пользователь
Сообщений: Регистрация: 20.04.2016
28.11.2016 12:22:24
1. На сколько я знаю, из Луа нельзя управлять тем, куда будет выводиться индикатор. Луа только считает значения
2. Обращаться можно, но хлопотно. Для этого есть функция CreateDataSource и дальше придется перебирать все свечи
3. на сколько я знаю Size не может уменьшиться. Обрезание начальных баров происходит только при входе в Квик. (или возможно при смене сессии). Кстати поправьте меня разработчики, если я ошибаюсь.
Отладка скриптов Lua для Quik., Как произвести отладку скрипта?
Пользователь
Сообщений: Регистрация: 20.04.2016
24.11.2016 22:28:04
Какая у вас задача? При открытии квика, или про пересоединении к серверу, индикатор строится заново, и функция OnCalculate запускается столько раз, сколько у вас свечей на этом графике. index при этом номер свечи. от 0 до последней
Имитация SetUpdateCallback(.....)
Пользователь
Сообщений: Регистрация: 20.04.2016
24.11.2016 22:24:01
Недавно решал подобную задачу, вот вам пример, не полный конечно:
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
SetTableNotificationCallback : работы с клавишей Ctrl и двойным щелчком мышки
Пользователь
Сообщений: Регистрация: 20.04.2016
24.11.2016 19:39:12
Да все верно, речь шла о Ctrl вместе с мышкой. Спасибо, надеюсь вы примете решение о доработке.
как определить время с точностью до милисекунд?
Пользователь
Сообщений: Регистрация: 20.04.2016
23.11.2016 16:51:24
Спасибо огромное!
про тики
Пользователь
Сообщений: Регистрация: 20.04.2016
23.11.2016 11:23:47
Ну и к слову, работает, даже если CreateDataSource(param.classcode, param.code_bumagi, INTERVAL_TICK) не делать. Но у меня таблица обезличенных сделок открыта.
про тики
Пользователь
Сообщений: Регистрация: 20.04.2016
23.11.2016 11:22:21
Все заработало!
про тики
Пользователь
Сообщений: Регистрация: 20.04.2016
23.11.2016 11:22:08
Цитата
Sergey Gorokhov написал: Lua это регистрозависимый язык. Согласно документации, функция должна называться OnAllTrade
Блин, вот я чудик (((((( Спасибо большое!
Не приходят события OnAllTrade при закрытой Таблице обезличенных сделок, События OnAllTrade приходят только при открытой таблице, в настройках все заказал.
Пользователь
Сообщений: Регистрация: 20.04.2016
23.11.2016 11:07:02
Вот не работает почему-то. Чтобы не дублировать вопрос, я его вот тут задал, в похожей теме
про тики
Пользователь
Сообщений: Регистрация: 20.04.2016
23.11.2016 11:03:29
Цитата
Sergey Gorokhov написал: Чтобы в OnAllTrade что-то поехало, нужно инициировать заказ таблицы обезличенных сделок. Это делается либо путем открытия таблицы в терминале, либо через CreateDataSource с тиковым интервалом.
function onAllTrade (alltrade) --Функция вызывается терминалом QUIK при получении обезличенной сделки. print_perem("alltrade.price",alltrade.price) end
В настройках Заказ данных все включено.
Даже таблица обезличенных сделок по этому инструменту открыта и в нее данные поступают. Но почему-то onAllTrade все равно не срабатывает.
Не приходят события OnAllTrade при закрытой Таблице обезличенных сделок, События OnAllTrade приходят только при открытой таблице, в настройках все заказал.
Пользователь
Сообщений: Регистрация: 20.04.2016
23.11.2016 10:47:29
Опять же не понятно, что толку что я закажу данные quik_price_tick = CreateDataSource(param.classcode, param.code_bumagi, INTERVAL_TICK)
Где я потом смогу получить нужные мне данные обезличенных сделок?
Ведь сама OnAllTrade(alltrade) уже сама в качестве параметра должна содержать информацию о последней обезличенной сделке.
Не приходят события OnAllTrade при закрытой Таблице обезличенных сделок, События OnAllTrade приходят только при открытой таблице, в настройках все заказал.
Пользователь
Сообщений: Регистрация: 20.04.2016
23.11.2016 10:45:15
Цитата
Sergey Gorokhov написал: Все правильно, функция OnAllTrade возвращает данные поступающие в таблицу обезличенных сделок, но никак не заказывает данные. для заказа данных используйте CreateDataSource с тиковым интервалом.
А поясните пожалуйста этот момент. В документации этого ничего не написано, поэтому не понятно. Все другие функции ONххххххх работают прекрасно, независимо от того, что открыто и что заказано. Зачем здесь по-другому? И надо бы хотя бы в документации это написать, с примером.
как определить время с точностью до милисекунд?
Пользователь
Сообщений: Регистрация: 20.04.2016
22.11.2016 19:53:13
Для работы с SetTableNotificationCallback хочу попробовать научиться разделять одиночный клик мышки и двойной, путем измерения времени между двумя событиями. Подробнее об этом здесь
Подскажите, как в QLUA определить время системы с точностью до миллисекунд? Заранее спасибо!
SetTableNotificationCallback : работы с клавишей Ctrl и двойным щелчком мышки
Пользователь
Сообщений: Регистрация: 20.04.2016
22.11.2016 19:48:47
Здравствуйте!
Пытаюсь в SetTableNotificationCallback научить различать различные события, такие как: - одиночное нажатие мышки - двойное нажатие мышки - одиночное нажатие мышки с нажатой кнопкой Ctrl - двойное нажатие мышки с нажатой кнопкой Ctrl
Пока возникают проблемы, и не могу понять, как их обойти. Может кто-то поделится опытом?
Сначала про мышку: Как описывалось в теме при двойном нажатии срабатывает сразу серия событий QTABLE_LBUTTONDOWN QTABLE_LBUTTONUP QTABLE_LBUTTONDBLCLK QTABLE_LBUTTONUP Это крайне неудобно, потому что если на одиночный клик совершается какое-то действие, то при двойном щелчке приходится это действие отменять. Я не специалист по Windows, но в ее настройках, есть параметр, отвечающий за скорость двойного нажатия мышки. Почему бы в QLUA не использовать этот параметр, и не проверять сначала, было ли двойное нажатие мышки, или одиночное, и уже потом возвращать окончательное событие - ОДНО. Это как пожелание к доработке.
Второе: по поводу нажатия клавиш. Например нужно обработать событие - одиночное нажатие мышки с нажатой кнопкой Ctrl Кое как я выкрутился из положения, и как только нажимается Ctrl записываю в переменную значение, что нажата Ctrl. И все дальнейшие события обрабатываю с учетом того, то Ctrl нажата. Проблема в том, что если нажать Ctrl и потом сразу отпустить, то при отпускании никакого события не срабатывает, и систем продолажет помнить, что Ctrl нажата. И следующее событие обрабатывает, как будто Ctrl нажата, хотя она давно отпущена. Просьба доработать этот вопрос каким-нибудь образом. Хотя бы сделать возврат события "отпущена клавиша", как это сделано с кнопкой мышки.
Можно ли убрать совсем или изменить ширину столбика с номером строк в таблице на экране?
Пользователь
Сообщений: Регистрация: 20.04.2016
21.11.2016 14:06:44
еще один вопрос, и как вариант, пожелание к доработке: можно ли менять цвет нулевой строки (т.е. строки с заголовком в таблице)? Если нет, то просьба зарегистрировать как пожелание. В этом случае можно буде очень удобно использовать эту строку под различные кнопки, причем которые не уезжают при прокрутке таблицы вниз.
Заранее спасибо.
debugview - где его взять и как им пользоваться?
Пользователь
Сообщений: Регистрация: 20.04.2016
21.11.2016 10:49:56
надо будет попробовать
debugview - где его взять и как им пользоваться?
Пользователь
Сообщений: Регистрация: 20.04.2016
21.11.2016 10:49:47
Понял, спасибо за ответ!
debugview - где его взять и как им пользоваться?
Пользователь
Сообщений: Регистрация: 20.04.2016
21.11.2016 09:54:20
И если я правильно понял, то если использовать DebugView, то значения переменных будут выводиться там, а обычные сообщения в обычном окне для message, и лично мне кажется, будет сложно совмещать по времени, что после чего следовало. Или такой проблемы не возникает?
debugview - где его взять и как им пользоваться?
Пользователь
Сообщений: Регистрация: 20.04.2016
21.11.2016 09:45:17
Цитата
swerg написал: От обычного message отличается тем, что отладочный вывод вы видите только при запущенном внешнгем перехватчике таких сообщений (например - DebugView).
Я пока решал эту проблему путем переменной PrintOtladka, и если она была равна True, то вывод шел средствами обычных message, а если False, то вывода не было. Так что результат одинаковый, но без лишней библиотеки. А как она по скорости? Быстрее чем обычный message?
Отладка скриптов Lua для Quik., Как произвести отладку скрипта?
Пользователь
Сообщений: Регистрация: 20.04.2016
21.11.2016 01:45:58
Люди добрые, а можете объяснить про debugview что это за зверь? Специально отдельную тему создал, чтобы проще было потом найти нужную информацию
debugview - где его взять и как им пользоваться?
Пользователь
Сообщений: Регистрация: 20.04.2016
21.11.2016 01:43:02
И можно хотя бы в двух словах объяснить, чем он отличается от обычного message?
Если я выполняю команду из примера в документации к PrintDbgStr:
PrintDbgStr("test1") то ошибки не выдает, но и ничего нигде не выводит. В какое окно он это выводит?
debugview - где его взять и как им пользоваться?
Пользователь
Сообщений: Регистрация: 20.04.2016
21.11.2016 01:40:07
Здравствуйте.
В одной из веток прочитал про отладчик (вернее про вывод отладочной информации) на экран. Речь шла о debugview. Понял, что его надо откуда качать и как-то ставить, но не нашел в документации к Lua и Квику никаких упоминаний о нем. Подскажите, что это за зверь такой, где его качать и как ставить и как пользоваться?
Заранее спасибо !
Quik, версия, последющая за 7.5, Горизонтальные объёмы.
Пользователь
Сообщений: Регистрация: 20.04.2016
21.11.2016 01:25:05
Цитата
написал: терминал квик не имеет информации о предыдущих днях и не может построить горизонтальные объёмы на исторических данных.
Сохранить эти данные, при желании, не составило бы никакого труда. объем этих данных не такой и большой
Стоп лосс
Пользователь
Сообщений: Регистрация: 20.04.2016
19.11.2016 14:52:51
Конечно придется единоразово в настройках задать некоторые параметры - размер проскальзывания например. Но они требуют единоразового ввода и редко требуют изменений.
Стоп лосс
Пользователь
Сообщений: Регистрация: 20.04.2016
19.11.2016 14:51:36
Осмелюсь предположить, что автор просьбы имел ввиду именно новое выставление стоп заявки. И действительно, чтобы ее выставить (не имея какого-нибудь робота) придется основательно помучаться вводя разные циферки. Но если сделать функционал, что если кликнуть на треугольничек о сделке на графике (когда они отображаются) (можно еще в счетании с Ctrl или Шифр) и тащить мушку верх или вниз, то в зависимости от этого выставляется стоп заявка. А еще можно сделать допустим при Ctrl - ставится стоп, а при Shift - тейк профит. В общем можно сделать очень удобно для пользователей
Использование функции os.execute без показа окна windows cmd
Подскажите, а разве при этом само ДОС окно у вас запускается минимизированным?
как убрать DOS окно при работе функции os.execute?
Пользователь
Сообщений: Регистрация: 20.04.2016
18.11.2016 13:43:44
Уже видел обсуждение этого вопроса ранее, но там ни к чему толком не пришли.
Поднему этот же вопрос снова. Вопрос к разработчиким (возможно как пожелание к доработке): например мне нужно запустить проигрывание аудифайла Если я запускаю os.execute("vlc.exe имя_файла") то у меня запускается сначала досовское окно, а потом запускается окно самого VLC плеера. Почему так? Это так сказать не очень удобно. Кто-нибудь может подсказать, как эту проблему решить?
Для себя пока решил эту проблему так, чтобы это досовоское окно хотя бы исчезало сразу. Выполняю команду os.execute("start vlc.exe имя_файла") В этом случае окно дос запускается, запускает VLC в отдельном окне, и само ДОС окно закрывается.
dofile()
Пользователь
Сообщений: Регистрация: 20.04.2016
18.11.2016 13:36:56
Здравствуйте. Подниму эту тему, потому что озадачился этой же проблемой. Можно ли как-то из одного скрипта, запустить другой, но так, чтобы его работа выполнялась аналогично тому, как если бы мы его запустили из панели ЛуаСкриптов? Т.е. полностью независимо от запускающего его скрипта и полностью со своими переменными.
7.5.0 несколько пожеланий
Пользователь
Сообщений: Регистрация: 20.04.2016
17.11.2016 18:58:54
1) очень поддерживаю! в одной кнопке стало очень неудобно. Уж меню пока еще не очень загружено. 2) отвечу за разработчиков - шаблон можно удалить - когда начинаешь вводить фигуру, и если зайти в выбор шаблона, то справа есть крестик, для удаления.
Можно ли убрать совсем или изменить ширину столбика с номером строк в таблице на экране?
Пользователь
Сообщений: Регистрация: 20.04.2016
16.11.2016 12:51:18
зарегистрируйте пожалуйста! А заодно тогда и возможность убрать заголовок столбиков. Он часто тоже не нужен, а место под него пропадает
Можно ли убрать совсем или изменить ширину столбика с номером строк в таблице на экране?
Пользователь
Сообщений: Регистрация: 20.04.2016
16.11.2016 10:56:48
Здравствуйте!
При создании своей таблицы средствами QLUA можно менять ширину столбиков, всех кроме того, в котором будет писаться номер строки. Однако этот номер строки зачастую совсем не нужен, а занимает приличное количество места. Подскажите, можно ли как-то изменить его ширину? В частности до нуля. Заранее спасибо.
Вопрос к разработчикам: Вам не стыдно?
Пользователь
Сообщений: Регистрация: 20.04.2016
16.11.2016 08:41:00
мне кажется таких пользователей можно сразу банить )
Толщина рамок у окон в QUIK - решение проблемы и просьба доработки
Пользователь
Сообщений: Регистрация: 20.04.2016
16.11.2016 08:01:35
Для тех, кто не хочет ждать реализации моей просьбы, решение проблемы оказалось очень простым. Качаете программу твикер для винды - winaerotweaker Можно скачать отсюда Там меняете толщину рамок на "ноль"
Толщина рамок у окон в QUIK - решение проблемы и просьба доработки
Пользователь
Сообщений: Регистрация: 20.04.2016
16.11.2016 07:58:12
Невооруженным взглядом видно, что толщина границ окон сильно выросла, и занимает чудовищное количество места. Сегодня я наконец поборол эту проблему, за счет изменения параметров Windows 10, влияющих на толщину окон. Я понимаю желание разработчиков Квика использовать некоторые значения из свойств Windows, но подумайте каково пользователям, которые настроили терминал идеально под себя, а потом ставят другую винду, и видят дикую несуразицу. Более того, если приходится переключаться с одной винды на другую (а в переходный период это часто случается), невозможно иметь общие настройки. Одним словом просьба к разработчикам, хранить все настройки окон в файлах *.wnd и не использовать свойства операционной системы. В дополнение, если уж кто-то будет просить "широкие рамки", в чем я сильно сомневаюсь, то можно сделать такую опцию в настройках терминала.
Толщина рамок у окон в QUIK - решение проблемы и просьба доработки
Пользователь
Сообщений: Регистрация: 20.04.2016
16.11.2016 07:52:03
Толщина рамок у окон в QUIK - решение проблемы и просьба доработки
Пользователь
Сообщений: Регистрация: 20.04.2016
16.11.2016 07:50:47
[URL=]
Толщина рамок у окон в QUIK - решение проблемы и просьба доработки
Пользователь
Сообщений: Регистрация: 20.04.2016
16.11.2016 07:50:27
Затем я поставил Windows 10 на этот же самый компьютер, с тем же самым экраном и тем же самым разрешением. [URL=]
Толщина рамок у окон в QUIK - решение проблемы и просьба доработки
Пользователь
Сообщений: Регистрация: 20.04.2016
16.11.2016 07:48:11
Хочу обратиться к разработчикам с просьбой убрать "глюк", или сделать его настраиваемым. Речь пойдет о ширине рамок у окон в квике. Дело в том, что раньше я работал на Windows 7. И там окна выглядели вот так
Нужно проверить скрипт Луа, Есть скрипт, писал его знакомый. Надо проверить его на работоспособность.
Пользователь
Сообщений: Регистрация: 20.04.2016
11.11.2016 03:17:28
Написал в личку
рисование - прямоугольник
Пользователь
Сообщений: Регистрация: 20.04.2016
11.11.2016 03:11:47
Спасибо!
Ошибка оператора string.find
Пользователь
Сообщений: Регистрация: 20.04.2016
11.11.2016 02:56:03
Ух ты! Спасибо большое!
Ошибка оператора string.find
Пользователь
Сообщений: Регистрация: 20.04.2016
10.11.2016 19:07:39
Здравствуйте!
Столкнулся с такой проблемой. У меня есть служебная переменная (пусть ее имя будет А) которая может принимать значение "ххх UD" или "ххх UD+" Где ххх - может быть любой текст. В зависимости от наличия знака "+" будут совершаться разные действия. И тут возникает ошибка в операторе if с таким условием:
if string.find(A, "UD+") ~= nil then данный оператор, всегда возвращает номер найденного вхождения, независимо от того, какое значение имеет переменная А, с плюсом или нет. Ощущение, ощущение, что при поиске, этот плюс просто отбрасывается.
Большая просьба исправить данную ошибку в операторе, ведь + это такой же символ как и все остальные. Я думаю подобная проблема и с другими символами. Я пробовал делать так: if string.find(A, "UD\+") ~= nil then но это не помогает.
Линия открытия рынка, Линия открытия рынка
Пользователь
Сообщений: Регистрация: 20.04.2016
09.11.2016 18:06:13
Почему-то не на всех копиях квика заработало, поэтому еще переписал:
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
Линия открытия рынка, Линия открытия рынка
Пользователь
Сообщений: Регистрация: 20.04.2016
09.11.2016 17:20:15
Т.к. идея понравилась, подправил предложенный скрипт. Вот результат:
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
Линия открытия рынка, Линия открытия рынка
Пользователь
Сообщений: Регистрация: 20.04.2016
09.11.2016 16:58:36
Приведенный индикатор почему-то не работает - выдает сплошную линию (вернее из точек) на цене НОЛЬ!
Как включить файл в луа?, Есть ли в Луа аналог директивы include из С
Пользователь
Сообщений: Регистрация: 20.04.2016
09.11.2016 16:48:07
Я давно вынес общие процедуры во внешний файл,и в самом начале каждого скрипта импортирую его:
dofile (getScriptPath().."\\library.lua")
все что описано в нем, в том числе и переменные становятся глобальными.
Как занести в переменную результат последний зделки?
Пользователь
Сообщений: Регистрация: 20.04.2016
08.11.2016 20:49:17
нужно описать процедуру
function OnTrade(trade)
Она будет выполняться в случае совершения любой сделки. В качестве параметра trade будет передаваться переменная типа таблица с этой сделкой. Там уже можно найти поля цены, количества и т.д.