Операции с графиками

Функции для работы с графиками. Все операции с графиками применимы только в экспертах и скриптах.

Функции, устанавливающие свойства графика, фактически служат для отправки ему команд на изменение. При успешном выполнении этих функций команда попадает в общую очередь событий графика. Изменение графика производится в процессе обработки очереди событий данного графика.

По этой причине не следует ожидать немедленного визуального обновления графика после вызова данных функций. В общем случае обновление графика производится терминалом автоматически по событиям изменения — поступление новой котировки, изменения размера окна графика и т.д. Для принудительного обновления внешнего вида графика используйте команду на перерисовку графика ChartRedraw().

Функция

Действие

ChartApplyTemplate

Применяет к указанному графику шаблон из указанного файла

ChartSaveTemplate

Сохраняет текущие настройки графика в шаблон с указанным именем

ChartWindowFind

Возвращает номер подокна, в котором находится индикатор

ChartTimePriceToXY

Преобразует координаты графика из представления время/цена в координаты по оси X и Y

ChartXYToTimePrice

Преобразует координаты  X и Y графика в значения время и цена

ChartOpen

Открывает новый график с указанным символом и периодом

ChartClose

Закрывает указанный график

ChartFirst

Возвращает идентификатор первого графика клиентского терминала

ChartNext

Возвращает идентификатор графика, следующего за указанным

ChartSymbol

Возвращает имя символа указанного графика

ChartPeriod

Возвращает значение периода указанного графика

ChartRedraw

Вызывает принудительную перерисовку указанного графика

ChartSetDouble

Задает значение типа double соответствующего свойства указанного графика

ChartSetInteger

Задает значение целочисленного типа (datetime, int, color, bool или char) соответствующего свойства указанного графика

ChartSetString

Задает значение типа string соответствующего свойства указанного графика

ChartGetDouble

Возвращает значение соответствующего свойства указанного графика

ChartGetInteger

Возвращает целочисленное значение соответствующего свойства указанного графика

ChartGetString

Возвращает строковое значение соответствующего свойства указанного графика

ChartNavigate

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

ChartID

Возвращает идентификатор текущего графика

ChartIndicatorAdd

Добавляет на указанное окно графика индикатор с указанным хэндлом.

ChartIndicatorDelete

Удаляет с указанного окна графика индикатор с указанным именем

ChartIndicatorGet

Возвращает хэндл индикатора с указанным коротким именем на указанном окне графика

ChartIndicatorName

Возвращает короткое имя индикатора по номеру в списке индикаторов на указанном окне графика.

ChartIndicatorsTotal

Возвращает количество всех индикаторов, присоединенных к указанному окну графика.

ChartWindowOnDropped

Возвращает номер подокна графика, на которое брошен мышкой данный эксперт, скрипт, объект или индикатор

ChartPriceOnDropped

Возвращает ценовую координату, соответствующую точке, в которой брошен мышкой данный эксперт или скрипт

ChartTimeOnDropped

Возвращает временную координату, соответствующую точке, в которой брошен мышкой данный эксперт или скрипт

ChartXOnDropped

Возвращает координату по оси X, соответствующую точке, в которой брошен мышкой данный эксперт или скрипт

ChartYOnDropped

Возвращает координату по оси Y, соответствующую точке, в которой брошен мышкой данный эксперт или скрипт

ChartSetSymbolPeriod

Меняет значения символа и периода указанного графика

ChartScreenShot

Делает снимок указанного графика в формате GIF, PNG или BMP в зависимости от указанного расширения

 

ChartApplyTemplate

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

bool ChartApplyTemplate(
 long chart_id, // идентификатор графика
 const string filename // имя файла с шаблоном
 );

Параметры

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

filename — [in] Имя файла, содержащего шаблон.

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

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

Примечание

Если посредством этой функции из эксперта будет загружен новый шаблон на график, к которому он присоединен, то эксперт будет выгружен и не сможет продолжить работу.

В целях безопасности права на торговлю при применении шаблона к графику могут ограничиваться:

Права на торговлю не могут быть повышены при запуске советника путем применения шаблона с помощью функции ChartApplyTemplate().

Если у mql5-программы, которая вызывает функцию ChartApplyTemplate(), отсутствуют права на торговлю, то эксперт, загруженный при помощи шаблона, также не будет иметь прав на торговлю вне зависимости от настроек шаблона.

