Исправил ошибку в переменной, текущая index, а обращался к Index. Через DebugView посмотрел и получается, что не происходит вызов функции _SetTextLabel. В чем может быть проблема?
Спасибо VPM! Метки появляются, но что у меня здесь не так? На 5 индексе, на простой линии со значением 100, пытаюсь вывести метку при помощи функции. Метка не появляется. Сам код подсмотрел из работающего индикатора.
Код
OnCalcul ate = function(index)
if index == 5 then
_SetTextLabel(Settings['Идентификатор графика'], T(Index - 1), 100+Settings['Отступ меток вверх'], 'BOTTOM', Settings['Размер меток'], 'привет')
end
return 100
end
_SetTextLabel = function(tag, datetime, hi, alignment, font_size, text, hint)
if type(datetime) == 'table' then datetime = os.time(datetime) end
label_params = {}
label_params['TEXT'] = text
label_params['ALIGNMENT'] = alignment
label_params['YVALUE'] = hi
label_params['DATE'] = os.date('%Y%m%d', datetime)
label_params['TIME'] = os.date('%H%M%S', datetime)
label_params['R'] = Settings['Цвет меток R (0-255)']
label_params['G'] = Settings['Цвет меток G (0-255)']
label_params['B'] = Settings['Цвет меток B (0-255)']
label_params['TRANSPARENCY'] = 0
label_params['TRANSPARENT_BACKGROUND'] = 1
label_params['FONT_FACE_NAME'] = 'Verdana'
label_params['FONT_HEIGHT'] = font_size
if hint ~= nil then
label_params['HINT'] = hint
end
return AddLabel(tag, label_params)
end
VPM написал: Это можно представить как координаты на плоскости где х=DATE ,TIME, а у=значение цены.
Т.е. я правильно понимаю, к примеру, через функцию OnCalculate() высчитываю значение, вывожу это значение в отдельном окне (строю свой график) и вычисленное значение можно считать за координату Y?
Спасибо за помощь VPM! Я понял почему не видно меток, они просто за пределами масштаба и их просто не видно, но они есть. А что по оси Y масштабирования нет? Или еще есть какой-то подвох?
VPM написал: 1) Где у Вас AddLabel (20, label) chart_tag – тег графика, к которому привязывается метка,2) return 100, что за 100 хотите вернуть в параметрах пишите ["Yvalue"]=101,Прежде чем задавать какие то вопросы, попробуйте прочитать, справку хотя бы для того чтоб Вас понимали и разговаривать на одном языке.
Не судите меня строго, только пару недель занялся изучением языка LUA под Quik. На простом примере, вывода линии со значением 100 и вывода метки при появлении первого индекса в OnCalculate() Справкой пользуюсь, только из справки
YVALUE
DOUBLE
Значение параметра на оси Y, к которому будет привязана метка
) я понял, что значение параметра YVALUE, я могу задать любое значение по оси Y. Или это не так?
Что я делаю не так? Пытаюсь просто вывести метку на первом индексе, не получается
Код
OnCalcul ate = function(index)
if index == 1 then
label={
["TEXT"]="Тарам",
["FONT_HEIGHT"]=25,
["R"]=255,
["G"]=255,
["B"]=0,
["FONT_FACE_NAME"]='Times New Roman',
["FONT_HEIGHT"]=18,
["Yvalue"]=101,
["datetime"]=20191007
}
AddLabel (20, label)
end
return 100
end
Виталий Дерягина написал: Знающие программисты, всю голову сломал в поиске ошибки в написании кода или логики выполнения. Своих вариантов уже нет нужен свежий взгляд на проблему.
Пытаюсь вывести полученное значение в метке.
Рекомендую сделать так: Далее привожу фрагменты из своего рабочего скрипта : Сделайте шаблон метки, например так:
Спасибо за отклик. Попробовал сделать шаблон через локальную таблицу по вашему примеру, вставил в функцию OnCalculate, метка не появилась. Думаю проблема у меня в логике вывода метки, т.к. все типы передаваемых данных в функцию шаблона метки правильные. При вводе параметров, когда должна выводится метка значения просто не отображаются (фото прилагаются)
Знающие программисты, всю голову сломал в поиске ошибки в написании кода или логики выполнения. Своих вариантов уже нет нужен свежий взгляд на проблему.
Пытаюсь вывести полученное значение в метке.
OnCalcul ate = function(index)
if Schet < index then
if os.time(T(index-1)) >= DTSec then
local Prod = 0 local Pok = 0
Prod, Pok = _SumFunction (index)
SumProd = SumProd + Prod
SumPok = SumPok + Pok
Schet = index
end end
local text = ''
if SumPok and SumProd ~= 0 then
if SumPok > SumProd and SumProd ~= 0 then
text = string.format ("%.2f", (SumPok / SumProd))
if text >= Settings['Параметр входа'] then
local id = _TextLabel(Settings['Идентификатор графика'], T(Index - 1), SumPok + Settings['Отступ меток вверх'], 'TOP', Settings['Размер меток'], text)