//Канал линейной регрессии variable : UP($data),//верхняя граница канала DW($data),//нижняя граница канала dd($data);//приращение n = inparam("Интервал для Лин.Рег.", 2, 100, 21) ; //вычисляем лин. рег. X=cum(1); Y=c; X2=X*X; XY=X*Y; SXY=Sum(XY,n); SX=Sum(X,n); SX2=Sum(X2,n); SY=Sum(Y,n); m=(n*SXY-SX*SY)/(n*SX2-SX*SX); b=(SY-m*SX)/n; LR=m*X+b; dd=ref(dd,-1);//переносим приращение из прошлой свечи UP=ref(UP,-1)+dd;//новая точка на верхней границе равна сторое значение + приращение DW=ref(DW,-1)+dd;//аналогично if cross(LR, c) or cross(c, LR) then //если еть пересечение ЛР с ценой закрытия begin dd=m; //присваиваем новое значение приращения i=0; //зануляем переменную для организации цикла m_h=0; //зануляем максимальное расстояние он H до ЛР m_l=0; //зануляем максимальное расстояние он L до ЛР while (im_h) then m_h=c_m_h; //берем наибольше из текущего и максимального для H if (c_m_l>m_l) then m_l=c_m_l; //берем наибольше из текущего и максимального для L end; UP=LR+m_h; //вычисляем новую верхнюю границу канала DW=LR-m_l; //вычисляем новую нижнюю границу канала //UP=LR+(m_h+m_l)/2; //вычисляем новую верхнюю границу канала //DW=LR-(m_h+m_l)/2; //вычисляем новую нижнюю границу канала end; //Выводим результаты UP; LR; DW;