Если у mql5-программы, которая вызывает функцию ChartApplyTemplate(), есть права на торговлю, а в настройках шаблона права отсутствуют, то советник, загруженный при помощи шаблона, не будет иметь прав на торговлю.
Использование шаблонов

Средствами языка MQL5 можно задавать множество свойств графика, в том числе устанавливать цвета с помощью функции ChartSetInteger() :

  • Цвет фона графика;
  • Цвет осей, шкалы и строки OHLC;
  • Цвет сетки;
  • Цвет объемов и уровней открытия позиций;
  • Цвет бара вверх, тени и окантовки тела бычьей свечи;
  • Цвет бара вниз, тени и окантовки тела медвежьей свечи;
  • Цвет линии графика и японских свечей «Доджи»;
  • Цвет тела бычьей свечи;
  • Цвет тела медвежьей свечи;
  • Цвет линии Bid-цены;
  • Цвет линии Ask-цены;
  • Цвет линии цены последней совершенной сделки (Last);
  • Цвет уровней стоп-ордеров (Stop Loss и Take Profit).

Кроме того, на графике может быть множество графических объектов и индикаторов. Достаточно один раз настроить внешний вид графика со всеми необходимыми индикаторами и сохранить его в виде шаблона, чтобы в последствии можно было применять этот шаблон к любому графику.

Функция ChartApplyTemplate() предназначена для использования ранее сохраненного шаблона и может использоваться в любой mql5-программе. Вторым параметром функции ChartApplyTemplate() передается путь к имени файла, в котором находится шаблон. Поиск файла шаблона осуществляется по следующим правилам:

  • если в начале пути стоит разделитель обратная косая черта «\» (пишется «\\»), то шаблон ищется относительно пути каталог_данных_терминала\MQL5,
  • если обратной косой черты нет, то шаблон ищется относительно исполняемого EX5-файла, в котором происходит вызов функции ChartApplyTemplate();
  • если шаблон не найден в первых двух вариантах, то поиск ведется в папке каталог_терминала\Profiles\Templates\.

Здесь каталог_терминала означает папку, из которой запущен клиентский терминала MetaTrader 5, а каталог_данных_терминала означает папку, в которой хранятся изменяемые файлы и ее расположение может зависеть от типа операционной системы, имени пользователя и настроек безопасности компьютера. В общем случае это разные папки, хотя в некоторых случаях могут и совпадать.

Расположение папок каталог_данных_терминала и каталог_терминала можно узнать с помощью функции TerminalInfoString().

//--- каталог из которой запущен терминал
string terminal_path=TerminalInfoString(TERMINAL_PATH);
Print("Каталог терминала:",terminal_path);

//--- каталог данных терминала, в котором находится папка MQL5 с советниками и индикаторами
string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
Print("Каталог данных терминала:",terminal_data_path);

Примеры записи:

//--- шаблон ищем в папке каталог_данных_терминала\MQL5\
ChartApplyTemplate(0,"\first_template.tpl"))

//--- шаблон ищем в папке каталог_исполняемого_EX5_файла\, затем в папке каталог_данных терминала\Profiles\Templates\
ChartApplyTemplate(0,"second_template.tpl"))

//--- шаблон ищем в папке каталог_исполняемого_EX5_файла\My_templates\, затем в папке каталог_терминала\Profiles\Templates\My_templates\
ChartApplyTemplate(0,"My_templates\third_template.tpl"))

Шаблоны не относятся к ресурсам, их нельзя включать в исполняемый файл EX5.

Пример:

//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
   //--- пример применения шаблона, расположенного в каталоге \MQL5\Files
   if(FileIsExist("my_template.tpl"))
   {
      Print("Шаблон my_template.tpl найден в каталоге \Files'");

      //--- применим найденный шаблон
      if(ChartApplyTemplate(0,"\Files\my_template.tpl"))
      {
         Print("Применили успешно шаблон 'my_template.tpl'");

         //--- принудительно перерисуем график для быстрого показа изменений
         ChartRedraw();
      }
      else
        Print("Не удалось применить шаблон 'my_template.tpl', ошибка ",GetLastError());
  }
  else
  {
     Print("Файл 'my_template.tpl' не найден в папке " +TerminalInfoString(TERMINAL_PATH)+"\MQL5\Files");
  }
}

 

ChartSaveTemplate

Сохраняет текущие настройки графика в шаблон с указанным именем.

bool ChartSaveTemplate(
 long chart_id, // идентификатор графика
 const string filename // имя файла для сохранения шаблона
 );

Параметры

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

filename — [in] Имя файла для сохранения шаблона. Расширение «.tpl» будет добавлено к имени файла автоматически, указывать его не требуется. Шаблон сохраняется в папку каталог_данных\Profiles\Templates\ и может быть использован также и для ручного применения в терминале. Если шаблон с данным именем уже существует, то его содержимое будет переписано заново.

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

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

Примечание

Шаблон позволяет сохранить настройки графика со всеми наложенными на него индикаторами и графическими объектами, чтобы затем применить его на другом графике.

 

ChartWindowFind

Возвращает номер подокна, в котором находится индикатор. Существует 2 варианта функции.

1. Функция ищет на указанном графике подокно с указанным «коротким именем» индикатора (короткое имя выводится слева вверху подокна) и в случае удачи возвращает номер подокна.

int ChartWindowFind(
long chart_id, // идентификатор графика
string indicator_shortname // короткое имя индикатора, см INDICATOR_SHORTNAME

2. Функция должна вызываться из пользовательского индикатора и возвращает номер подокна, в котором этот индикатор работает.

int ChartWindowFind();

Параметры

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

indicator_shortname — [in] Короткое имя индикатора.

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

Номер подокна в случае удачи. Ноль означает главное окно графика. В случае неудачи возвращает -1.

Примечание

Если вызывается второй вариант функции (без параметров) из скрипта или эксперта, то она возвращает -1.

Не следует путать короткое имя индикатора и имя файла, которое указывается при создании индикатора функциями iCustom() и IndicatorCreate(). Если короткое наименование индикатора не задается явным образом, то при компиляции в нем указывается имя файла с исходным кодом индикатора.

Необходимо правильно формировать короткое имя индикатора, которое с помощью функции IndicatorSetString() записывается в свойство INDICATOR_SHORTNAME. Мы рекомендуем, чтобы короткое имя содержало значения входных параметров индикатора, так как идентификация удаляемого с графика индикатора в функции ChartIndicatorDelete() производится именно по короткому имени.

Пример:

#property script_show_inputs
//--- input parameters
input string shortName="MACD(12,26,9)";

//+------------------------------------------------------------------+
//| Сообщает номер окна графика с указанным индикатором |
//+------------------------------------------------------------------+
int GetIndicatorSubWindowNumber(long chartID=0,string short_name="")
{
   int window=-1;
   if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
   {
      //--- функция вызвана из индикатора,имя не требуется
      window=ChartWindowFind();
   }
   else
   {
      //--- функция вызвана из эксперта или скрипта
      window=ChartWindowFind(0,short_name);
      if(window==-1)
        Print(__FUNCTION__+"(): Error = ",GetLastError());
   }

   return(window);
}

//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
 int window=GetIndicatorSubWindowNumber(0,shortName);
 if(window!=-1)
   Print("Индикатор "+shortName+" находится в окне №"+(string)window);
 else
   Print("Индикатор "+shortName+" не найден. window = "+(string)window);
}

 

ChartTimePriceToXY

Преобразует координаты графика из представления время/цена в координаты по оси X и Y.

bool ChartTimePriceToXY(
 long chart_id, // идентификатор графика
 int sub_window, // номер подокна
 datetime time, // время на графике
 double price, // цена на графике
 int& x, // координата X для времени на графике
 int& y // координата Y для цены на графике
 );

Параметры

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

sub_window — [in] Номер подокна графика. 0 означает главное окно графика.

time — [in] Значение времени на графике, для которого будет получено значение в пикселах на оси X. Начало координат находится в левом верхнем углу главного окна графика.

price — [in] Значение цены на графике, для которого будет получено значение в пикселах на оси Y. Начало координат находится в левом верхнем углу главного окна графика.

x — [out] Переменная, в которую будет получено преобразование времени в координату X.

y — [out] Переменная, в которую будет получено преобразование цены в координату Y.

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

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

 

ChartXYToTimePrice

Преобразует координаты X и Y графика в значения время и цена.

bool ChartXYToTimePrice(
 long chart_id, // идентификатор графика
 int x, // координата X на графике
 int y, // координата Y на графике
 int& sub_window, // номер подокна
 datetime& time, // время на графике
 double& price // цена на графике
 );

Параметры

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

x — [in] Координата X.

