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

extern datetime BeginDateCalc = D'2001.01.01';
extern datetime EndDateCalc   = D'2007.12.31';

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void start() {
  int    i, b=0, bb=0, eb, v[4,3];
  string comm="";

  ArrayInitialize(v, 0);
  for (i=Bars; i>0; i--) {
    if (Time[i]>=BeginDateCalc && Time[i]<=EndDateCalc) {
      if (bb==0) bb=i;       // фиксируем номер первого бара
      v[0,0]=(High[i]-Low[i])/Point;
      v[1,0]=MathAbs(Open[i]-Close[i])/Point;
      if (Open[i]>Close[i]) {
        v[2,0]=(High[i]-Open[i])/Point;
        v[3,0]=(Close[i]-Low[i])/Point;
      } else {
        v[2,0]=(High[i]-Close[i])/Point;
        v[3,0]=(Open[i]-Low[i])/Point;
      }
      DefineMinMax(v, i);
      b++;
      eb=i;                  // фиксируем номер последнего бара
    }
  }

  comm="Начало: "+TimeToStr(Time[bb], TIME_DATE|TIME_MINUTES)+"\n";
  comm=comm+"Конец: "+TimeToStr(Time[eb], TIME_DATE|TIME_MINUTES)+"\n";
  comm=comm+"Проверено баров: "+DoubleToStr(b, 0)+"\n";
  comm=comm+"Max волатильность: "+v[0,1]+" п.  "+TimeToStr(v[0,2], TIME_DATE|TIME_MINUTES)+"\n";
  comm=comm+"Max размер тела: "+v[1,1]+" п.  "+TimeToStr(v[1,2], TIME_DATE|TIME_MINUTES)+"\n";
  comm=comm+"Max размер верхней тени: "+v[2,1]+" п.  "+TimeToStr(v[2,2], TIME_DATE|TIME_MINUTES)+"\n";
  comm=comm+"Max размер нижней тени: "+v[3,1]+" п.  "+TimeToStr(v[3,2], TIME_DATE|TIME_MINUTES);

  Comment(comm);
}

//+------------------------------------------------------------------+
//| Определение минимумов и максимумов                               |
//| Параметры:                                                       |
//|   v - массив значений                                            |
//|   n - номер бара                                                 |
//+------------------------------------------------------------------+
void DefineMinMax(int& v[][], int n) {
  int i, k=ArrayRange(v, 0);

  for (i=0; i<k; i++) {
    if (v[i,1]<v[i,0]) {
      v[i,1]=v[i,0];
      v[i,2]=Time[n];
    }
  }
}
//+------------------------------------------------------------------+

