Блог им. autotrade

--[[
вопросы к автору: https://t.me/autotrade_ru
параметры:
Proc1 - процент зигзага
--]]
Settings={
Name="ZIG_mult_OSC_v3",
Proc1=2,
Proc2=4,
Up = 0.5,
Dw = -0.5,
line=
{
{
Name = "cur1",
Type =TYPE_LINE,
Width = 2,
Color = RGB(0, 0, 0)
},
{
Name = "cur2",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0, 0, 255)
},
{
Name = "cur3",
Type =TYPE_LINE,
Width = 1,
Color = RGB(255, 0, 0)
}
}
}
function Init()
y1_1 = nil
y2_1 = nil
x1_1 = 1
x2_1 = 1
y1_2 = nil
y2_2 = nil
x1_2 = 1
x2_2 = 1
return 3
end
function OnCalculate(index)
de_1 = Settings.Proc1
vl_1 = C(index)
if index == 1 then
ind_1 = {}
y1_1 = vl_1
y2_1 = vl_1
ind_1[index] = 0
else
ind_1[index] = ind_1[index-1]
if C(index) > y1_1*(1+de_1/100) and y1_1 < y2_1 then
x2_1 = x1_1
y2_1 = y1_1
x1_1 = index
y1_1 = C(index)
ind_1[index] = (C(index) - y2_1*(1+de_1/100))/(y2_1*de_1/100)
else
if C(index) > y1_1 and y1_1 >= y2_1
then
x1_1 = index
y1_1 = C(index)
end
if y1_1 >= y2_1
then
if C(index) > y2_1*(1+de_1/100) then
ind_1[index] = (C(index) - y2_1*(1+de_1/100))/(y2_1*de_1/100)
else
ind_1[index] = 0
end
end
end
if C(index) < y1_1*(1-de_1/100) and y1_1 > y2_1 then
x2_1 = x1_1
y2_1 = y1_1
x1_1 = index
y1_1 = C(index)
ind_1[index] = -(y2_1*(1-de_1/100)-C(index))/(y2_1*de_1/100)
else
if C(index) < y1_1 and y1_1 <= y2_1
then
x1_1 = index
y1_1 = C(index)
end
if y1_1 <= y2_1
then
if C(index) < y2_1*(1-de_1/100) then
ind_1[index] = -(y2_1*(1-de_1/100)-C(index))/(y2_1*de_1/100)
else
ind_1[index] = 0
end
end
end
end
de_2 = Settings.Proc2
vl_2 = C(index)
if index == 1 then
ind_2 = {}
y1_2 = vl_2
y2_2 = vl_2
ind_2[index] = 0
else
ind_2[index] = ind_2[index-1]
if C(index) > y1_2*(1+de_2/100) and y1_2 < y2_2 then
x2_2 = x1_2
y2_2 = y1_2
x1_2 = index
y1_2 = C(index)
ind_2[index] = (C(index) - y2_2*(1+de_2/100))/(y2_2*de_2/100)
else
if C(index) > y1_2 and y1_2 >= y2_2
then
x1_2 = index
y1_2 = C(index)
end
if y1_2 >= y2_2
then
if C(index) > y2_2*(1+de_2/100) then
ind_2[index] = (C(index) - y2_2*(1+de_2/100))/(y2_2*de_2/100)
else
ind_2[index] = 0
end
end
end
if C(index) < y1_2*(1-de_2/100) and y1_2 > y2_2 then
x2_2 = x1_2
y2_2 = y1_2
x1_2 = index
y1_2 = C(index)
ind_2[index] = -(y2_2*(1-de_2/100)-C(index))/(y2_2*de_2/100)
else
if C(index) < y1_2 and y1_2 <= y2_2
then
x1_2 = index
y1_2 = C(index)
end
if y1_2 <= y2_2
then
if C(index) < y2_2*(1-de_2/100) then
ind_2[index] = -(y2_2*(1-de_2/100)-C(index))/(y2_2*de_2/100)
else
ind_2[index] = 0
end
end
end
end
return ind_1[index]+ind_2[index], Settings.Up, Settings.Dw
end<br /><br />