y — [in] Координата Y.

sub_window — [out] Переменная, в которую будет записан номер подокна графика. 0 означает главное окно графика.

time — [out] Значение времени на графике, для которого будет получено значение в пикселах на оси X. Начало координат находится в левом верхнем углу главного окна графика.

price — [out] Значение цены на графике, для которого будет получено значение в пикселах на оси Y. Начало координат находится в левом верхнем углу главного окна графика.

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

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

Пример:

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   //--- выведем параметры события на график
   Comment(__FUNCTION__,": id=",id," lparam=",lparam," dparam=",dparam," sparam=",sparam);

   //--- если это события клика мышки на графике
   if(id==CHARTEVENT_CLICK)
   {
      //--- подготовим переменные
      int      x     =(int)lparam;
      int      y     =(int)dparam;
      datetime dt    =0;
      double   price =0;
      int      window=0;

      //--- преобразуем координаты X и Y  в терминах дата/время
      if(ChartXYToTimePrice(0,x,y,window,dt,price))
      {
         PrintFormat("Window=%d X=%d  Y=%d  =>  Time=%s  Price=%G",window,x,y,TimeToString(dt),price);

         //--- сделаем обратное преобразование: (X,Y) => (Time,Price)
         if(ChartTimePriceToXY(0,window,dt,price,x,y))
            PrintFormat("Time=%s  Price=%G  =>  X=%d  Y=%d",TimeToString(dt),price,x,y);
         else
            Print("ChartTimePriceToXY return error code: ",GetLastError());

         //--- удаляем линии
         ObjectDelete(0,"V Line");
         ObjectDelete(0,"H Line");

         //--- создаем горизонтальную и вертикальную линии перекрестия
         ObjectCreate(0,"H Line",OBJ_HLINE,window,dt,price);
         ObjectCreate(0,"V Line",OBJ_VLINE,window,dt,price);
         ChartRedraw(0);
      }
      else
         Print("ChartXYToTimePrice return error code: ",GetLastError());
      Print("+--------------------------------------------------------------+");
   }
}

 

ChartOpen

Открывает новый график с указанным символом и периодом.

long ChartOpen(
 string symbol, // имя символа
 ENUM_TIMEFRAMES period // период
 );

Параметры

symbol — [in] Символ графика. NULL oзначает символ текущего графика (к которому прикреплен эксперт).

period — [in] Период графика (таймфрейм). Может принимать одно из значений перечисления ENUM_TIMEFRAMES. 0 означает период текущего графика.

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

При успешном открытии графика функция возвращает идентификатор графика. В противном случае возвращает 0.

Примечание

Максимально возможное количество одновременно открытых графиков в терминале не может быть больше, чем значение CHARTS_MAX.

 

ChartFirst

Возвращает идентификатор первого графика клиентского терминала.

long ChartFirst();

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

Идентификатор графика.

 

ChartNext

Функция возвращает идентификатор графика, следующего за указанным.

long ChartNext(
 long chart_id // идентификатор графика
 );

Параметры

chart_id — [in] Идентификатор графика. 0 не означает текущий график. 0 означает «вернуть идентификатор первого графика».

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

Идентификатор графика. Если список графиков закончился, функция возвращает -1.

Пример:

//--- переменные для идентификаторов графиков
long currChart,prevChart=ChartFirst();
int i=0,limit=100;
Print("ChartFirst = ",ChartSymbol(prevChart)," ID = ",prevChart);
while(i<limit)// у нас наверняка не больше 100 открытых графиков
{
   currChart=ChartNext(prevChart); // на основании предыдущего получим новый график
   if(currChart<0)
       break;          // достигли конца списка графиков

   Print(i,ChartSymbol(currChart)," ID =",currChart);
   prevChart=currChart;// запомним идентификатор текущего графика для ChartNext()
   i++;// не забудем увеличить счетчик
}

 

ChartClose

Закрывает указанный график.

bool ChartClose(
 long chart_id=0 // идентификатор графика
 );

Параметры

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

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

Возвращает true в случае успеха, иначе false.

 

ChartSymbol

Возвращает имя символа указанного графика.

string ChartSymbol(
 long chart_id=0 // идентификатор графика
 );

Параметры

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

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

Если графика не существует, то возвращается пустая строка.

 

ChartPeriod

Возвращает значение периода указанного графика.

ENUM_TIMEFRAMES ChartPeriod(
 long chart_id=0 // идентификатор графика
 );

