Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Интересует заработок в MQL5 Cloud Network? Загляни в профиль!
Forex Trader
114252
Forex Trader 2008.02.07 16:07 
Вопрос к разработчикам: каким образом в текущем билде считаются границы регрессионного канала?

Использую найденный здесь код, однако границы с графическим инструментом не совпадают:


Вот здесь "Вопрос к разработчикам по поводу "Канала линейной регрессии"" ANG3110 писал об ошибке расчета границ, но его пример кода тоже не работает.

Используемый код:
void linreg(int beginBar, int endBar)
{
	int n = endBar - beginBar + 1;

	// calculate price values
	double value = Close[beginBar];
	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[beginBar + 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;
	
	ln_endValue = a;
	ln_beginValue = a + b * (n - 1);
	
	//maximal deviation
	ln_maxDev = 0;
	double deviation;
	double dvalue = a;
	
	for (i = 0; i < n; i++)
	{
		dvalue += b;
		deviation = MathAbs(Close[beginBar + i] - dvalue);
		if (deviation >= ln_maxDev) ln_maxDev = deviation;
	}
}
Forex Trader
114252
Forex Trader 2008.02.07 19:13  
Проблему удалось решить самостоятельно

Вот правильный код:
	//maximal deviation
	ln_maxDev = 0;
	double deviation;
	double dvalue = 0;
	
	for (i = 0; i < n; i++)
	{
		dvalue = a + b * (i - 1);
		deviation = MathAbs(Close[beginBar + i] - dvalue);
		if (deviation >= ln_maxDev) ln_maxDev = deviation;
	}
Forex Trader
114252
Forex Trader 2008.02.08 11:23  
Обращаюсь с просьбой - помогите написать индикатор линейной регресии
Был у меня в МТ3 вот бюсь и не могу найти ошибку:
//+------------------------------------------------------------------+
//|                                          KVNLinearRegression.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 MediumBlue
//---- input parameters
extern int       nn=21;
//---- buffers
double LR1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   //SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexBuffer(0,LR1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| пользовательский индикатор                            |
//+------------------------------------------------------------------+
int start()
  {
  int  n,n1,n2;
  	double ssm1,ssm2,ssm3,ssm4,a,b,LR;
  				ssm1=0;
				ssm2=0;	
				ssm3=0;
	 			ssm4=0;
 // for(n=0;n<=Bars;n++)
 for(n=0;n<=100;n++)
{
	for(n1=1;n1<=nn;n1++)	
	{
n2=n+n1-1;
ssm1=ssm1+n1*Close[n2];
ssm2=ssm2+n1;
ssm3=ssm3+Close[n2];
ssm4=ssm4+n1*n1;
    }
//Индикатор строится по формуле:LR = at+b
//где LR - прогнозируемая "средняя" цена закрытия,
//t - момент времени,Pt  - цены закрытия за n последних периодов.
//a = (n*СУММА (t*Pt) - СУММА(t)*CУММА(Pt))/(n*СУММА(t^2) - (СУММА(t))^2) - тангенс угла наклона линии регрессии,
//b = 1/n*(СУММА(Pt) - a*СУММА(t)), - смещение по горизонтали}

a=(nn*ssm1-ssm2*ssm3)/(nn*ssm4-ssm2*ssm2);
b=(1/nn)*(ssm3-a*ssm2);
LR=a*nn+b;
				ssm1=0;
				ssm2=0;	
				ssm3=0;
	 			ssm4=0;
  LR1[n]=LR;                 
 }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
Forex Trader
114252
Forex Trader 2008.02.08 12:19  
и ещё гиперболическая регрессия(тоже не могу найти ошибку)
//+------------------------------------------------------------------+
//|                                    гиперболическая регрессия.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//#property indicator_chart_window
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern int       nn=21;
//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   double barr, as, bs,cs,ds,e, f,k,LR,ExtMapBuffer1[];
   int n,n1;
// Индикатор Гиперболической Регресии
for (barr=0;barr<=100;barr++){
	for (n=1;n<=nn;n++){
		n1=barr+n-1;
as=as+1/n;
bs=bs+1/(n*n);
cs=cs+Close[n1];
ds=ds+Close[n1]/n;
}

e=nn*bs-as*as;
f=cs*bs-ds*as;
k=nn*ds-as*cs;
f=f/e;
k=k/e;                                                                                                                                                                                                                                     
LR = f+k/nn;
	as=0;                                                 
	bs=0;
	cs=0;
	ds=0;
	ExtMapBuffer1[n]=LR;
}
//----
   return(0);
  }
//+------------------------------------------------------------------+
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий