Здравствуйте. Хочу для удобства визуализации сделать так, чтобы скрипт QLUA отмечал на графике точки по нужным мне параметрам. Т.е. например если произошло пересечение средних - чтобы на графиках появилась соответствующая отметка.
Вопрос - как это можно сделать и можно ли вообще? Или где можно почитать об этом поподробнее?
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)
Егор Масалкин написал: Ругается на 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-координата тоже...
Переделал скрипт. Теперь он должен возле каждого пересечения графика ставить метку 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
Хм, однако, в метках есть только параметры date и time... как можно datetime разделить на date и time, если у datetime отдельно секунды, часы, минуты и прочее, а у метки эти параметры объединены?
Егор Масалкин написал: если у datetime отдельно секунды, часы, минуты и прочее, а у метки эти параметры объединены?
Взять отдельно секунды, часы, минуты и прочее и объединить
И по какому принципу они объединяются? Вроде простейший инструмент, но почему-то требуется множество дополнительных действий чтобы поставить метку на график...
Егор Масалкин написал: если у datetime отдельно секунды, часы, минуты и прочее, а у метки эти параметры объединены?
Взять отдельно секунды, часы, минуты и прочее и объединить
И по какому принципу они объединяются? Вроде простейший инструмент, но почему-то требуется множество дополнительных действий чтобы поставить метку на график...
Формат времени для меток это строка HHMMSS. datetime это таблица содержащая отдельно часы минуты и секунды. Вам нужно их взять из этой таблицы и просто объединить как строку. time = x.datetime.hour..x.datetime.min..x.datetime.sec
Почему так, объясняется тем что метки появились задолго до появления Lua в терминале. И тек исторически сложилось, что у них формат даты времени у них именно такой. Возможно, в будущем это как-то изменится, но сейчас работает именно так.