//+----------------------------------------------------------------------------+
//|                                                          AverageRange.mq4  |
//|                                                    Ким Игорь В. aka KimIV  |
//|                                                       http://www.kimiv.ru  |
//|                                                                            |
//|  14.09.2005  Скрипт для расчёта:                                           |
//|              средней волатильности инструмента High-Low                    |
//|              среднего размера тела свечи       ABS(Open-Close)             |
//|              среднего размера тени свечи                                   |
//|                                                                            |
//|  17.11.2007  Возможность использования заданного количества баров          |
//+----------------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"
//#property show_inputs           //Скрипт
#property indicator_chart_window  //Индикатор

extern datetime BeginDateCalc = D'2017.01.01';
extern datetime EndDateCalc   = D'2017.12.31';
//extern int      NumberOfBars  = 100;         
//+----------------------------------------------------------------------------+
//|  script program start function                                             |
//+----------------------------------------------------------------------------+
/*
struct Stat
  {
//    string name;         //наименование группы данных
    int    CountBars;    //Количество баров
    int    sumSize;      // Средний размер High-Low
    int    sumBody;      // Средний размер тела
    int    sumUp_shadow; // Средний размер верхней тени
    int    sumDn_shadow; // Средний размер верхней тени
    int    maxSize;     
    int    maxBody;
    int    maxUp_Shadow;
    int    maxDn_Shadow;  
         
  };*/
 
/* Описание индексов в массиве

0	Все свечи	Колич. свечей	            Весь период
1	Свечи BUY	Сумма. р-р свечи	         Понедельник
2	Свечи SELL	Сумма. р-р тела	         Вторник
3	            Сумма. р-р верхней тени	   Среда
4	            Сумма. р-р нижней тени	   Четверг
5	            Макс. свеча	               Пятница
6	            Макс. тело	               1 Intraday
7	            Макс. верхняя тень	      2 Intraday
8	            Макс. нижняя тень	         3 Intraday
9			                                 4 Intraday
*/
int DataArr[3][9][10]; //Массив с данными
string NameGroupCandle [3]={"Все свечи", "Свечи BUY","Свечи SELL"};
string NameParam       [9]={"Колич. свечей", "Средн. р-р свечи", "Средн. р-р тела", "Средн. р-р верхней тени", "Средн. р-р нижней тени",
                            "Макс. свеча", "Макс. тело", "Макс. верхняя тень", "Макс. нижняя тень"};
string NameGroup      [10]={"Весь период", "Понедельник","Вторник","Среда","Четверг","Пятница", 
                            "1 Intraday", "2 Intraday", "3 Intraday", "4 Intraday"};            
//Stat   Data[3];
void init() 
{
  ArrayInitialize (DataArr,0);
  Comment("");
}
void start() 
{
  int    i, b=0, bb=0, h=0, l=0, s=0, t=0;
  string st="";

  for (i=Bars; i>0; i--) 
  {
    if ((Time[i]>=BeginDateCalc && Time[i]<EndDateCalc )) 
    {
      if (bb==0) bb=i;
      GetStat(i,0);
    }
  }

  st=   "Начало: "+TimeToStr(Time[bb], TIME_DATE|TIME_MINUTES)+"\n";
  st=st+"Конец: "+TimeToStr(Time[bb-DataArr[0][0][0]+1], TIME_DATE|TIME_MINUTES)+"\n";
  st=st+"                                                " + "  Все свечи "  + "      Свечи БАЙ "  + "     Свечи СЕЛЛ" + " \n";
  st=st+"Использовано баров                        : " + DataArr[0][0][0]+"                 "+ DataArr[1][0][0]+"                    "+ DataArr[2][0][0]+"\n";
  st=st+"Средняя волатильность                   : " + DataArr[0][1][0]/DataArr[0][0][0]+"п.         "+DataArr[1][1][0]/DataArr[1][0][0]+" п.             "+  DataArr[2][1][0]/DataArr[2][0][0]+"п.\n";
  st=st+"Средний размер тела                       : " + DataArr[0][2][0]/DataArr[0][0][0]+" п.       \n";
  st=st+"Средний размер верхней тени          : " + DataArr[0][3][0]/DataArr[0][0][0]+" п.\n";
  st=st+"Средний размер нижней тени          : " + DataArr[0][4][0]/DataArr[0][0][0]+" п.\n";
  st=st+"Максимальная волатильность          : " + DataArr[0][5][0]                 +" п.     "+ DataArr[1][5][0]+"п.             "+    DataArr[2][5][0]              +" п.\n";
  st=st+"Максимальный размер тела             : " + DataArr[0][6][0]                 +" п.\n";
  st=st+"Максимальный размер верхней тени: " + DataArr[0][7][0]+" п.\n";
  st=st+"Максимальный размер нижней тени : " + DataArr[0][8][0]+" п.";
  //----------------------------------

  Comment(st);
    ArrayInitialize (DataArr,0);
}
//+----------------------------------------------------------------------------+
 
