#property strict
#property show_inputs
input int size_step = 150; // шаг размера зиг зага
input datetime start_date = D'2019.01.01'; // стартовая дата
input int InpDepth = 12; // Depth
input int InpDeviation = 5; // Deviation
input int InpBackstep = 3; // Backstep
//+------------------------------------------------------------------+
void OnStart() {
int i;
int zz_num_max=0;
int zz_num[1]; zz_num[0] = 0;
double zz_last = 0;
for(i = 1;i<Bars;i++) {
// дошли до заданной даты, дальше не считаем
if(Time[i]<start_date) break;
// получим значение ZZ
double zz_value = iCustom(NULL,0,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,i);
// значение пустое - нет вершинки
if(zz_value <= 0.0) continue;
// расчитаем текущий зиг заг, если уже была вершина
if(zz_last!=0) {
// размер волны
int zz_size = (int)(MathAbs(zz_value - zz_last) / _Point);
// к какому шагу она относится
int zz_step = zz_size / size_step ;
// запишем какая максимальная волная была, для отображения.
// тут же изменим размер массива
if(zz_step>zz_num_max) {
zz_num_max = zz_step;
ArrayResize(zz_num,zz_step+1,100);
}
// посчитаем количество волн
zz_num[ zz_step ] ++;
}
// запишем вершину зиг зага как прошлую
zz_last = zz_value;
}
// отобразим информацию на экране
string cm="";
for(i=0;i<=zz_num_max;i++)
cm = cm+StringConcatenate("от ",(string)(size_step*i)," до ",(string)(size_step*(i+1)-1)," - ",(string)zz_num[i],"\n");
Comment(cm);
}
//+------------------------------------------------------------------+