Параметры

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

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

Значение типа ENUM_TIMEFRAMES. Если графика не существует, то возвращается 0.

 

ChartRedraw

Вызывает принудительную перерисовку указанного графика.

void ChartRedraw(
 long chart_id=0 // идентификатор графика
 );

Параметры

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

Примечание

Обычно применяется после изменения свойств объектов.

 

ChartSetDouble

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

bool ChartSetDouble(
 long chart_id, // идентификатор графика
 int prop_id, // идентификатор свойства
 double value // значение
 );

Параметры

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

prop_id — [in] Идентификатор свойства графика. Значение может быть одним из значений перечисления ENUM_CHART_PROPERTY_DOUBLE (кроме read-only свойств).

value — [in] Значение свойства.

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

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

 

 

ChartSetInteger

Задает значение соответствующего свойства указанного графика. Свойство графика должно быть типов datetime, int, color, bool или char. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд.

bool ChartSetInteger(
 long chart_id, // идентификатор графика
 int prop_id, // идентификатор свойства
 long value // значение
 );

Задает значение соответствующего свойства указанного подокна.

bool ChartSetInteger(
 long chart_id, // идентификатор графика
 int prop_id, // идентификатор свойства
 int sub_window, // номер подокна
 long value // значение
 );

Параметры

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

prop_id — [in] Идентификатор свойства графика. Значение может быть одним из значений перечисления ENUM_CHART_PROPERTY_INTEGER (кроме read-only свойств).

sub_window — [in] Номер подокна графика. Для первого варианта по умолчанию значение равно 0 (главное окно графика). Большинство свойств не требуют указания номера подокна.

value — [in] Значение свойства.

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

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

 

ChartSetString

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

bool ChartSetString(
 long chart_id, // идентификатор графика
 int prop_id, // идентификатор свойства
 string str_value // значение
 );

Параметры

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

prop_id — [in] Идентификатор свойства графика. Значение может быть одним из значений перечисления ENUM_CHART_PROPERTY_STRING (кроме read-only свойств).

str_value — [in] Строка для установки свойства. Длина строки не может превышать 2045 символов (лишние символы будут обрезаны).

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

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

Примечание

Функция ChartSetString может использоваться для вывода комментариев на график вместо функции Comment.

Пример:

void OnTick()
{
   double Ask,Bid;
   int Spread;
   Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   Spread=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
   string comment=StringFormat("Выводим цены:\nAsk = %G\nBid = %G\nSpread = %d", Ask,Bid,Spread);
   ChartSetString(0,CHART_COMMENT,comment);
}

 

ChartGetDouble

Возвращает значение соответствующего свойства указанного графика. Свойство графика должно быть типа double. Существует 2 варианта функции.

1. Непосредственно возвращает значение свойства.

double ChartGetDouble(
 long chart_id, // идентификатор графика
 int prop_id, // идентификатор свойства
 int sub_window=0 // номер подокна, если требуется
 );

2. Возвращает true или false в зависимости от успешности выполнения функции. В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром.

bool ChartGetDouble(
 long chart_id, // идентификатор графика
 int prop_id, // идентификатор свойства
 int sub_window, // номер подокна
 double& double_var // сюда примем значение свойства
 );

Параметры

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

prop_id — [in] Идентификатор свойства графика. Значение может быть одним из значений перечисления ENUM_CHART_PROPERTY_DOUBLE.

sub_window — [in] Номер подокна графика. Для первого варианта по умолчанию значение равно 0 (главное окно графика). Большинство свойств не требуют указания номера подокна.

double_var — [out] Переменная типа double, принимающая значение запрашиваемого свойства.

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

Значение типа double.

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

Пример:

void OnStart()
{
   double priceMin=ChartGetDouble(0,CHART_PRICE_MIN,0);
   double priceMax=ChartGetDouble(0,CHART_PRICE_MAX,0);
   Print("CHART_PRICE_MIN = ",priceMin);
   Print("CHART_PRICE_MAX = ",priceMax);
}

 

ChartGetInteger

Возвращает значение соответствующего свойства указанного графика. Свойство графика должно быть типов datetime, int или bool. Существует 2 варианта функции.

1. Непосредственно возвращает значение свойства.

long ChartGetInteger(
 long chart_id, // идентификатор графика
 int prop_id, // идентификатор свойства
 int sub_window=0 // номер подокна, если требуется
 );

