LinearRegression

Calculate a vector/matrix with calculated linear regression values.

vector vector::LinearRegression();
 
matrix matrix::LinearRegression(
  ENUM_MATRIX_AXIS axis=AXIS_NONE      // axis along which regression is calculated
  );

Parameters

axis

[in]  Specifying the axis along which the regression is calculated. ENUM_MATRIX_AXIS enumeration value (AXIS_HORZ — horizontal axis, AXIS_VERT — vertical axis).

Return Value

Vector or matrix with calculated linear regression values.

Note

Linear regression is calculated using the standard regression equation: y (x) = b + a * x + b, where a is the line slope, while b is its Y axis shift.

linear_regression

Example:

#include <Graphics\Graphic.mqh>
 
#define GRAPH_WIDTH 750
#define GRAPH_HEIGHT 350
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
  vector vector_a;
  vector_a.CopyRates(_Symbol,_Period,COPY_RATES_CLOSE,1,100);
  vector vector_r=vector_a.LinearRegression();
 
//--- switch off chart show
  ChartSetInteger(0,CHART_SHOW,false);
 
//--- arrays for drawing a graph
  double x[];
  double y1[];
  double y2[];
  ArrayResize(x,uint(vector_a.Size()));
  ArrayResize(y1,uint(vector_a.Size()));
  ArrayResize(y2,uint(vector_a.Size()));
  for(ulong i=0; i<vector_a.Size(); i++)
    {
    x[i]=(double)i;
    y1[i]=vector_a[i];
    y2[i]=vector_r[i];
    }
 
//--- graph title
  string title="Linear regression "+_Symbol+","+EnumToString(_Period);
 
  long   chart=0;
  string name="LinearRegression";
 
//--- create graph
  CGraphic graphic;
  graphic.Create(chart,name,0,0,0,GRAPH_WIDTH,GRAPH_HEIGHT);
  graphic.BackgroundMain(title);
  graphic.BackgroundMainSize(12);
 
//--- activation function graph
  CCurve *curvef=graphic.CurveAdd(x,y1,CURVE_POINTS_AND_LINES);
  curvef.Name("vector_a");
  curvef.LinesWidth(2);
  curvef.LinesSmooth(true);
  curvef.LinesSmoothTension(1);
  curvef.LinesSmoothStep(10);
 
//--- derivatives of activation function
  CCurve *curved=graphic.CurveAdd(x,y2,CURVE_LINES);
  curved.Name("vector_r");
  curved.LinesWidth(2);
  curved.LinesSmooth(true);
  curved.LinesSmoothTension(1);
  curved.LinesSmoothStep(10);
  graphic.CurvePlotAll();
  graphic.Update();
 
//--- endless loop to recognize pressed keyboard buttons
  while(!IsStopped())
    {
    //--- press escape button to quit program
    if(TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)!=0)
        break;
    //--- press PdDn to save graph picture
    if(TerminalInfoInteger(TERMINAL_KEYSTATE_PAGEDOWN)!=0)
       {
        string file_names[];
        if(FileSelectDialog("Save Picture",NULL,"All files (*.*)|*.*",FSD_WRITE_FILE,file_names,"LinearRegression.png")<1)
          continue;
        ChartScreenShot(0,file_names[0],GRAPH_WIDTH,GRAPH_HEIGHT);
       }
    Sleep(10);
    }
 
//--- clean up
  graphic.Destroy();
  ObjectDelete(chart,name);
  ChartSetInteger(0,CHART_SHOW,true);
 }

ENUM_MATRIX_AXIS

Enumeration for specifying the axis in all statistical functions for matrices.

ID

Description

AXIS_NONE

The axis is not specified. Calculation is performed over all matrix elements, as if it were a vector (see the Flat method).

AXIS_HORZ

Horizontal axis

AXIS_VERT

Vertical axis