Справочник MQL4

ChartNavigate

Осуществляет сдвиг указанного графика на указанное количество баров относительно указанной позиции графика. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд.

bool  ChartNavigate(
   long  chart_id,     // идентификатор графика
   int   position,     // позиция
   int   shift=0       // значение сдвига
   );

Параметры

chart_id

[in]  Идентификатор графика. 0 означает текущий график.

position

[in]  Позиция графика, относительно которой будет произведено смещение. Значение может быть одним из значений перечисления ENUM_CHART_POSITION.

shift=0

[in]  Количество баров, на которое необходимо сместить график. Положительное значение означает смещение вправо (к концу графика), отрицательное значение означает смещение влево (к началу графика). Нулевое смещение имеет смысл, когда производится навигация к началу или концу графика.

Возвращаемое значение

Возвращает true в случае удачного помещения команды в очередь графика, иначе false. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Пример:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- получим handle текущего графика
   long handle=ChartID();
   string comm="";
   if(handle>0) // если получилось, дополнительно настроим
     {
      //--- отключим автопрокрутку
      ChartSetInteger(handle,CHART_AUTOSCROLL,false);
      //--- установим отступ правого края графика
      ChartSetInteger(handle,CHART_SHIFT,true);
      //--- отобразим в виде свечей
      ChartSetInteger(handle,CHART_MODE,CHART_CANDLES);
      //--- установить режим отображения тиковых объемов
      ChartSetInteger(handle,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK);
 
      //--- подготовим текст для вывода в Comment()
      comm="Прокрутим на 10 баров вправо от начала истории";
      //--- выведем комментарий
      Comment(comm);
      //--- прокрутим на 10 баров вправо от начала истории
      ChartNavigate(handle,CHART_BEGIN,10);
      //--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии)
      long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
      //--- добавим символ переноса строки
      comm=comm+"\r\n";
      //--- дополним коментарий
      comm=comm+"Первый бар на графике имеет номер "+IntegerToString(first_bar)+"\r\n";
      //--- выведем комментарий
      Comment(comm);
      //--- подождем 5 секунд, чтобы успеть увидеть, как двигается график
      Sleep(5000);
 
      //--- допишем текст комментария
      comm=comm+"\r\n"+"Прокрутим на 10 баров влево от правого края графика";
      Comment(comm);
      //--- прокрутим на 10 баров влево от правого края графика
      ChartNavigate(handle,CHART_END,-10);
      //--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии)
      first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
      comm=comm+"\r\n";
      comm=comm+"Первый бар на графике имеет номер "+IntegerToString(first_bar)+"\r\n";
      Comment(comm);
      //--- подождем 5 секунд, чтобы успеть увидеть, как двигается график
      Sleep(5000);
 
      //--- новый блок прокрутки графика
      comm=comm+"\r\n"+"Прокрутим на 300 баров вправо от начала истории";
      Comment(comm);
      //--- прокрутим на 300 баров вправо от начала истории
      ChartNavigate(handle,CHART_BEGIN,300);
      first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
      comm=comm+"\r\n";
      comm=comm+"Первый бар на графике имеет номер "+IntegerToString(first_bar)+"\r\n";
      Comment(comm);
      //--- подождем 5 секунд, чтобы успеть увидеть, как двигается график
      Sleep(5000);
 
      //--- новый блок прокрутки графика
      comm=comm+"\r\n"+"Прокрутим на 300 баров влево от правого края графика";
      Comment(comm);
      //--- прокрутим на 300 баров влево от правого края графика
      ChartNavigate(handle,CHART_END,-300);
      first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
      comm=comm+"\r\n";
      comm=comm+"Первый бар на графике имеет номер "+IntegerToString(first_bar)+"\r\n";
      Comment(comm);
     }
  }