2. Возвращает true или false в зависимости от успешности выполнения функции. В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром.

bool ChartGetInteger(
 long chart_id, // идентификатор графика
 int prop_id, // идентификатор свойства
 int sub_window, // номер подокна
 long& long_var // сюда примем значение свойства
 );

Параметры

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

prop_id — [in] Идентификатор свойства графика. Значение может быть одним из значений перечисления ENUM_CHART_PROPERTY_INTEGER.

sub_window — [in] Номер подокна графика. Для первого варианта по умолчанию значение равно 0 (главное окно графика). Большинство свойств не требуют указания номера подокна.

long_var — [out] Переменная типа long, принимающая значение запрашиваемого свойства.

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

Значение типа long.

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

Пример:

void OnStart()
{
   int height=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0);
   int width=ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
   Print("CHART_HEIGHT_IN_PIXELS = ",height," pixels");
   Print("CHART_WIDTH_IN_PIXELS = ",width," pixels");
}

 

ChartGetString

Возвращает значение соответствующего свойства указанного графика. Свойство графика должно быть типа string. Существует 2 варианта функции.

1. Непосредственно возвращает значение свойства.

string ChartGetString(
 long chart_id, // идентификатор графика
 int prop_id // идентификатор свойства
 );

2. Возвращает true или false в зависимости от успешности выполнения функции. В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром.

bool ChartGetString(
 long chart_id, // идентификатор графика
 int prop_id, // идентификатор свойства
 string& string_var // сюда примем значение свойства
 );

Параметры

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

prop_id — [in] Идентификатор свойства графика. Значение может быть одним из значений перечисления ENUM_CHART_PROPERTY_STRING.

string_var — [out] Переменная типа string, принимающая значение запрашиваемого свойства.

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

Значение типа string.

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

Примечание

Функция ChartGetString может использоваться для считывания комментариев, выведенных на график функциями Comment или ChartSetString.

Пример:

void OnStart()
{
   ChartSetString(0,CHART_COMMENT,"Test comment.\nSecond line.\nThird!");
   ChartRedraw();
   Sleep(1000);
   string comm=ChartGetString(0,CHART_COMMENT);
   Print(comm);
}

 

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.

 

ChartID

Возвращает идентификатор текущего графика.

long ChartID();

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

Значение типа long.

 

ChartIndicatorAdd

Добавляет на указанное окно графика индикатор с указанным хэндлом. Индикатор и график должны быть построены на одинаковых символе и таймфрейме.

bool ChartIndicatorAdd(
 long chart_id, // идентификатор графика
 int sub_window // номер подокна
 int indicator_handle // хэндл индикатора
 );

Параметры

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

sub_window — [in] Номер подокна графика. 0 означает главное окно графика. Чтобы добавить индикатор в новое окно, параметр должен быть на единицу больше, чем индекс последнего существующего окна, то есть равен CHART_WINDOWS_TOTAL. Если значение параметра превышает значение CHART_WINDOWS_TOTAL, то новое окно создано не будет, индикатор не будет добавлен.

indicator_handle — [in] Хэндл индикатора.

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

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

Примечание

