Детализация подробностей работы скрипта HistogramChartSample

 

Решил немного улучшить скрипт HistogramChartSample. Решил сделать регулировку числа цветовых групп (серий)  и количества повторов всех групп (серий). В исходном состоянии скрипт имеет пять цветовых серий и десять повторов для каждой серии. А хотелось бы, к примеру, иметь десять серий и всего один повтор. Вынул эти элементы во входные параметры скрипта и получил вот такой код:

//+------------------------------------------------------------------+
//|                                         HistogramChartSample.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "2009-2017, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "Example of using histogram"
#property script_show_inputs //показывать входные параметры
//---
#include <Canvas\Charts\HistogramChart.mqh>
//+------------------------------------------------------------------+
//| inputs                                                           |
//+------------------------------------------------------------------+
input bool Accumulative=true;
input uint SeriesTotal=5; //число серий
input uint BarSeriesTotal=10;  //количество повторов каждой серии
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int OnStart(void)
  {
   int k=100;
   double arr[];
   ArrayResize(arr,BarSeriesTotal);
//--- create chart
   CHistogramChart chart;
   if(!chart.CreateBitmapLabel("SampleHistogramChart",10,10,600,450))
     {
      Print("Error creating histogram chart: ",GetLastError());
      return(-1);
     }
   if(Accumulative)
     {
      chart.Accumulative();
      chart.VScaleParams(20*k*10,-10*k*10,20);
     }
   else
      chart.VScaleParams(20*k,-10*k,20);
   chart.ShowValue(true);
   chart.ShowScaleTop(false);
   chart.ShowScaleBottom(false);
   chart.ShowScaleRight(false);
   chart.ShowLegend();
   for(int j=0;j<int(SeriesTotal);j++)
     {
      for(int i=0;i<int(BarSeriesTotal);i++)
        {
         k=-k;
         if(k>0)
            arr[i]=k*(i+10-j);
         else
            arr[i]=k*(i+10-j)/2;
        }
      chart.SeriesAdd(arr,"Item"+IntegerToString(j));
     }
//--- play with values
   while(!IsStopped())
     {
      int i=rand()%int(SeriesTotal);
      int j=rand()%int(BarSeriesTotal);
      k=rand()%3000-1000;
      chart.ValueUpdate(i,j,k);
      Sleep(200);
     }
//--- finish
   chart.Destroy();
   return(0);
  }
//+------------------------------------------------------------------+

Но, к сожалению, этот скрипт корректно отображает сами бары гистограммы только в ситуации, если число повторов не меньше, чем число серий! В обратной ситуации отображение получается, если же число серий больше числа повторов, то на графике имеем корректное отображение числа повторов, но число серий в каждом повторе будет равным числу повторов и не более! То есть, если повтор один, то и серия всего одна (а не десять, как во входном параметре!) и в итоге имеем всего один бар гистограммы на графике!

Почему не отображаются остальные девять?

Документация по MQL5: Стандартная библиотека / Пользовательская графика / CHistogramChart
Документация по MQL5: Стандартная библиотека / Пользовательская графика / CHistogramChart
  • www.mql5.com
//|                                         HistogramChartSample.mq5 | //|                   Copyright 2009-2017, MetaQuotes Software Corp. | //|                                              http://www.mql5.com | //| inputs                                                           |...
Причина обращения: