Добрый день! Скажите, а можно ли с помощью луа на графике нарисовать горизонтальную линию, а потом её двигать мышкой вверх вниз... И чтобы скрипт, который её нарисовал, понимал, что линия передвинулась туда-то.
Вообще это реально средствами луа сделать без длл, корутин и прочих приблуд?
Добрый день! Скажите, а можно ли с помощью луа на графике нарисовать горизонтальную линию, а потом её двигать мышкой вверх вниз... И чтобы скрипт, который её нарисовал, понимал, что линия передвинулась туда-то.
Вообще это реально средствами луа сделать без длл, корутин и прочих приблуд?
А где это Вы в LUA видели операторы для рисования чего-нибудь и без DLL?
Пользователь
Сообщений: Регистрация: 04.03.2015
16.09.2015 19:58:21
Михаил, спасибо, понял.
Николай, думаю по вопросу понятно что я не специалист по луа. И что в нем может быть в квике или не может мне не известно. Ведь нет исчерпывающей документации от авторов квика. Такой документации, по которой можно выяснить ВСЕ что можно сделать на луа в квике.
Для выводов на график нашел только метки, предположил, что вместо текста можно и линию нарисовать. Но это больше к квику, скорее будет относиться, чем к самому луа.
Михаил, а можете дать наводку где копать для моей задачи? Реально указать прямо цену как координату для линии на чарте?
Пользователь
Сообщений: Регистрация: 30.01.2015
16.09.2015 20:01:57
Я могу присоветовать только один путь. Использование вместо инструмента рисования горизонтальной линии самомписного индикатора. Если такой путь устраивает - тогда сделать можно. Мышкой двигать этот уровень будет можно и задавать точное значение тоже. Но это будет не столь удобно как хотелось бы.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.09.2015 21:00:33
Индикатор:
Код
Settings = {
Name = 'HLine',
Value = 0,
line = {
{
Name = 'HLine',
Type = TYPE_LINE,
Width = 2
}
}
}
function Init()
return 1
end
function OnCalculate(index)
return Settings.Value
end
Перемещение линии через настройки индикатора. Хоть мышкой двигать нельзя, но можно задать точный уровень цены, что удобнее стандартной линии. Значение линии можно считывать в своём скрипте.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 04.03.2015
16.09.2015 21:46:44
Спасибо большое! Сейчас поколдую с метками и перейду к индикатору. Никогда ими не занимался, разбираться надо будет.. Спасибо!
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.09.2015 22:25:45
Можно создать метку в виде горизонтальной линии. И в цикле опрашивать состояние метки функцией GetLabelParams, и проверять, не изменился ли параметр YVALUE. Тогда можно будет двигать линию мышкой.
Но сразу о багах: 1) метку нужно обязательно создавать без подписи (TEXT), иначе она будет визуально позиционироваться не там, где нужно, и при масштабировании графика смещаться; 2) функция GetLabelParams возвращает таблицу с названиями параметров в нижнем регистре, тогда как эти параметры в функции AddLabel задаются в верхнем регистре; 3) функция GetLabelParams возвращает значения всех параметров в строковом виде, несмотря на то, что часть параметров типа number.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 04.03.2015
16.09.2015 22:40:30
Старатель, спасибо! Все это сейчас понял кроме того что строковые данные) Зашел чтобы отписаться что все решил метками, а вы уже разложили мое решение) И с нижним регистром разобрался. И что текста не надо)) И линию нарисовал. В общем, победил. Линия есть, позиционируется точно, двигается мышкой, никаких длл и прочего. Спасибо!!!
Пользователь
Сообщений: Регистрация: 04.03.2015
16.09.2015 22:43:46
один мааааленький косяк. Координата меняется сразу, не ждет отпускания мышки. Может и не косяк, но.. как то не нравится мне это. дернется рука и.. нечего дергаться)
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.09.2015 22:49:54
Цитата
Viktor MMM пишет: Координата меняется сразу, не ждет отпускания мышки.
Это да, есть такое...
Цитата
Viktor MMM пишет: Линия есть, позиционируется точно
Что значит "точно"? Вот у меня "точно" никак не получается: с шагом цены не совпадает ))
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 04.03.2015
16.09.2015 23:07:39
аааа, ну шаг я не проверял. По отпусканию мыши есть мысли? Или придется дублировать хоткеем перенос?
Объясню. Проблемы шага цены, рывков и прочего решились бы событием "метка поставлена". Тогда программно метку можно было б привязать к шагу. Ну и инициализировать изменение. Если мышь не доступна, то на ум идет установить хоткей. Нажимаешь его скрипт ждет отпускания, чтобы инициализировать новый уровень/уровни линий. Есть такой функционал? вроде какие то события были.. надо поизучать.
Пользователь
Сообщений: Регистрация: 04.03.2015
16.09.2015 23:15:58
или проще. Галку снял в табл, линия стала пунктиром. переставил, галку поставил, линия стало жирной и инициализировалась.
Пользователь
Сообщений: Регистрация: 30.01.2015
17.09.2015 00:21:27
Цитата
Viktor MMM пишет: аааа, ну шаг я не проверял. По отпусканию мыши есть мысли? Или придется дублировать хоткеем перенос?
Объясню. Проблемы шага цены, рывков и прочего решились бы событием "метка поставлена". Тогда программно метку можно было б привязать к шагу. Ну и инициализировать изменение. Если мышь не доступна, то на ум идет установить хоткей. Нажимаешь его скрипт ждет отпускания, чтобы инициализировать новый уровень/уровни линий. Есть такой функционал? вроде какие то события были.. надо поизучать.
Обрабатывать нажатие мышки через winAPI
Пользователь
Сообщений: Регистрация: 30.01.2015
17.09.2015 00:25:46
Цитата
Viktor MMM пишет: или проще. Галку снял в табл, линия стала пунктиром. переставил, галку поставил, линия стало жирной и инициализировалась.
И утром завтрак в постель принесла? ) Можно конечно, если это ОЧЕНЬ хочется. Два рисунка - тонкая и толстая линия. Через winAPI читаем нажатие мышки, меняется лэйбл, новый не только тоньше, но и другого цвета. Отпускаем мышку, на новой позиции рисунок подменяется прежним. Только результат не стоит труда.
Viktor MMM пишет: Линия есть, позиционируется точно
Что значит "точно"? Вот у меня "точно" никак не получается: с шагом цены не совпадает ))
Корректировка полученных координат по шагу цены и возврат лейблу скорректированных.
Пользователь
Сообщений: Регистрация: 04.03.2015
17.09.2015 01:06:48
Я не знаю как через WinAPI обработать мышь. Если б знал такие вещи не искал бы решения без длл и прочего. Но если предположить, что как-то получится считать, то алгоритм будет такой?: скрипт уловил что меняется координата метки. Кнопка мышки зажата. Жду пока отпустится. Отпустилась. Пускаем в работу новые координаты. Так?
Пользователь
Сообщений: Регистрация: 04.03.2015
17.09.2015 01:10:33
Посмотрел. Чтобы WinAPI обработать, надо подключать библиотеку. А на сколько я понял, подключение библиотеки всегда риск краха квика. Потому и стараюсь пусть криво, но без них.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.09.2015 08:49:10
Тогда создаёте окно CreateWindow, рисуете в нём нужные кнопочки и отслеживаете нажатие SetTableNotificationCallback.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 04.03.2015
17.09.2015 10:06:07
Сергей, а вы сами пользуетесь подключаемыми библиотеками? Может, зря я так к ним отношусь? Еще смущает то, что у их переделывают под квик, судя по аннотациям. Что-то там прописывают или еще что. А я не разбираюсь, знать не знаю что в ней. И думается, что не безопасно брать, качать и подключать. В данном случае, конечно, событие мыши и не в окне моей таблицы было бы предпочтительнее использовать. Я ведь правильно понимаю, что SetTableNotificationCallback будет работать только тогда, когда событие произошло при нахождении курсора в границах созданной таблицы?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.09.2015 10:19:04
В рабочих скриптах, которые должны работать автономно весь день, стараюсь не использовать сторонние библиотеки ввиду их возможной нестабильной работы с QUIK (часто при выходе новой версии что-то ломается).
Цитата
Viktor MMM пишет: Я ведь правильно понимаю, что SetTableNotificationCallback будет работать только тогда, когда событие произошло при нахождении курсора в границах созданной таблицы?
Только, когда окно таблицы активно.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 04.03.2015
17.09.2015 10:26:56
Понял, спасибо. Поэкспериментирую. Получается, что в момент нажатия на линию, окно могло быть активным. Но в момент отпускания, скорее активным станет окно графика. Да, надо попробовать. Спасибо!
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.09.2015 10:56:05
Проще сделать не хоткей, а именно кнопочку "Готово", при нажатии которой будут применены новые координаты линии (т.к. в любом случае после смещения линии надо будет кликать в окно таблицы).
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 04.03.2015
17.09.2015 11:01:42
Получается так. Если пошло изменение полосы, то заявки снимаются и она становится неактивной. Нажали готово - и работа подхватывается Как то так. Конечно, блин, с контролем мышки было б шикарно. Порылся в инете, w32 не имеет в составе функций работы с мышью.
Пользователь
Сообщений: Регистрация: 02.07.2015
17.09.2015 11:03:30
Цитата
Viktor MMM пишет: Порылся в инете, w32 не имеет в составе функций работы с мышью.
w32 - это Win32API? или что?
Пользователь
Сообщений: Регистрация: 04.03.2015
17.09.2015 11:08:45
нашел.
Пользователь
Сообщений: Регистрация: 30.01.2015
17.09.2015 16:02:56
Цитата
Viktor MMM пишет: Получается так. Если пошло изменение полосы, то заявки снимаются и она становится неактивной. Нажали готово - и работа подхватывается Как то так. Конечно, блин, с контролем мышки было б шикарно. Порылся в инете, w32 не имеет в составе функций работы с мышью.
Ну так "поройтесь в инете" на предмет именно winAPI, вот тут например
и добавьте в w32, библиотека вроде в исходном коде есть по вашей ссылке.
Вы точно готовы выходить за рамки справки по QLUA с таким багажом?:
Цитата
Viktor MMM пишет: Я не знаю как через WinAPI обработать мышь. Если б знал такие вещи не искал бы решения без длл и прочего.
Цитата
Viktor MMM пишет:
Николай, думаю по вопросу понятно что я не специалист по луа. И что в нем может быть в квике или не может мне не известно.
Цитата
Viktor MMM пишет: Посмотрел. Чтобы WinAPI обработать, надо подключать библиотеку. А на сколько я понял, подключение библиотеки всегда риск краха квика.
Пользователь
Сообщений: Регистрация: 04.03.2015
17.09.2015 16:24:30
Не знаю что и ответить. Получается, не готов. Да и подменить метку во время перетаскивания не получается. Так что необходимости в обработке клика отпускания нет.
Пользователь
Сообщений: Регистрация: 04.03.2015
17.09.2015 16:39:11
Хотяяя))) может и есть. Я понял что готового решения нет. Лопатить длл-ки мне не по зубам. Чужую, из непроверенного источника так сходу побоюсь ставить.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.09.2015 16:47:26
Как вариант: если скрипт обнаружил, что метка сместилась, задать некий таймаут ожидания полного перемещения метки, после окончания которого считать, что метка установлена на нужном уровне цены.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 04.03.2015
17.09.2015 17:09:37
придется кликать по таблице. Сдвинулась - деактивирован уровень. Кликнул на ячейку - отлипло. Таймауты может и внесу.
Пользователь
Сообщений: Регистрация: 30.01.2015
17.09.2015 21:48:42
, Удивляете Вы меня, то говорите, что не программист и тут же беретесь за WinApi. Это как не умея водить авто записаться на участие в формуле1. Вам же сказали , что сделать нельзя.
Пользователь
Сообщений: Регистрация: 31.01.2015
17.09.2015 22:15:02
Цитата
Старатель пишет: Можно создать метку в виде горизонтальной линии. метку нужно обязательно создавать без подписи (TEXT)
А как без текста сделать метку в виде линии? Использовать файл с изображением?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.09.2015 22:41:04
Ну да, графическую метку. Потому что текстовую линию у меня не получилось расположить строго по заданной цене.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 04.03.2015
17.09.2015 23:35:12
paint в помощь, bmp или gif и красота.
Пользователь
Сообщений: Регистрация: 04.03.2015
20.09.2015 20:02:00
Если надо рядом с линией и текст написать, то способ тоже есть.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.09.2015 21:32:46
Две метки?
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 04.03.2015
20.09.2015 21:38:01
Да. Вторую по тем-же координатам. Только текстовую. И таскать её за первой. Пока все гладко работает. Понятно что коряво, но приемлемо.
Пользователь
Сообщений: Регистрация: 04.03.2015
01.10.2015 00:12:47
Вопрос появился. Как менять параметры метки? Через SetLabelParams вижу только то, что метка перестает передвигаться вручную. Я менял файл отображение метки. Отображение не изменилось)). Если удалять и ставить новую, то понятно все работает. Зачем тогда SetLabelParams? (True выдает по результату замены)
Хотелось бы, конечно, поменять параметр метки и увидеть на графике результат этих изменений без сокращения дальнейшего функционала. Это вообще возможно?
Viktor MMM пишет: Я менял файл отображение метки. Отображение не изменилось)).
Попробуйте использовать только bmp-файл: с gif бывают проблемы. Также поиграйте с прозрачностью метки (TRANSPARENCY): при замене файла прозрачной становится вся метка полностью.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 04.03.2015
01.10.2015 10:06:06
У меня bmp. Попробую поиграть прозрачностью. Но мне в будущем надо будет менять метку на пунктирную, например. И прозрачность не поможет.
А как вы используете SetLabelParams? Ведь по моему опыту получается, что эта функция не работает. Метка не изменяется, более того становится не перетаскиваемой руками. Что-то не так делаю? Как вы меняете метку по ходу жизни скрипта?
Я думал, что если есть метка и я прописываю SetLabelParams, то после этой функции, если результат true, метка на графике преобразуется с учетом внесенных изменений. Может, разработчики ответят для чего SetLabelParams и как её использовать?
Пользователь
Сообщений: Регистрация: 04.03.2015
01.10.2015 13:49:01
С изменениями разобрался. Осталось самое главное. Почему после применения SetLabelParams метку не возможно передвинуть вручную? Это баг или я не правильно использую? Разарлботчики, ответьте, пожалуйста.
Пользователь
Сообщений: Регистрация: 30.01.2015
17.11.2015 11:32:36
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 03.02.2015
07.12.2015 11:48:59
Простите за детский вопрос. Не получается вставить метку на график:
Settings = {
Name = 'HLine' ,
Value = 0 ,
line = {
{
Name = 'HLine' ,
Type = TYPE_LINE,
Width = 2
}
}
}
function Init ()
return 1
end
function OnCalculate (index)
return Settings.Value
end
Перемещение линии через настройки индикатора. Хоть мышкой двигать нельзя, но можно задать точный уровень цены, что удобнее стандартной линии. Значение линии можно считывать в своём скрипте.
Добрый день
Могу передавать индикатору (на примере горизонтальной линии) не только значение самой линии, но и ее цвет?
вроде того:
Код
function OnCalculate(index)
Value = 74850.0
Color = RGB(0, 128, 0)
return Value, Color
end