(1) y = A + B * x; x = x(i); y = y(i); Sum(1,i,n; x) = x(1) + x(2) + ... + x(n); x^2 = x * x;
(2) B = [n * Sum(1,i,n; x*y) - Sum(1,i,n; x) * Sum(1,i,n; y)] / {n * Sum(1,i,n; x^2) - [Sum(1,i,n; x)]^2};
(3) A = [Sum(1,i,n; y) - B * Sum(1,i,n; x)] / n;
(4) 1 <= i <= n;
x(i; 1 <= i <= n) - массив отсчетов, который надо аппроксимировать прямой y = A + B * x (цена и т.п.)
(2) B = [n * Sum(1,i,n; x*y) - Sum(1,i,n; x) * Sum(1,i,n; y)] / {n * Sum(1,i,n; x^2) - [Sum(1,i,n; x)]^2};
(3) A = [Sum(1,i,n; y) - B * Sum(1,i,n; x)] / n;
(4) 1 <= i <= n;
x(i; 1 <= i <= n) - массив отсчетов, который надо аппроксимировать прямой y = A + B * x (цена и т.п.)
"Linear Regression Channel, Calculating Method"
Я не могу толком разобраться в коде :-( , дайте пожалуйста формулу, или код полностью (весь скрипт или индикатор)
а это и есть весь код, полный и точный, отвечающий за расчёт канала линейной регрессии.
а это и есть весь код, полный и точный, отвечающий за расчёт канала линейной регрессии.
Если это так, то почему он тогда не компилируется : ('m_pos' - variable not defined, 'm_value' - variable not defined), если его вставляешь куда нибудь? Может я чего не могу понять?
Это - выдержка из нашего исходного кода, написанного на C++. Вам необходимо адаптировать этот текст, согласно ремарке про последовательность баров.
Кстати, на нашем форуме я уже выкладывал аналогичный код канала стандартного отклонения.
"Podskazyte pozalsta formulu iz MT4 indikatora"
В этой же ветке приведена адаптация на mql4. Воспользуйтесь этой адаптацией - каналы очень похожи, средняя линия и у того и у другого считается одинаково.
Кстати, на нашем форуме я уже выкладывал аналогичный код канала стандартного отклонения.
"Podskazyte pozalsta formulu iz MT4 indikatora"
В этой же ветке приведена адаптация на mql4. Воспользуйтесь этой адаптацией - каналы очень похожи, средняя линия и у того и у другого считается одинаково.
вот что у меня получилось:
//+------------------------------------------------------------------+
//| i_FD_LR.mq4 |
//| RealJin |
//| much-love@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "RealJin"
#property link "much-love@yandex.ru"
extern int LR_Period=14;
extern bool Line_Ray=false;
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int m_pos[2];
m_pos[0]=0;
m_pos[1]=LR_Period;
double m_value[2];
int n=m_pos[1]-m_pos[0]+1;
//---- calculate price values
double value=Close[m_pos[0]];
double a,b,c;
double sumy=value;
double sumx=0.0;
double sumxy=0.0;
double sumx2=0.0;
for(int i=1; i<n; i++)
{
value=Close[m_pos[0]+i];
sumy+=value;
sumxy+=value*i;
sumx+=i;
sumx2+=i*i;
}
c=sumx2*n-sumx*sumx;
if(c==0.0) return;
b=(sumxy*n-sumx*sumy)/c;
a=(sumy-sumx*b)/n;
m_value[0]=a;
m_value[1]=a+b*n;
//---- maximal deviation
double maxdev=0;
double deviation=0;
double dvalue=a;
for(i=0; i<n; i++)
{
value=Close[m_pos[0]+i];
dvalue+=b;
deviation=MathAbs(value-dvalue);
if(maxdev<=deviation) maxdev=deviation;
}
//----lines
if(ObjectFind("i_LR_C_Line")!=0){
ObjectCreate("i_LR_C_Line",OBJ_TREND,0,Time[m_pos[1]],m_value[1],Time[m_pos[0]],m_value[0]);
}
ObjectSet("i_LR_C_Line",OBJPROP_TIME1,Time[m_pos[1]]);
ObjectSet("i_LR_C_Line",OBJPROP_PRICE1,m_value[1]);
ObjectSet("i_LR_C_Line",OBJPROP_TIME2,Time[m_pos[0]]);
ObjectSet("i_LR_C_Line",OBJPROP_PRICE2,m_value[0]);
ObjectSet("i_LR_C_Line",OBJPROP_RAY,Line_Ray);
if(ObjectFind("i_LR_U_Line")!=0){
ObjectCreate("i_LR_U_Line",OBJ_TREND,0,Time[m_pos[1]],m_value[1]+maxdev,Time[m_pos[0]],m_value[0]+maxdev);
}
ObjectSet("i_LR_U_Line",OBJPROP_TIME1,Time[m_pos[1]]);
ObjectSet("i_LR_U_Line",OBJPROP_PRICE1,m_value[1]+maxdev);
ObjectSet("i_LR_U_Line",OBJPROP_TIME2,Time[m_pos[0]]);
ObjectSet("i_LR_U_Line",OBJPROP_PRICE2,m_value[0]+maxdev);
ObjectSet("i_LR_U_Line",OBJPROP_RAY,Line_Ray);
if(ObjectFind("i_LR_L_Line")!=0){
ObjectCreate("i_LR_L_Line",OBJ_TREND,0,Time[m_pos[1]],m_value[1]-maxdev,Time[m_pos[0]],m_value[0]-maxdev);
}
ObjectSet("i_LR_L_Line",OBJPROP_TIME1,Time[m_pos[1]]);
ObjectSet("i_LR_L_Line",OBJPROP_PRICE1,m_value[1]-maxdev);
ObjectSet("i_LR_L_Line",OBJPROP_TIME2,Time[m_pos[0]]);
ObjectSet("i_LR_L_Line",OBJPROP_PRICE2,m_value[0]-maxdev);
ObjectSet("i_LR_L_Line",OBJPROP_RAY,Line_Ray);
return(0);
}
//+------------------------------------------------------------------+
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
у = а + bx, где:
у - цена закрытия;
х - положение текущего периода времени в базе данных;
а - 1/п (Ey - bEх);
b - (nExy - EхEу)/nEх2 - (Ex)2;
п - число временных периодов при суммировании;
E - сумма за n периодов.
Что на что множится, где скобки а где нет, 2 это квадрат или умножить на 2... непонятно
Как эта формула выглядит правильно?