Установка отметок на графике через скрипт

Страницы: 1
RSS
Установка отметок на графике через скрипт
 
Здравствуйте.
Хочу для удобства визуализации сделать так, чтобы скрипт QLUA отмечал на графике точки по нужным мне параметрам.
Т.е. например если произошло пересечение средних - чтобы на графиках появилась соответствующая отметка.

Вопрос - как это можно сделать и можно ли вообще?
Или где можно почитать об этом поподробнее?
 
Добрый день,

Добавить метку на график по нужным условиям можно с помощью функции "AddLabel". Более подробно о функции можно ознакомиться в документации из раздела "Функции для работы с метками":
http://arqatech.com/upload/iblock/022/quik_lua.zip
Также, примеры функций расчета индикаторов терминала QUIK можно скачать по ссылке:
ftp://ftp.quik.ru/public/INDICATORS.zip
 
Установил параметры метки следующим образом:

label={
TEXT="Тарам",
FONT_HEIGHT=25,
R=255,
G=255,
B=0,
Yvalue=0,
datetime=0
}

Пытаюсь поставить метку по условию:

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
 
Цитата
Егор Масалкин написал:
Ругается на label.Yvalue=t1.close; мол attempt to index global 't1' (a number value)
Значение  label.Yvalue должно являться строкой, в то время как у Вас возвращается число.
 
Цитата
Stanislav Tvorogov написал:
Цитата
Егор Масалкин   написал:
Ругается на 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 как к таблице, на что он и ругается.
 
Цитата
SDL написал:
Цитата
Stanislav Tvorogov   написал:
Цитата
Егор Масалкин   написал:
Ругается на 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-координата тоже...  
 
Не знаю как в последних версиях квика, но раньше эти скриптовые метки жутко тормозили терминал.
 
Цитата
lergen написал:
Не знаю как в последних версиях квика, но раньше эти скриптовые метки жутко тормозили терминал.
И всё-таки, можете подсказать по теме? Что я сделал не так, что метки у меня не отображаются?
 
Цитата
Егор Масалкин написал:
Цитата
lergen   написал:
Не знаю как в последних версиях квика, но раньше эти скриптовые метки жутко тормозили терминал.
И всё-таки, можете подсказать по теме? Что я сделал не так, что метки у меня не отображаются?
Добрый день,

Просьба прислать полный код исправленного скрипта.
 
Если я ничего не путаю, то метки всегда ставятся только за счет какого-то графического файлика, который собственно и отображается на графике.

А у вас этог параметр IMAGE_PATH не указан
 
Переделал скрипт.
Теперь он должен возле каждого пересечения графика ставить метку Icon.jpg, которая представляет собой оранжевый квадратик, и считает количество таких пересечений.
Вот только количество пересечений он считает и выводит, а метки на графике не появляются... Что я делаю не так?

label={
text="Тарам";
IMAGE_PATH=getScriptPath().."/Icon.jpg";
FONT_HEIGHT=25,
Yvalue=0,
date=0;
time=0;
}

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
 
Здравствуйте,
В свечках нет таких параметров date и time (см документацию)
Там есть только параметр datetime
 
Хм, однако, в метках есть только параметры date и time... как можно datetime разделить на date и time, если у datetime отдельно секунды, часы, минуты и прочее, а у метки эти параметры объединены?
 
Цитата
Егор Масалкин написал:
если у datetime отдельно секунды, часы, минуты и прочее, а у метки эти параметры объединены?

Взять отдельно секунды, часы, минуты и прочее и объединить
 
Цитата
Sergey Gorokhov написал:
Цитата
Егор Масалкин   написал:
если у datetime отдельно секунды, часы, минуты и прочее, а у метки эти параметры объединены?
Взять отдельно секунды, часы, минуты и прочее и объединить
И по какому принципу они объединяются?
Вроде простейший инструмент, но почему-то требуется множество дополнительных действий чтобы поставить метку на график...
 
Цитата
Егор Масалкин написал:
Цитата
Sergey Gorokhov   написал:
Цитата
Егор Масалкин   написал:
если у datetime отдельно секунды, часы, минуты и прочее, а у метки эти параметры объединены?
Взять отдельно секунды, часы, минуты и прочее и объединить
И по какому принципу они объединяются?
Вроде простейший инструмент, но почему-то требуется множество дополнительных действий чтобы поставить метку на график...

Формат времени для меток это строка HHMMSS.
datetime это таблица содержащая отдельно часы минуты и секунды.
Вам нужно их взять из этой таблицы и просто объединить как строку.
time = x.datetime.hour..x.datetime.min..x.datetime.sec

Почему так, объясняется тем что метки появились задолго до появления Lua в терминале.
И тек исторически сложилось, что у них формат даты времени у них именно такой.
Возможно, в будущем это как-то изменится, но сейчас работает именно так.
Страницы: 1
Читают тему
Наверх