Settings=
{
Name = "AAAA",
Smooth=10,
line =
{
{
Name = "Hi",
Color = RGB(255, 0, 0),
Type = TYPE_LINE,
Width = 2
}
}
}
function Init()
return 1
end
function write_name(p)
file=io.output("d:\\name1.ini") -- getScriptPath()..
d=file:write(p)
file:close()
end
function OnCalculate(index)
local ur=0
local param=tostring(Settings.line.Name)
if tonumber(T(index).day)==15 then
write_name(param)
end
return ur
end
не могу получить имя линии. получение имени индикатора Settings.Name вернет "AAAA" по идеии Settings это массив и должно быть Settings["line"][1]["Name"] но это не работает возвращает nil Господа, подскажите как получить название линии?
поставил в 32 строке local param=tostring(Settings.line[1].Name) все равно возвращает ошибку: ...\LuaIndicators\file03.lua:32: attempt to index field 'line' (a nil value)
Сергей Радченко пишет: поставил в 32 строке local param=tostring(Settings.line[1].Name) все равно возвращает ошибку: ...\LuaIndicators\file03.lua:32: attempt to index field 'line' (a nil value)
Очевидно, на этот вопрос должны ответить сотрудники техподдержки QUIK
Надо делать так, как надо. А как не надо - делать не надо.
Забавные очередные "пасхальные яйца" от разработчиков:))
Может, существуют ещё какие-то "моменты" в скриптах индикаторов, которые не работают в одном месте и работают в другом??? Или, - как всегда: "... спрашивайте, интересуйтесь" и... не забывайте терять на этом свои деньги и время??? :))))
Добрый день. Действительно, параметры линий обратно в скрипт не передаются. Для некоторых индикаторов это просто бессмысленно и затратно по ресурсам. мы обязательно отразим этот момент в документации.
я думаю, можно зарегистрировать такое пожелание: вместо постоянных "косметических" апдейтов квика и ещё меньших серьёзных апдейтов QLUA, прошу: зарегистрировать пожелание на составление действительно всеобъемлющей документации бо как многие вопросы и ошибки возникают из-за элементарной скудности информации.
Michael Bulychev пишет: Да, обратно возвращаются только те параметры, которые отображаются в диалоге настроек индикатора.
Вроде бы Ваше утверждение не верно. Так как параметры line в диалоге отображается а обратно не возвращаются. Т е не возращаются любые параметры которые таблицы. ВО КАК!
Пока от индикаторов еще не отказался, но собирался поставить временные "костыли" в целях противодействия бессмысленному перерасчету всех индикаторов, например, при безобидной смене цвета линии какого-либо индикатора. У меня очень "тяжелые" индикаторы (процессор) и их количество на одном графике может достигать нескольких десятков. И, в частности, собирался опереться на значения параметров. Тоже столкнулся с аналогичной проблемой. Похоже, у разработчиков нет внятной идеологии работы OnCalculate - сколько раз и в каких случаях надо использовать полный перерасчет индикаторов и надо ли вообще его делать, да еще ошибки реализации. Но, по ощущениям, не все так драматично. Вот пример простого индикатора
Код
Settings =
{
Name = "!!ind3",
line =
{
{
Name = "ind3",
Color = RGB(0,0,255),
Type = TYPE_LINE,
Width = 2
}
}
}
Init = function()
message("!!ind3: Init", 1)
GetName()
GetWidth()
return 1
end
function OnCalculate(index)
if index == 1 then
message("!!ind3: index=1", 1)
GetName()
GetWidth()
end
if index==Size()-1 then
message("!!ind3: index="..tostring(Size()-1),1)
end
return 180
end
function GetName()
message("!!ind3: Name="..Settings.Name, 1)
return
end
function GetWidth()
message("!!ind3: Width="..tostring(Settings.line[1].Width),1)
return
end
Рисуется одна горизонтальная линия. Контролирую вызов функции Init, приход первой свечки и приход предпоследней свечки. В двух местах выдаю выбранные из Settings имя индикатора и толщину линии индикатора. Протокол работы. Индикатор нормально добавился, получил все свечки и успешно выдал в протокол имя индикатора и толщину линии из функции Init и при получении первой свечки (строки 1-7 ), отрисовал прямую.. Затем я зашел в настройки индикатора и ничего не меняя выдал OK. Пошел перерасчет индикатора, при получении первой свечки имя индикатора было успешно выдано, а на доступе к толщине линии - облом. Оставшиеся свечки обработались нормально. Строки 8-11. Затем пошел второй перерасчет индикатора (сейчас это, как бы, норма) с тем же обломом. Строки 12-15. То, что индикатор смог один раз отработать нормально (ведь, могут же!), дает мне надежду, что разработчики возводят на себя поклеп. Нужно их пояснение.
Борис Гудылин написал: Затем пошел второй перерасчет индикатора (сейчас это, как бы, норма)
Когда два, а когда и три раза индикаторы пересчитываются. Вот код:
Скрытый текст
Код
Settings = {
Name = "Учимся считать",
Param = 0,
line = {{Name = 'Test'}}
}
message('[Body] Param=' .. Settings.Param )
function Init()
message('[Init] Param=' .. Settings.Param)
return 1
end
n = 0
function OnCalculate(index)
if index == 1 then
n = n + 1
message('[OnCalculate] ' .. tostring(index) .. ': Param=' .. Settings.Param .. '; расчёт ' .. n)
end
return nil
end
Чтобы задать сразу параметры индикатора, дабы избежать лишних пересчётов, делаю следующее: открываю "Редактирование настроек графика" -> Добавить -> Выбираю индикатор -> Добавить Далее в свойствах индикатора меняю значение параметра -> OK Не тут-то было. Вот результат:
Скрытый текст
Как видно, индикатор рассчитывается три раза (!), причём первый расчёт идёт со старым значением, но уже после нажатия на кнопку OK.
Предложения:
1. Исправьте ошибку с лишними пересчётами индикаторов при их добавлении или изменении.
2. Дайте доступ к чтению свойств линий из OnCalculate
Надо делать так, как надо. А как не надо - делать не надо.
ROBOBORO написал: Как вообще пользоваться Settings? В скрипте(не индикаторе) могу ли потестировать и понять как оно работает и что вообще позволяет делать?
Если скрипт не индикатор, то в нем таблица Settings ничем не отличается от любой другой таблицы.
Цитата
Старатель написал: 1. Исправьте ошибку с лишними пересчётами индикаторов при их добавлении или изменении.
Мы знаем об этой проблеме и уже работаем над ее устранением.
Цитата
Борис Гудылин написал: То, что индикатор смог один раз отработать нормально (ведь, могут же!), дает мне надежду, что разработчики возводят на себя поклеп. Нужно их пояснение.
Проблема изучается. Постараемся в ближайшее время дать ответ.
Sergey Gorokhov написал: ЦитатаБорис Гудылин написал: То, что индикатор смог один раз отработать нормально (ведь, могут же!), дает мне надежду, что разработчики возводят на себя поклеп. Нужно их пояснение. Проблема изучается. Постараемся в ближайшее время дать ответ.
В текущей реализации свойства линии доступны в OnCalculate только при добавлении индикатора. На основе Вашего обращения мы зарегистрировали пожелание на доработку.
Борис Гудылин, Добрый день, Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, что реализация пожелания признана потенциально целесообразной. Если по результатам дальнейшего анализа, включающего юридические аспекты, анализ на непротиворечивость с общей политикой компании, никаких возражений не возникнет, мы постараемся включить Ваше пожелание в план доработок при выпуске одной из следующих версий нашего ПО.
Michael Bulychev написал: Добрый день. Действительно, параметры линий обратно в скрипт не передаются. Для некоторых индикаторов это просто бессмысленно и затратно по ресурсам. мы обязательно отразим этот момент в документации.
Почти 10 лет прошло. Не пора ли задокументировать этот факт наконец?
Впоследствии было зарегистрировано пожелание на то, чтобы свойства линий всегда возвращались в OnCalculate. По этой причине документация не была изменена.
Впоследствии было зарегистрировано пожелание на то, чтобы свойства линий всегда возвращались в OnCalculate. По этой причине документация не была изменена.
Добрый. Учитывая, что столько лет это пожелание не реализовано (и скорее всего никогда не будет уже), конечно же имеет смысл исправить документацию.
Если всё-таки займётесь свойствами линий, очень бы хотелось изменять цвет из скрипта (как в TradingView, чтобы часть точек была одного цвета, а часть другого; актуально, например, для максимума/минимума из 10 линий, чтобы понимать по цвету, какая из линий выбрана). В смысле нагрузки на систему, видимо, дешевле всего экспортировать функцию типа SetColorFromNow, чтобы юзер понимал, что смена цвета совсем не бесплатна.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.