Если на главное окно графика добавляется индикатор, который должен быть отрисован в отдельном подокне (например, встроенный iMACD или пользовательский индикатор с указанным свойством #property indicator_separate_window), то такой индикатор может оказаться невидимым, хотя и будет присутствовать в списке индикаторов. Это означает, что масштаб данного индикатора отличается от масштаба графика цен и значения добавленного индикатора не попадают в отображаемый диапазон ценового графика. При этом GetLastError() вернет нулевой код, означающий отсутствие ошибки. Значения такого «невидимого» индикатора можно будет наблюдать в «Окне данных» и получать из других MQL5-программ.

 

ChartIndicatorDelete

Удаляет с указанного окна графика индикатор с указанным именем.

bool ChartIndicatorDelete(
 long chart_id, // идентификатор графика
 int sub_window // номер подокна
 const string indicator_shortname // короткое имя индикатора
 );

Параметры

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

sub_window — [in] Номер подокна графика. 0 означает главное окно графика.

const indicator_shortname — [in] Короткое имя индикатора, которое задается в свойстве INDICATOR_SHORTNAME функцией IndicatorSetString(). Получить короткое имя индикатора можно функцией ChartIndicatorName().

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

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

Примечание

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

Если на значениях удаляемого индикатора построены другие индикаторы на этом же графике, то они также будут удалены.

Не следует путать короткое имя индикатора и имя файла, которое указывается при создании индикатора функциями iCustom() и IndicatorCreate(). Если короткое наименование индикатора не задается явным образом, то при компиляции в нем указывается имя файла, содержащего исходный код индикатора.

Удаление индикатора с графика не означает, что расчетная часть индикатора также будет удалена из памяти терминала. Для освобождения хэндла индикатора используйте функцию IndicatorRelease().

Необходимо правильно формировать короткое имя индикатора, которое с помощью функции IndicatorSetString() записывается в свойство INDICATOR_SHORTNAME. Мы рекомендуем, чтобы короткое имя содержало значения входных параметров индикатора, так как идентификация удаляемого с графика индикатора в функции ChartIndicatorDelete() производится именно по короткому имени.

 

ChartIndicatorGet

Возвращает хэндл индикатора с указанным коротким именем на указанном окне графика.

int ChartIndicatorGet(
 long chart_id, // идентификатор графика
 int sub_window // номер подокна
 const string indicator_shortname // короткое имя индикатора
 );

Параметры

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

sub_window — [in] Номер подокна графика. 0 означает главное окно графика.

const indicator_shortname — [in] Короткое имя индикатора, которое задается в свойстве INDICATOR_SHORTNAME функцией IndicatorSetString(). Получить короткое имя индикатора можно функцией ChartIndicatorName().

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

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

Примечание

Необходимо правильно формировать короткое имя индикатора при его создании, которое с помощью функции IndicatorSetString() записывается в свойство INDICATOR_SHORTNAME. Рекомендуется, чтобы короткое имя содержало значения входных параметров индикатора, так как идентификация индикатора в функции ChartIndicatorGet() производится именно по короткому имени.

Другой способ идентификации индикатора – получить список его параметров по заданному хэндлу с помощью функции IndicatorParameters() и затем провести анализ полученных значений.

Пример:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   //--- количество окон на графике (всегда есть хотя бы одно главное окно)
   int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);

   //--- проходим по окнам
   for(int w=0;w<windows;w++)
   {
      //--- сколько индикаторов в данном окне/подокне
      int total=ChartIndicatorsTotal(0,w);

      //--- переберем все индикаторы в окне
      for(int i=0;i<total;i++)
      {
         //--- получим короткое имя индикатора
         string name=ChartIndicatorName(0,w,i);

         //--- получим хэндл индикатора
         int handle=ChartIndicatorGet(0,w,name);

         //--- выведем в журнал
         PrintFormat("Window=%d,  index=%d,  Name=%s,  handle=%d",w,i,name,handle);

         //--- обязательно освобождаем хендл индикатора, как только он становится ненужным
         IndicatorRelease(handle);
      }
   }
}

 

ChartIndicatorName

Возвращает короткое имя индикатора по номеру в списке индикаторов на указанном окна графика.

string ChartIndicatorName(
 long chart_id, // идентификатор графика
 int sub_window // номер подокна
 int index // индекс индикатора в списке индикаторов, добавленных к данному подокну графика
 );

Параметры

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

sub_window — [in] Номер подокна графика. 0 означает главное окно графика.

index — [in] Индекс индикатора с списке индикаторов. Нумерация индикаторов начинается с нуля, то есть самый первый индикатор в списке имеет нулевой индекс. Количество индикаторов в списке можно получить функцией ChartIndicatorsTotal().

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

Короткое имя индикатора, которое задается в свойстве INDICATOR_SHORTNAME функцией IndicatorSetString(). Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Примечание

Не следует путать короткое имя индикатора и имя файла, которое указывается при создании индикатора функциями iCustom() и IndicatorCreate(). Если короткое наименование индикатора не задается явным образом, то при компиляции в нем указывается имя файла с исходным кодом индикатора.

Необходимо правильно формировать короткое имя индикатора, которое с помощью функции IndicatorSetString() записывается в свойство INDICATOR_SHORTNAME. Мы рекомендуем, чтобы короткое имя содержало значения входных параметров индикатора, так как идентификация удаляемого с графика индикатора в функции ChartIndicatorDelete() производится именно по короткому имени.

 

ChartIndicatorsTotal

Возвращает количество всех индикаторов, присоединенных к указанному окну графика.

