Вот текст простого индикатора RateOfChange:
Settings =
{
Name = "ROC2",
line = {
{Name = "ROC",
Type = TYPE_LINE,
Color = RGB(0, 0, 255)},
{Name = "Horizontal line (top)",
Type = TYPE_LINE,
Color = RGB(100, 100, 100)},
{Name = "Horizontal line (bottom)",
Type = TYPE_LINE,
Color = RGB(100, 100, 100)}
},
ID_Graph = "mov",
per = 3,
Horizontal_line = 0.1
}
function Init()
return 3
end
function OnCalculate(index)
local pd = Settings.per
local HL = Settings.Horizontal_line
local gr, n, leg = getCandlesByIndex(Settings.ID_Graph, 0, index-pd-1, pd+1)
if index > pd then
if n == nil then
return nil
end
if n < pd+1 then
return nil
end
if gr[0].close == nil or gr[0].close == 0 or gr[pd].close == nil then
return nil
end
return (gr[pd].close-gr[0].close)/gr[0].close*100,HL,-HL
else
return 0
end
end
При помещении на график этот индикатор работает нормально. ID_Graph = "mov" - любая линия, как сам график так и другие индикаторы на графике.
На следующий день этот индикатор выдает странную почти горизонтальную линию не равную 0, при наведении курсора на которую подсказка со значением не выдается (явный глюк). Из кода видно что может выдаваться либо 3 линии (2е горизонтальные) либо одна равная 0 либо ничего. После входа в редактирование графика и нажатия ОК - все считается нормально. После смены ТФ - опять загадочная линия. Если индикатор убрать с графика и снова установить - все считается нормально на всех ТФ.
Получается каждый день на все графики этот индикатор нужно устанавливать заново иначе он не корретно работает.
Я связываю это с функцией getCandlesByIndex.
В чем проблема?
Settings =
{
Name = "ROC2",
line = {
{Name = "ROC",
Type = TYPE_LINE,
Color = RGB(0, 0, 255)},
{Name = "Horizontal line (top)",
Type = TYPE_LINE,
Color = RGB(100, 100, 100)},
{Name = "Horizontal line (bottom)",
Type = TYPE_LINE,
Color = RGB(100, 100, 100)}
},
ID_Graph = "mov",
per = 3,
Horizontal_line = 0.1
}
function Init()
return 3
end
function OnCalculate(index)
local pd = Settings.per
local HL = Settings.Horizontal_line
local gr, n, leg = getCandlesByIndex(Settings.ID_Graph, 0, index-pd-1, pd+1)
if index > pd then
if n == nil then
return nil
end
if n < pd+1 then
return nil
end
if gr[0].close == nil or gr[0].close == 0 or gr[pd].close == nil then
return nil
end
return (gr[pd].close-gr[0].close)/gr[0].close*100,HL,-HL
else
return 0
end
end
При помещении на график этот индикатор работает нормально. ID_Graph = "mov" - любая линия, как сам график так и другие индикаторы на графике.
На следующий день этот индикатор выдает странную почти горизонтальную линию не равную 0, при наведении курсора на которую подсказка со значением не выдается (явный глюк). Из кода видно что может выдаваться либо 3 линии (2е горизонтальные) либо одна равная 0 либо ничего. После входа в редактирование графика и нажатия ОК - все считается нормально. После смены ТФ - опять загадочная линия. Если индикатор убрать с графика и снова установить - все считается нормально на всех ТФ.
Получается каждый день на все графики этот индикатор нужно устанавливать заново иначе он не корретно работает.
Я связываю это с функцией getCandlesByIndex.
В чем проблема?