Избранное трейдера _sg_
Settings={ Name="MNKHL", period=200, delta=0, line= { { Name = "cur1", Type =TYPE_LINE, Width = 1, Color = RGB(0,0, 0) }, { Name = "cur2", Type =TYPE_LINE, Width = 1, Color = RGB(0,255, 0) }, { Name = "cur3", Type =TYPE_LINE, Width = 1, Color = RGB(255,0, 0) }, { Name = "cur4", Type =TYPE_LINE, Width = 1, Color = RGB(255,0, 0) }, { Name = "cur5", Type =TYPE_LINE, Width = 1, Color = RGB(0,255, 0) } } } --[[ описание свойств: period - период, за каротрый делается расчет delta - смещение назад назначение: построение тенденции использовался: метод наименьших квадратов (аппроксимация линией) --]] function Init() return 5 end function OnCalculate(index) sz = Size() n = Settings.period d = Settings.delta if (index ~= sz) then return nil, nil, nil, nil, nil else 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 j = index-n+1-d mh1 = H(j) ml1 = L(j) mh2 = H(j) ml2 = L(j) dmh1 = 0 dml1 = 0 dmh2 = 0 dml2 = 0 for j=index-n+1-d, index-d do y = a*j + b SetValue(j, 1, y) if H(j) < y and y - H(j) > dmh1 then mh1 = H(j) dmh1 = y - H(j) end if L(j) < y and y - L(j) > dml1 then ml1 = L(j) dml1 = y - L(j) end if H(j) > y and H(j) - y > dmh2 then mh2 = H(j) dmh2 = H(j) - y end if L(j) > y and L(j) - y > dml2 then ml2 = L(j) dml2 = L(j) - y end end for j=index-n+1-d, index-d do y = a*j + b SetValue(j, 2, y-dmh1) SetValue(j, 3, y-dml1) SetValue(j, 4, y+dmh2) SetValue(j, 5, y+dml2) end end end return y end end