Chan_Reg_Points

Author: Copyright 2020, MetaQuotes Software Corp.
0 Views
0 Downloads
0 Favorites
Chan_Reg_Points
ÿþ//+------------------------------------------------------------------+

//|                                                        @53@2.mq4 |

//|                        Copyright 2020, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2020, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict

#property indicator_chart_window

#property indicator_buffers 3

#property indicator_plots   3

//--- plot Label1

#property indicator_label1  "Label1"

#property indicator_type1   DRAW_LINE

#property indicator_color1  clrRed

#property indicator_style1  STYLE_SOLID

#property indicator_width1  1



#property indicator_type2   DRAW_LINE

#property indicator_color2  clrRed

#property indicator_style2  STYLE_SOLID

#property indicator_width2  1



#property indicator_type3  DRAW_LINE

#property indicator_color3  clrRed

#property indicator_style3  STYLE_SOLID

#property indicator_width1  1



extern int PointA = 100;

extern int PointB = 50;

//--- indicator buffers

double         Regr[];

double         VGran[];

double         NGran[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int OnInit()

  {

//--- indicator buffers mapping

   SetIndexBuffer(0,Regr);

   SetIndexBuffer(1,VGran);

   SetIndexBuffer(2,NGran);

//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

  if(PointA<PointB)

  {

  int point= PointB;

  PointB = PointA;

  PointA = point;

  } 

  if(PointA>rates_total/2 || PointB>rates_total/2)

   Print("Not enough history! Reduce period");

//--- 0AG5B AC<<

   int     Xi=0;

   double  Yi=0;

   double  XiYi=0;

   int     Xi2=0;

   double  Yi2=0;

   int     SumXi=0;

   double  SumYi=0;

   double  SumXiYi=0;

   int     SumXi2=0;

   double  SumYi2=0;



   int period=PointA-PointB;//  >;8G5AB2> A2G59 2 :0=0;5



   for(int i=PointA-1; i>=PointB; i--)

     {

      Xi=i;

      Yi=Close[i];

      XiYi=Xi*Yi;

      Xi2=Xi*Xi;

      Yi2=Yi*Yi;

      SumXi+=Xi;

      SumYi+=Yi;

      SumXiYi+=XiYi;

      SumXi2+=Xi2;

      SumYi2+=Yi2;

     }



   double A1=SumXi*SumYi-period*SumXiYi;

   double A2=SumXi*SumXi-period*SumXi2;

   double A= A1/A2;



   double B1=SumXi*SumXiYi-SumXi2*SumYi;

   double B2=SumXi*SumXi-period*SumXi2;

   double B= B1/B2;



// 0AG5B A@54=59 ;8=88

   double Hmax=0.0;

   for(int i=PointA-1; i>=PointB; i--)

     {

      Regr[i]=A*i+B;

      // 0AG5B 3@0=8F

      double H;

      H= MathAbs(Close[i]-Regr[i]);

      if(H>Hmax)

         Hmax=H;

     }

   for(int i=PointA-1; i>=PointB; i--)

     {

      VGran[i]=Regr[i]+Hmax;

      NGran[i]=Regr[i]-Hmax;

     }





//--- return value of prev_calculated for next call

   return(rates_total);

  }

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

Comments