int ChartIndicatorsTotal(
 long chart_id, // идентификатор графика
 int sub_window // номер подокна
 );

Параметры

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

sub_window — [in] Номер подокна графика. 0 означает главное окно графика.

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

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

Примечание

Функция предназначена для организации перебора всех индикаторов, присоединенных к данному графику. Количества всех окон графика можно получить из свойства CHART_WINDOWS_TOTAL функцией ChartGetInteger().

 

ChartWindowOnDropped

Возвращает номер подокна графика, на которое брошен мышкой данный эксперт или скрипт. 0 означает главное окно графика.

int ChartWindowOnDropped();

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

Значение типа int.

Пример:

int myWindow=ChartWindowOnDropped();
int windowsTotal=ChartGetInteger(0,CHART_WINDOWS_TOTAL);
Print("Скрипт запущен на окне #"+myWindow+ ". Всего окон на графике "+ChartSymbol()+":",windowsTotal);

 

ChartPriceOnDropped

Возвращает ценовую координату, соответствующую точке, в которой брошен мышкой данный эксперт или скрипт.

double ChartPriceOnDropped();

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

Значение типа double.

Пример:

double p=ChartPriceOnDropped();
Print("ChartPriceOnDropped() = ",p);

 

ChartTimeOnDropped

Возвращает временную координату, соответствующую точке, в которой брошен мышкой данный эксперт или скрипт.

datetime ChartTimeOnDropped();

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

Значение типа datetime.

Пример:

datetime t=ChartTimeOnDropped();
Print("Script wasdropped on the "+t);

 

ChartXOnDropped

Возвращает координату по оси X, соответствующую точке, в которой брошен мышкой данный эксперт или скрипт.

int ChartXOnDropped();

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

Значение координаты X.

Примечание

Ось X направлена слева направо.

Пример:

int X=ChartXOnDropped();
int Y=ChartYOnDropped();
Print("(X,Y) = ("+X+","+Y+")");

 

ChartYOnDropped

Возвращает координату по оси Y, соответствующую точке, в которой брошен мышкой данный эксперт или скрипт.

int ChartYOnDropped();

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

Значение координаты Y.

Примечание

Ось Y направлена сверху вниз.

 

ChartSetSymbolPeriod

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

bool ChartSetSymbolPeriod(
 long chart_id, // идентификатор графика
 string symbol, // имя символа
 ENUM_TIMEFRAMES period // период
 );

Параметры

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

symbol — [in] Символ графика. NULL oзначает символ текущего графика (к которому прикреплен эксперт)

period — [in] Период графика (таймфрейм). Может принимать одно из значений значений перечисления ENUM_TIMEFRAMES. 0 означает период текущего графика.

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

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

Примечание

Смена символа/периода влечет за собой переинициализацию эксперта, прикрепленного к соответствующему графику.

Вызов ChartSetSymbolPerid с тем же символом и таймфреймом можно использовать для обновления графика (аналогично команде Refresh в терминале). Обновление графика в свою очередь запускает перерасчет индикаторов, прикрепленных к нему. Таким образом, вы можете рассчитать индикатор на графике даже при отсутствии тиков (например, в выходные дни).

 

ChartScreenShot

Функция обеспечивает скриншот указанного графика в его текущем состоянии в формате GIF, PNG или BMP в зависимости от указанного расширения.

bool ChartScreenShot(
 long chart_id, // идентификатор графика
 string filename, // имя файла
 int width, // ширина
 int height, // высота
 ENUM_ALIGN_MODE align_mode=ALIGN_RIGHT // тип выравнивания
 );

Параметры

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

filename — [in] Имя файла скриншота. Не может превышать 63 символов. Скриншот помещается в директорию \Files.

width — [in] Ширина скриншота в пикселях

height — [in] Высота скриншота в пикселях

align_mode=ALIGN_RIGHT — [in] Режим вывода узкого скриншота. Значение перечисления ENUM_ALIGN_MODE. ALIGN_RIGHT означает выравнивание по правой границе (вывод с конца). ALIGN_LEFT задает выравнивание по левой границе.

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

Возвращает true в случае успеха, иначе false.

Примечание

Если необходимо снять скриншот графика с определенной позиции, то необходимо сначала позиционировать график при помощи функции ChartNavigate(). Если горизонтальный размер скриншота меньше, чем окно графика, то выводится либо правая часть окна графика, либо левая часть, в зависимости от значения параметра align_mode.