Здравствуйте. Хочу для удобства визуализации сделать так, чтобы скрипт QLUA отмечал на графике точки по нужным мне параметрам. Т.е. например если произошло пересечение средних - чтобы на графиках появилась соответствующая отметка.
Вопрос - как это можно сделать и можно ли вообще? Или где можно почитать об этом поподробнее?
QUIK clients support
Сообщений: Регистрация: 27.01.2015
25.10.2016 07:21:47
Добрый день,
Добавить метку на график по нужным условиям можно с помощью функции "AddLabel". Более подробно о функции можно ознакомиться в документации из раздела "Функции для работы с метками":
Также, примеры функций расчета индикаторов терминала QUIK можно скачать по ссылке:
for v=2,N1,1 do t1=getCandlesByIndex("MVAs",0, v-1, 1)[0].close; t2=getCandlesByIndex("MVAl",0, v-1, 1)[0].close; t11=getCandlesByIndex("MVAs",0, v-2, 1)[0].close; t22=getCandlesByIndex("MVAl",0, v-2, 1)[0].close; if (t1>t2) and (t11<t22) then D=getCandlesByIndex("MVAl",0, v-1, 1)[0].datetime; t2d=D.day; t2h=D.hour; label.Yvalue=t1.close; label.datetime=D; AddLabel("MVAl",label) end end
Ругается на label.Yvalue=t1.close; мол attempt to index global 't1' (a number value)
Что это значит? Версия 7.2.1.5
QUIK clients support
Сообщений: Регистрация: 27.01.2015
25.10.2016 13:03:13
Цитата
Егор Масалкин написал: Ругается на label.Yvalue=t1.close; мол attempt to index global 't1' (a number value)
Значение label.Yvalue должно являться строкой, в то время как у Вас возвращается число.
Егор Масалкин написал: Ругается на label.Yvalue=t1.close; мол attempt to index global 't1' (a number value)
Значение label.Yvalue должно являться строкой, в то время как у Вас возвращается число.
Рискну предположить иное:
t1=getCandlesByIndex("MVAs",0, v-1, 1)[0].close
Здесь взяли поле close свечи, t1 - число.
label.Yvalue=t1.close;
Здесь еще раз пытаетесь взять поле close, обращаясь к t1 как к таблице, на что он и ругается.
Да, и правда косячнул с полями объекта. Поправил, компилируется нормально, но на графике метки не выставляются =_= Как они вообще должны выглядеть? Почему их не видно? Вроде и Х-координата задана (datetime), Y-координата тоже...
Пользователь
Сообщений: Регистрация: 03.02.2015
27.10.2016 16:50:36
Не знаю как в последних версиях квика, но раньше эти скриптовые метки жутко тормозили терминал.
Пользователь
Сообщений: Регистрация: 19.10.2016
27.10.2016 18:04:40
Цитата
lergen написал: Не знаю как в последних версиях квика, но раньше эти скриптовые метки жутко тормозили терминал.
И всё-таки, можете подсказать по теме? Что я сделал не так, что метки у меня не отображаются?
lergen написал: Не знаю как в последних версиях квика, но раньше эти скриптовые метки жутко тормозили терминал.
И всё-таки, можете подсказать по теме? Что я сделал не так, что метки у меня не отображаются?
Добрый день,
Просьба прислать полный код исправленного скрипта.
Пользователь
Сообщений: Регистрация: 20.04.2016
29.10.2016 21:54:41
Если я ничего не путаю, то метки всегда ставятся только за счет какого-то графического файлика, который собственно и отображается на графике.
А у вас этог параметр IMAGE_PATH не указан
Пользователь
Сообщений: Регистрация: 19.10.2016
16.11.2016 09:54:24
Переделал скрипт. Теперь он должен возле каждого пересечения графика ставить метку Icon.jpg, которая представляет собой оранжевый квадратик, и считает количество таких пересечений. Вот только количество пересечений он считает и выводит, а метки на графике не появляются... Что я делаю не так?
function SetLabel(x) label.date=x.date; label.time=x.time; label.Yvalue=x.close; AddLabel("MVAl",label); end
s=0; l=0;
function OnInit()
N1=getNumCandles("MVAs")
for v=2,N1,1 do t=getCandlesByIndex("MVAs",0, v, 1)[0]; t1=getCandlesByIndex("MVAs",0, v-1, 1)[0].close; t2=getCandlesByIndex("MVAl",0, v-1, 1)[0].close; t11=getCandlesByIndex("MVAs",0, v-2, 1)[0].close; t22=getCandlesByIndex("MVAl",0, v-2, 1)[0].close; if (t1>t2) and (t11<t22) then SetLabel(t); s=s+1; end if (t1<t2) and (t11>t22) then SetLabel(t); l=l+1; end end
message(tostring(s).." "..tostring(l)); end
Пользователь
Сообщений: Регистрация: 23.01.2015
16.11.2016 10:20:34
Здравствуйте, В свечках нет таких параметров date и time (см документацию) Там есть только параметр datetime
Пользователь
Сообщений: Регистрация: 19.10.2016
16.11.2016 10:57:28
Хм, однако, в метках есть только параметры date и time... как можно datetime разделить на date и time, если у datetime отдельно секунды, часы, минуты и прочее, а у метки эти параметры объединены?
Пользователь
Сообщений: Регистрация: 23.01.2015
16.11.2016 11:04:36
Цитата
Егор Масалкин написал: если у datetime отдельно секунды, часы, минуты и прочее, а у метки эти параметры объединены?
Взять отдельно секунды, часы, минуты и прочее и объединить
Егор Масалкин написал: если у datetime отдельно секунды, часы, минуты и прочее, а у метки эти параметры объединены?
Взять отдельно секунды, часы, минуты и прочее и объединить
И по какому принципу они объединяются? Вроде простейший инструмент, но почему-то требуется множество дополнительных действий чтобы поставить метку на график...
Егор Масалкин написал: если у datetime отдельно секунды, часы, минуты и прочее, а у метки эти параметры объединены?
Взять отдельно секунды, часы, минуты и прочее и объединить
И по какому принципу они объединяются? Вроде простейший инструмент, но почему-то требуется множество дополнительных действий чтобы поставить метку на график...
Формат времени для меток это строка HHMMSS. datetime это таблица содержащая отдельно часы минуты и секунды. Вам нужно их взять из этой таблицы и просто объединить как строку. time = x.datetime.hour..x.datetime.min..x.datetime.sec
Почему так, объясняется тем что метки появились задолго до появления Lua в терминале. И тек исторически сложилось, что у них формат даты времени у них именно такой. Возможно, в будущем это как-то изменится, но сейчас работает именно так.