//+------------------------------------------------------------------+
//|                              Copyright 2018, Matheamatic Trading |
//|                                 http://www.mathematictrading.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Mathematic Trading."
#property link      "http://www.mathematictrading.com"
#property version   "1.00"
#property strict
#property indicator_chart_window


extern string ____________________________________________________________gc="++++++++++ General Conditions ++++++++++";
extern int Bars_=150000;
extern int Step_Points=200;
extern int Row_Number=13;
extern string ____________________________________________________________zz="++++++++++ Zig Zag Settings ++++++++++";
extern int Depth=24;
extern int Desviation=10;
extern int Backstep=6;

double grill[100][100];
string st[100];

int init()
  {
Zig();
//---
   return(INIT_SUCCEEDED);
  }
  
int deinit()
  {

  return 0;
}
int start(){

   if(Volume[0]!=1) return(0);
//---
return(0);
}
//+------------------------------------------------------------------+
int ij;
void Zig(){
   double A, B, C;
   int AB, BC;
   int i, j;
   if(Bars_>Bars) Bars_=Bars-1;

   for(j=Bars_; j>=0; j--){
      double ZigZag=iCustom(NULL,0,"ZigZag",Depth,Desviation,Backstep,0,j);
      if(ZigZag!=0){
      /*
            ObjectDelete("z"+ij);
            ObjectCreate("z"+ij,OBJ_ARROW_LEFT_PRICE,0,Time[j], ZigZag);
            ObjectSet ("z"+ij,OBJPROP_COLOR,clrRed);
         ij++;
      */
      ij++;
      if(A!=0 && B!=0 && C!=0){
         A=B;
         B=C;
         C=ZigZag;
      }
      if(A!=0 && B!=0 && C==0) C=ZigZag;  
      if(A!=0 && B==0 && C==0) B=ZigZag;  
      if(A==0 && B==0 && C==0) A=ZigZag;  
      if(A!=0 && B!=0 && C!=0){
         AB=NormalizeDouble(fabs(A-B)/Point,0);
         BC=NormalizeDouble(fabs(B-C)/Point,0);
         int m, n;
         m=int(AB/Step_Points);
         n=int(BC/Step_Points);
         if(m>Row_Number) m=Row_Number;
         if(n>Row_Number) n=Row_Number;
         if(n<1) n=1;
         if(m<1) m=1;
         grill[m-1][n-1]++;
      }
      }
   }
   string com="          ";
   //com=tab(com,Row_Number);
   for(i=0;i<Row_Number;i++) {
      com=com+(i+1)*Step_Points/10;
      com=tab(com,5);
      com=com+"|";
      com=tab(com,5);
   }
   for(i=0;i<Row_Number;i++) st[i]=(i+1)*Step_Points/10;
   for(j=0;j<Row_Number;j++) for(i=0;i<Row_Number;i++) {
      st[i]=tab(st[i],5);
      st[i]=st[i]+"|";
      st[i]=tab(st[i],5);
      st[i]=st[i]+grill[j][i];
      st[i]=tab(st[i],5);
   }
   for(i=0;i<Row_Number;i++) com=com+"\n"+st[i];   
     Comment(com);

return;
}

string tab(string str, int t)
{
   int l=StringLen(str);
   for(int i=0;(i+l)%t!=0 && i<t;i++) str=str+" ";
   return (str);             
}