пересечение двух линий является сигналом
Settings={
Name="VCUR",
period=20,
periodma=20,
weighted=1,
proportional=1,
line=
{
{
Name = "cur1",
Type =TYPE_LINE,
Width = 1,
Color = RGB(155,0, 0)
},
{
Name = "cur2",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0,155)
},
{
Name = "cur3",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0, 0)
}
}
}
--[[
-- кривая объемов
описание свойств:
period: сколько баров берутся в подсчет
weighted: =0 - обычная, =1 - взвешанная
proportional: =1- считается: volume*(close-open)/(hight-low), =0 - считается: volume*sign(close-open)
--]]
function Init()
mas={}
return 3
end
function OnCalculate(index)
--sumv = 0
if index >= Settings.period then
for i=index-Settings.period-1, index do
if sumv == nil then
sumv = 0
end
if C(i-1) ~= nil then
if C(i-1) > O(i-1) then
if Settings.proportional == 0 then
prop = 1
else
if (H(i-1)-L(i-1)) == 0 then
prop = 0
else
prop = (C(i-1)-O(i-1))/(H(i-1)-L(i-1))
end
end
if Settings.weighted == 0 then
sumv = sumv + prop*V(i-1)
else
sumv = sumv + prop*V(i-1)*(i-(index-Settings.period))/Settings.period
end
else
if Settings.proportional == 0 then
prop = 1
else
if (H(i-1)-L(i-1)) == 0 then
prop = 0
else
prop = (O(i-1)-C(i-1))/(H(i-1)-L(i-1))
end
end
if Settings.weighted == 0 then
sumv = sumv - prop*V(i-1)
else
sumv = sumv - prop*V(i-1)*(i-(index-Settings.period))/Settings.period
end
end
end
end
else
sumv = nil
end
mas[index]=sumv
ma = 0
if index >= Settings.periodma then
for i=index-Settings.periodma+1, index do
if mas[i] ~= nil then
ma = ma + mas[i]
end
end
end
ma = ma/Settings.periodma
return sumv, ma, 0
end