void GetStat(int k, int i) // k- номер бара, i- период
{
  int    CandleSize = (High[k]-Low[k])/Point;
  int    BodySize   =  MathAbs(Open[k]-Close[k])/Point; 
  int    UpShd, DnShd;
  
//============ параметры свечи  ===================================================      
      DataArr[0][0][i]++;                     //Количество свечей
      DataArr[0][1][i]+= CandleSize;          //Накопительный размер свеч
      DataArr[0][2][i]+= BodySize;            //Накопительный размер тел свеч
      if (DataArr[0][5][i] < CandleSize) DataArr[0][5][i] = CandleSize; //Запись максимального размера свечи
      if (DataArr[0][6][i] < BodySize  ) DataArr[0][6][i] = BodySize;   //Запись максимального размера  тела свечи
      
//============параметры, зависящие от направления свечи=============================       
      
      if (Open[k]<Close[k]) //для БАЙ свечи
      {
        UpShd=(High[k]-Close[k])/Point;                        //Размер верхней тени
        DnShd=(Open[k]-Low[k])  /Point;                        //Размер нижней тени
        
        // Записываем для всех свечей
        DataArr[0][3][i]+=UpShd;                               //Накопительный размер верхних теней
        DataArr[0][4][i]+=DnShd;                               //Накопительный размер нижних теней
        if(DataArr[0][7][i] < UpShd) DataArr[0][7][i] = UpShd; //Запись максимального размера верхней тени
        if(DataArr[0][8][i] < DnShd) DataArr[0][8][i] = DnShd; //Запись максимального размера нижней тени
        
        // Записываем для БАЙ- группы
        DataArr[1][0][i]++;                                    //Количество свечей БАЙ
        DataArr[1][1][i]+= CandleSize;                         //Накопительный размер свеч БАЙ
        DataArr[1][2][i]+= BodySize;                           //Накопительный размер тел свеч БАЙ
        if (DataArr[1][5][i] < CandleSize) DataArr[1][5][i] = CandleSize; //Запись максимального размера свечи БАЙ
        if (DataArr[1][6][i] < BodySize  ) DataArr[1][6][i] = BodySize;   //Запись максимального размера  тела свечи БАЙ
        
        DataArr[1][3][i]+=UpShd;                               //Накопительный размер верхних теней БАЙ
        DataArr[1][4][i]+=DnShd;                               //Накопительный размер нижних теней БАЙ
        if(DataArr[1][7][i] < UpShd) DataArr[1][7][i] = UpShd; //Запись максимального размера верхней тени БАЙ
        if(DataArr[1][8][i] < DnShd) DataArr[1][8][i] = DnShd; //Запись максимального размера нижней тени БАЙ
        
      } 
      else // для СЕЛЛ свечи
      {
        UpShd = (High[k]-Open[k])/Point;                      //Размер верхней тени
        DnShd = (Close[k]-Low[k])/Point;                      //Размер нижней тени      
        
        // Записываем для всех свечей
        DataArr[0][3][i]+=UpShd;                               //Накопительный размер верхних теней
        DataArr[0][4][i]+=DnShd;                               //Накопительный размер нижних теней
        if(DataArr[0][7][i] < UpShd) DataArr[0][7][i] = UpShd; //Запись максимального размера верхней тени
        if(DataArr[0][8][i] < DnShd) DataArr[0][8][i] = DnShd; //Запись максимального размера нижней тени
        
        // Записываем для СЕЛЛ- группы
        DataArr[2][0][i]++;                                    //Количество свечей СЕЛЛ
        DataArr[2][1][i]+= CandleSize;                         //Накопительный размер свеч СЕЛЛ
        DataArr[2][2][i]+= BodySize;                           //Накопительный размер тел свеч СЕЛЛ
        if (DataArr[2][5][i] < CandleSize) DataArr[2][5][i] = CandleSize; //Запись максимального размера свечи СЕЛЛ
        if (DataArr[2][6][i] < BodySize  ) DataArr[2][6][i] = BodySize;   //Запись максимального размера  тела свечи СЕЛЛ
        
        DataArr[2][3][i]+=UpShd;                               //Накопительный размер верхних теней СЕЛЛ
        DataArr[2][4][i]+=DnShd;                               //Накопительный размер нижних теней СЕЛЛ
        if(DataArr[2][7][i] < UpShd) DataArr[2][7][i] = UpShd; //Запись максимального размера верхней тени СЕЛЛ
        if(DataArr[2][8][i] < DnShd) DataArr[2][8][i] = DnShd; //Запись максимального размера нижней тени СЕЛЛ
      }
}