Заметка

Нужна помощь Lua

  • k-477994
  • Без рубрики
  • 24 января 2019 г.
  0  

Не выводятся метки на график Quik

Стоит простая задача — вывести метки на чарт посредством индикатора. Код написан, в окне сообщения получаю Id меток, т.е. функция запрос обрабатывает. Но метка на чарт не выводится. Ошибок в окне соогбщений нет. В связи с этим вопросы:

- есть ли ограничения на вызов AddLabel из Init?

- вернет ли AddLabel Id метки если неверно указан путь к файлу?

- какие еще могут быть причины такого поведения функции?

Попутно — удаляю все метки в функции OnDestroy (меток на чарте нет, получен толькр их Id) посредством DelAllLabels, при этом при следующем запуске индикатора 

существующие Id  не удаляются, а номера увеличиваются. Нормально ли такое поведение?

Текст инди катора ниже

Settings={
Name = "_Labels",--имя индикатора
AssetID = "sber",--идентификатор иструмента
LabelName = "down-254095_1280",--имя файла метки
stopper = false,--обработка на каждом тике
complect = 0,
-- начальное местоположение меток
fplace = 3,
splace = 1,
Yvalue = 0,
line=
{
{
Name = "High",
Type =TYPE_LINE,
Width = 1,
Color = RGB(120,90, 140)
}--,
--{
--Name = "Low",
--Type =TYPE_LINE,
--Width = 1,
--Color = RGB(120,90,140)
--},
--{
--Name = "Close",
--Type =TYPE_LINE,
-- Width = 1,
--Color = RGB(120,90, 140)
--},
--{
--Name = "Open",
--Type =TYPE_LINE,
--Width = 1,
--Color = RGB(120,90,140)
--}
--}
}
}

--глобальные переменные
-- Внимание, название всех параметров меток должны писаться большими буквами
label1={
--TEXT="метка";
IMAGE_PATH="";
--TRANSPARENCY=100,
TRANSPARENT_BACKGROUND=1,
--YVALUE=Settings.Yvalue,
DATE=0,
TIME=0
}
label2={
--TEXT="";
IMAGE_PATH="";
--TRANSPARENCY=100,
TRANSPARENT_BACKGROUND=1,
YVALUE=Settings.Yvalue,
DATE=0,
TIME=0
}


Label_Id = {}--массив с идентификаторами меток
ScriptPath=""--путь к иконке (для метки)
NumCandles=0--количество свечек на графике
Yvalue=0

--функция подставляет нули при их отсутствии на первой позиции даты-времени
FTEXT = function (V)
V=tostring (V)
if string.len (V) == 1 then V = "0".. V end
return V
end

function Init()
if Settings.AssetID=="" then
message("Необходимо установить идентификатор инструмента")
end
ScriptPath = getScriptPath().."\\"..Settings.LabelName; --путь к файлу метки
NumCandles=getNumCandles(Settings.AssetID)-1; --номер последней справа свечи на графике

--объявление переменных. Присваиваем начальные значения чтобы сразу типизировать.
local t={}--таблица данных свечек
local TableSize=0--размер таблицы данных
local n=0--количество строк в таблице (количество свечек)
local l=""--подпись инструмента
local Date=""--дата свечки
local Time=""--время свечки

t,n,l = getCandlesByIndex(Settings.AssetID,0,NumCandles-3,3); --беру три предпоследние свечки
--t — таблица значений свечек
--n — количество полученных свечек(строк таблицы)
--l — подпись к инструменту
TableSize = #t+1; --длина массива свечек
--дата и время свечи 1
Date=t[1].datetime.year..FTEXT(t[1].datetime.month)..FTEXT(t[1].datetime.day); --дата
Time=FTEXT(t[1].datetime.hour)..FTEXT(t[1].datetime.min)..FTEXT(t[1].datetime.sec);
--привязка к оси У
Yvalue=Settings.Yvalue+t[1].high;

--заполнить структуру данных меток
label1={
IMAGE_PATH=ScriptPath;
YVALUE=Yvalue;
DATE=Date,
TIME=Time
};
message(label1.IMAGE_PATH.."");
message(label1.YVALUE.."");
message(label1.DATE.."");
message(label1.TIME.."");

--дата и время свечи 2
Date=t[2].datetime.year..FTEXT(t[2].datetime.month)..FTEXT(t[2].datetime.day); --дата
Time=FTEXT(t[2].datetime.hour)..FTEXT(t[2].datetime.min)..FTEXT(t[2].datetime.sec);
label2={
IMAGE_PATH=ScriptPath;
YVALUE=Yvalue;
DATE=Date,
TIME=Time
};
--добавляем метки на чарт
Label_Id[1]=AddLabel(Settings.AssetID,label1);
message(tostring(Label_Id[1]));
Label_Id[2]=AddLabel(Settings.AssetID,label2);
message(tostring(Label_Id[1]));

return 1
end

function OnCalculate(index)

return Yvalue
end
function OnDestroy ()
DelAllLabels(Settings.AssetID)
end

Комментарии

Написать комментарий

Чтобы написать комментарий, необходимо авторизоваться.

Написать администратору