Блог им. autotrade
Settings={ Name="Buy_osc_v01", period=50, delta=0, lim=100.0, line= { { Name = "cur1", Type =TYPE_LINE, Width = 1, Color = RGB(0, 0, 255) }, { Name = "cur2", Type =TYPE_LINE, Width = 1, Color = RGB(0, 0, 0) }, { Name = "cur3", Type =TYPE_LINE, Width = 1, Color = RGB(0,0, 0) }, { Name = "cur4", Type =TYPE_LINE, Width = 1, Color = RGB(0,0, 0) } } } --[[ описание свойств: period - период, за каротрый делается расчет delta - смещение назад назначение: горизонтальная ширина канала использовался: метод наименьших квадратов (аппроксимация линией) --]] function Init() return 2 end function OnCalculate(index) sz = Size() n = Settings.period d = Settings.delta lim = Settings.lim y = nil if index-n-d > 0 then a1 = 0 a2 = 0 a3 = 0 a4 = 0 for i=index-n+1-d, index-d do a1 = a1+i*C(i) a2 = a2+i a3 = a3+C(i) a4 = a4+i*i end if((n*a4 - a2*a2) ~= 0) then a = (n*a1 - a2*a3)/(n*a4 - a2*a2) b = (a3 - a*a2)/n c1 = 0 c2 = 0 n1 = 0 n2 = 0 for j=index-n+1-d, index-d do y = a*j + b if C(j) < y then c1 = c1 + (y -C(j)) n1 = n1 + 1 end if C(j) > y then c2 = c2 + (C(j) - y) n2 = n2 + 1 end end if n1 ~= 0 then c1 = c1/n1 end if n2 ~= 0 then c2 = c2/n2 end if a==0 then y = 0 else y = (c1+c2)/a if y > lim then y = lim else if y < -lim then y = -lim end end end end end return y,0 end
Подскажите, как им пользоваться?