Блог им. autotrade

--[[
MA volumn up down
--]]
Settings=
{
Name = "MAV2_m", -- indicator name
per=10, -- period
line=
{
{
Name = "MA",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0,0)
},
{
Name = "MA2",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0,255)
}
}
}
function Init()
mav1 = {}
mav2 = {}
return 2
end
function OnCalculate(index)
per = Settings.per
if index > 1 then
curv = C(index)
prevv = C(index-1)
else
curv = C(index)
prevv = C(index)
end
if curv - prevv > 0 then
if index > 1 then
mav1[index] = mav1[index-1] + V(index)
mav2[index] = mav2[index-1]
else
mav1[index] = V(index)
mav2[index] = 0
end
else
if index > 1 then
mav1[index] = mav1[index-1]
mav2[index] = mav2[index-1] + V(index)
else
mav1[index] = 0
mav2[index] = V(index)
end
end
if index > per then
vv1 = mav1[index] - mav1[index-per]
vv2 = mav2[index] - mav2[index-per]
else
vv1 = 0
vv2 = 0
end
return 0, vv1 - vv2
end
а значение самих линий можно писать в массив, чтобы не каждую переменную в коде инициализировать, т.е. инициировать массив, а потом уже в коде исходя из настройки сколько линий надо сейчас — Settings.num_param
решать что и как считать и сетить, т.е. в цикле пробегаем по массиву и сетим каждый элемент массива, но номера до Settings.num_param имеют реальное значение, а все кто после massive[Settings.num_param] и далее nil будут.
если, например, 1ая линия — сетим 1ый член массива, nая линия — сетим nый член массива, когда не надо линию nil ей сетим и она не выскочит на экран соответственно, т.е.
massive[номер] = 1.234
либо
massive[номер] = nil
единственная сложность это сделать ретурн в конце при таком количестве переменных, но это посидеть один раз же и настрочить возврат вида