LinearRegression-REAL





/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                       Linear Regression Line.mq4 |
//|                                                      MQL Service |
//|                                           scripts@mqlservice.com |
//+------------------------------------------------------------------+
#property copyright "MQL Service"
#property link      "www.mqlservice.com"

#property indicator_chart_window
#property indicator_buffers   1
#property indicator_color1    White
#property indicator_width1    2

//---- input parameters
extern int LRLPeriod = 4;

//---- buffers
double LRLBuffer[];

int shift = 0;
int n = 0;
double sumx = 0;
double sumy = 0;
double sumxy = 0;
double sumx2 = 0;
double sumy2 = 0;
double yint = 0;
double r = 0;
double m = 0;

//+------------------------------------------------------------------+
//|                    INITIALIZATION FUNCTION                       |
//+------------------------------------------------------------------+
int init()
{
	//---- indicators
	SetIndexStyle(0, DRAW_LINE);
	SetIndexBuffer(0, LRLBuffer);
	IndicatorDigits(Digits);
	if (LRLPeriod < 2) 
		LRLPeriod = 2;
		
	IndicatorShortName("Linear Regression Line ("+LRLPeriod+")");
	SetIndexDrawBegin(0, LRLPeriod+2);
	IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS)+4);

	return(0);
}

//+------------------------------------------------------------------+
//|                   DEINITIALIZATION FUNCTION                      |
//+------------------------------------------------------------------+
int deinit()
{
	return(0);
}

//+------------------------------------------------------------------+
//|                      ITERATION FUNCTION                          |
//+------------------------------------------------------------------+
int start()
{
	int limit;
	int counted_bars = IndicatorCounted();

	if (counted_bars < 0) 
		counted_bars = 0;
  
	if (counted_bars > 0) 
		counted_bars--;
  
	limit = Bars - counted_bars;

	for (int shift=limit-1; shift >= 0; shift--)
	{
		sumx = 0;
		sumy = 0;
		sumxy = 0;
		sumx2 = 0;
		sumy2 = 0;
		for (n = 0; n <= LRLPeriod-1; n++)
		{ 
			sumx = sumx + n;
			sumy = sumy + Close[shift + n];
			sumxy = sumxy + n * Close[shift + n];
			sumx2 = sumx2 + n * n;
			sumy2 = sumy2 + Close[shift + n] * Close[shift + n]; 
		}
		double temp = LRLPeriod * sumx2 - sumx * sumx;
		if (temp == 0)
			temp = .0000001;
//		m = (LRLPeriod * sumxy - sumx * sumy) / (LRLPeriod * sumx2 - sumx * sumx); 
		m = (LRLPeriod * sumxy - sumx * sumy) / temp; 

		temp = LRLPeriod;
		if (temp == 0)
			temp = .0000001;
		yint = (sumy + m * sumx) / temp; // was LRLPeriod (obviously)

		temp = MathSqrt((LRLPeriod * sumx2 - sumx * sumx) * (LRLPeriod * sumy2 - sumy * sumy));
		if (temp == 0)
			temp = .0000001;
		r = (LRLPeriod * sumxy - sumx * sumy) / temp;
//			MathSqrt((LRLPeriod * sumx2 - sumx * sumx) * (LRLPeriod * sumy2 - sumy * sumy)); 
         
		LRLBuffer[shift] = yint - m * LRLPeriod;

		//Print (" "+shift+" "+LRLBuffer[shift]);
	}
	return(0);
}
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: